OpenCL C++ Wrapper API 1.1
CL/cl.hpp
Go to the documentation of this file.
00001 /*******************************************************************************
00002  * Copyright (c) 2008-2011 The Khronos Group Inc.
00003  *
00004  * Permission is hereby granted, free of charge, to any person obtaining a
00005  * copy of this software and/or associated documentation files (the
00006  * "Materials"), to deal in the Materials without restriction, including
00007  * without limitation the rights to use, copy, modify, merge, publish,
00008  * distribute, sublicense, and/or sell copies of the Materials, and to
00009  * permit persons to whom the Materials are furnished to do so, subject to
00010  * the following conditions:
00011  *
00012  * The above copyright notice and this permission notice shall be included
00013  * in all copies or substantial portions of the Materials.
00014  *
00015  * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00016  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00017  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00018  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
00019  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
00020  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
00021  * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
00022  ******************************************************************************/
00023 
00140 #ifndef CL_HPP_
00141 #define CL_HPP_
00142 
00143 #ifdef _WIN32
00144 #include <windows.h>
00145 #include <malloc.h>
00146 #pragma push_macro("max")
00147 #undef max
00148 #if defined(USE_DX_INTEROP)
00149 #include <CL/cl_d3d10.h>
00150 #endif
00151 #endif // _WIN32
00152 
00153 // 
00154 #if defined(USE_CL_DEVICE_FISSION)
00155 #include <CL/cl_ext.h>
00156 #endif
00157 
00158 #if defined(__APPLE__) || defined(__MACOSX)
00159 #include <OpenGL/OpenGL.h>
00160 #include <OpenCL/opencl.h>
00161 #include <libkern/OSAtomic.h>
00162 #else
00163 #include <GL/gl.h>
00164 #include <CL/opencl.h>
00165 #endif // !__APPLE__
00166 
00167 #if !defined(CL_CALLBACK)
00168 #define CL_CALLBACK
00169 #endif //CL_CALLBACK
00170 
00171 #include <utility>
00172 #include <limits>
00173 
00174 #if !defined(__NO_STD_VECTOR)
00175 #include <vector>
00176 #endif
00177 
00178 #if !defined(__NO_STD_STRING)
00179 #include <string>
00180 #endif 
00181 
00182 #if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
00183 # include <alloca.h>
00184 #endif // linux
00185 
00186 #include <cstring>
00187 
00188 #if defined(_WIN32)
00189 #include <functional>
00190 #else
00191 #include <tr1/functional>
00192 #endif
00193 
00199 namespace cl {
00200 
00201 #define __INIT_CL_EXT_FCN_PTR(name) \
00202     if(!pfn_##name) { \
00203         pfn_##name = (PFN_##name) \
00204             clGetExtensionFunctionAddress(#name); \
00205         if(!pfn_##name) { \
00206         } \
00207     }
00208 
00209 class Program;
00210 class Device;
00211 class Context;
00212 class CommandQueue;
00213 class Memory;
00214 #define __CL_ENABLE_EXCEPTIONS
00215 #if defined(__CL_ENABLE_EXCEPTIONS)
00216 #include <exception>
00220 class Error : public std::exception
00221 {
00222 private:
00223     cl_int err_;
00224     const char * errStr_;
00225 public:
00229     Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr)
00230     {}
00231 
00232     ~Error() throw() {}
00233 
00238     virtual const char * what() const throw ()
00239     {
00240         if (errStr_ == NULL) {
00241             return "empty";
00242         }
00243         else {
00244             return errStr_;
00245         }
00246     }
00247 
00252     cl_int err(void) const { return err_; }
00253 };
00254 
00255 #define __ERR_STR(x) #x
00256 #else
00257 #define __ERR_STR(x) NULL
00258 #endif // __CL_ENABLE_EXCEPTIONS
00259 
00261 #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
00262 #define __GET_DEVICE_INFO_ERR               __ERR_STR(clGetDeviceInfo)
00263 #define __GET_PLATFORM_INFO_ERR             __ERR_STR(clGetPlatformInfo)
00264 #define __GET_DEVICE_IDS_ERR                __ERR_STR(clGetDeviceIDs)
00265 #define __GET_PLATFORM_IDS_ERR              __ERR_STR(clGetPlatformIDs)
00266 #define __GET_CONTEXT_INFO_ERR              __ERR_STR(clGetContextInfo)
00267 #define __GET_EVENT_INFO_ERR                __ERR_STR(clGetEventInfo)
00268 #define __GET_EVENT_PROFILE_INFO_ERR        __ERR_STR(clGetEventProfileInfo)
00269 #define __GET_MEM_OBJECT_INFO_ERR           __ERR_STR(clGetMemObjectInfo)
00270 #define __GET_IMAGE_INFO_ERR                __ERR_STR(clGetImageInfo)
00271 #define __GET_SAMPLER_INFO_ERR              __ERR_STR(clGetSamplerInfo)
00272 #define __GET_KERNEL_INFO_ERR               __ERR_STR(clGetKernelInfo)
00273 #define __GET_KERNEL_WORK_GROUP_INFO_ERR    __ERR_STR(clGetKernelWorkGroupInfo)
00274 #define __GET_PROGRAM_INFO_ERR              __ERR_STR(clGetProgramInfo)
00275 #define __GET_PROGRAM_BUILD_INFO_ERR        __ERR_STR(clGetProgramBuildInfo)
00276 #define __GET_COMMAND_QUEUE_INFO_ERR        __ERR_STR(clGetCommandQueueInfo)
00277 
00278 #define __CREATE_CONTEXT_ERR                __ERR_STR(clCreateContext)
00279 #define __CREATE_CONTEXT_FROM_TYPE_ERR      __ERR_STR(clCreateContextFromType)
00280 #define __GET_SUPPORTED_IMAGE_FORMATS_ERR   __ERR_STR(clGetSupportedImageFormats)
00281 
00282 #define __CREATE_BUFFER_ERR                 __ERR_STR(clCreateBuffer)
00283 #define __CREATE_SUBBUFFER_ERR              __ERR_STR(clCreateSubBuffer)
00284 #define __CREATE_GL_BUFFER_ERR              __ERR_STR(clCreateFromGLBuffer)
00285 #define __CREATE_GL_RENDER_BUFFER_ERR       __ERR_STR(clCreateFromGLBuffer)
00286 #define __CREATE_GL_TEXTURE_2D_ERR          __ERR_STR(clCreateFromGLTexture2D)
00287 #define __CREATE_GL_TEXTURE_3D_ERR          __ERR_STR(clCreateFromGLTexture3D)
00288 #define __GET_GL_OBJECT_INFO_ERR            __ERR_STR(clGetGLObjectInfo)
00289 #define __CREATE_IMAGE2D_ERR                __ERR_STR(clCreateImage2D)
00290 #define __CREATE_IMAGE3D_ERR                __ERR_STR(clCreateImage3D)
00291 #define __CREATE_SAMPLER_ERR                __ERR_STR(clCreateSampler)
00292 #define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR __ERR_STR(clSetMemObjectDestructorCallback)
00293 
00294 #define __CREATE_USER_EVENT_ERR             __ERR_STR(clCreateUserEvent)
00295 #define __SET_USER_EVENT_STATUS_ERR         __ERR_STR(clSetUserEventStatus)
00296 #define __SET_EVENT_CALLBACK_ERR            __ERR_STR(clSetEventCallback)
00297 #define __WAIT_FOR_EVENTS_ERR               __ERR_STR(clWaitForEvents)
00298 
00299 #define __CREATE_KERNEL_ERR                 __ERR_STR(clCreateKernel)
00300 #define __SET_KERNEL_ARGS_ERR               __ERR_STR(clSetKernelArg)
00301 #define __CREATE_PROGRAM_WITH_SOURCE_ERR    __ERR_STR(clCreateProgramWithSource)
00302 #define __CREATE_PROGRAM_WITH_BINARY_ERR    __ERR_STR(clCreateProgramWithBinary)
00303 #define __BUILD_PROGRAM_ERR                 __ERR_STR(clBuildProgram)
00304 #define __CREATE_KERNELS_IN_PROGRAM_ERR     __ERR_STR(clCreateKernelsInProgram)
00305 
00306 #define __CREATE_COMMAND_QUEUE_ERR          __ERR_STR(clCreateCommandQueue)
00307 #define __SET_COMMAND_QUEUE_PROPERTY_ERR    __ERR_STR(clSetCommandQueueProperty)
00308 #define __ENQUEUE_READ_BUFFER_ERR           __ERR_STR(clEnqueueReadBuffer)
00309 #define __ENQUEUE_READ_BUFFER_RECT_ERR      __ERR_STR(clEnqueueReadBufferRect)
00310 #define __ENQUEUE_WRITE_BUFFER_ERR          __ERR_STR(clEnqueueWriteBuffer)
00311 #define __ENQUEUE_WRITE_BUFFER_RECT_ERR     __ERR_STR(clEnqueueWriteBufferRect)
00312 #define __ENQEUE_COPY_BUFFER_ERR            __ERR_STR(clEnqueueCopyBuffer)
00313 #define __ENQEUE_COPY_BUFFER_RECT_ERR       __ERR_STR(clEnqueueCopyBufferRect)
00314 #define __ENQUEUE_READ_IMAGE_ERR            __ERR_STR(clEnqueueReadImage)
00315 #define __ENQUEUE_WRITE_IMAGE_ERR           __ERR_STR(clEnqueueWriteImage)
00316 #define __ENQUEUE_COPY_IMAGE_ERR            __ERR_STR(clEnqueueCopyImage)
00317 #define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR  __ERR_STR(clEnqueueCopyImageToBuffer)
00318 #define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR  __ERR_STR(clEnqueueCopyBufferToImage)
00319 #define __ENQUEUE_MAP_BUFFER_ERR            __ERR_STR(clEnqueueMapBuffer)
00320 #define __ENQUEUE_MAP_IMAGE_ERR             __ERR_STR(clEnqueueMapImage)
00321 #define __ENQUEUE_UNMAP_MEM_OBJECT_ERR      __ERR_STR(clEnqueueUnMapMemObject)
00322 #define __ENQUEUE_NDRANGE_KERNEL_ERR        __ERR_STR(clEnqueueNDRangeKernel)
00323 #define __ENQUEUE_TASK_ERR                  __ERR_STR(clEnqueueTask)
00324 #define __ENQUEUE_NATIVE_KERNEL             __ERR_STR(clEnqueueNativeKernel)
00325 #define __ENQUEUE_MARKER_ERR                __ERR_STR(clEnqueueMarker)
00326 #define __ENQUEUE_WAIT_FOR_EVENTS_ERR       __ERR_STR(clEnqueueWaitForEvents)
00327 #define __ENQUEUE_BARRIER_ERR               __ERR_STR(clEnqueueBarrier)
00328 
00329 #define __ENQUEUE_ACQUIRE_GL_ERR            __ERR_STR(clEnqueueAcquireGLObjects)
00330 #define __ENQUEUE_RELEASE_GL_ERR            __ERR_STR(clEnqueueReleaseGLObjects)
00331 
00332 #define __UNLOAD_COMPILER_ERR               __ERR_STR(clUnloadCompiler)
00333 
00334 #define __FLUSH_ERR                         __ERR_STR(clFlush)
00335 #define __FINISH_ERR                        __ERR_STR(clFinish)
00336 
00337 #define __CREATE_SUB_DEVICES                __ERR_STR(clCreateSubDevicesEXT)
00338 #endif // __CL_USER_OVERRIDE_ERROR_STRINGS
00339 
00340 
00345 class string
00346 {
00347 private:
00348     ::size_t size_;
00349     char * str_;
00350 public:
00351     string(void) : size_(0), str_(NULL)
00352     {
00353     }
00354 
00355     string(char * str, ::size_t size) :
00356         size_(size),
00357         str_(NULL)
00358     {
00359         str_ = new char[size_+1];
00360         if (str_ != NULL) {
00361             memcpy(str_, str, size_  * sizeof(char));
00362             str_[size_] = '\0';
00363         }
00364         else {
00365             size_ = 0;
00366         }
00367     }
00368 
00369     string(char * str) :
00370         str_(NULL)
00371     {
00372         size_= ::strlen(str);
00373         str_ = new char[size_ + 1];
00374         if (str_ != NULL) {
00375             memcpy(str_, str, (size_ + 1) * sizeof(char));
00376         }
00377         else {
00378             size_ = 0;
00379         }
00380     }
00381 
00382     string& operator=(const string& rhs)
00383     {
00384         if (this == &rhs) {
00385             return *this;
00386         }
00387 
00388         if (rhs.size_ == 0 || rhs.str_ == NULL) {
00389             size_ = 0;
00390             str_  = NULL;
00391         } 
00392         else {
00393             size_ = rhs.size_;
00394             str_ = new char[size_ + 1];
00395             if (str_ != NULL) {
00396                 memcpy(str_, rhs.str_, (size_ + 1) * sizeof(char));
00397             }
00398             else {
00399                 size_ = 0;
00400             }
00401         }
00402 
00403         return *this;
00404     }
00405 
00406     string(const string& rhs)
00407     {
00408         *this = rhs;
00409     }
00410 
00411     ~string()
00412     {
00413         if (str_ != NULL) {
00414             delete[] str_;
00415         }
00416     }
00417 
00418     ::size_t size(void) const   { return size_; }
00419     ::size_t length(void) const { return size(); }
00420 
00421     const char * c_str(void) const { return (str_) ? str_ : "";}
00422 };
00423 
00424 #if !defined(__USE_DEV_STRING) && !defined(__NO_STD_STRING)
00425 #include <string>
00426 typedef std::string STRING_CLASS;
00427 #elif !defined(__USE_DEV_STRING) 
00428 typedef cl::string STRING_CLASS;
00429 #endif
00430 
00431 #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
00432 #include <vector>
00433 #define VECTOR_CLASS std::vector
00434 #elif !defined(__USE_DEV_VECTOR) 
00435 #define VECTOR_CLASS cl::vector 
00436 #endif
00437 
00438 #if !defined(__MAX_DEFAULT_VECTOR_SIZE)
00439 #define __MAX_DEFAULT_VECTOR_SIZE 10
00440 #endif
00441 
00446 template <typename T, unsigned int N = __MAX_DEFAULT_VECTOR_SIZE>
00447 class vector
00448 {
00449 private:
00450     T data_[N];
00451     unsigned int size_;
00452     bool empty_;
00453 public:
00454     vector() : 
00455         size_(static_cast<unsigned int>(-1)),
00456         empty_(true)
00457     {}
00458 
00459     ~vector() {}
00460 
00461     unsigned int size(void) const
00462     {
00463         return size_ + 1;
00464     }
00465 
00466     void clear()
00467     {
00468         size_ = -1;
00469         empty_ = true;
00470     }
00471 
00472     void push_back (const T& x)
00473     { 
00474         if (size() < N) {
00475             size_++;  
00476             data_[size_] = x;
00477             empty_ = false;
00478         }
00479     }
00480 
00481     void pop_back(void)
00482     {
00483         if (!empty_) {
00484             data_[size_].~T();
00485             size_--;
00486             if (size_ == -1) {
00487                 empty_ = true;
00488             }
00489         }
00490     }
00491   
00492     vector(const vector<T, N>& vec) : 
00493         size_(vec.size_),
00494         empty_(vec.empty_)
00495     {
00496         if (!empty_) {
00497             memcpy(&data_[0], &vec.data_[0], size() * sizeof(T));
00498         }
00499     } 
00500 
00501     vector(unsigned int size, const T& val = T()) :
00502         size_(-1),
00503         empty_(true)
00504     {
00505         for (unsigned int i = 0; i < size; i++) {
00506             push_back(val);
00507         }
00508     }
00509 
00510     vector<T, N>& operator=(const vector<T, N>& rhs)
00511     {
00512         if (this == &rhs) {
00513             return *this;
00514         }
00515 
00516         size_  = rhs.size_;
00517         empty_ = rhs.empty_;
00518 
00519         if (!empty_) {  
00520             memcpy(&data_[0], &rhs.data_[0], size() * sizeof(T));
00521         }
00522     
00523         return *this;
00524     }
00525 
00526     bool operator==(vector<T,N> &vec)
00527     {
00528         if (empty_ && vec.empty_) {
00529             return true;
00530         }
00531 
00532         if (size() != vec.size()) {
00533             return false;
00534         }
00535 
00536         return memcmp(&data_[0], &vec.data_[0], size() * sizeof(T)) == 0 ? true : false;
00537     }
00538   
00539     operator T* ()             { return data_; }
00540     operator const T* () const { return data_; }
00541    
00542     bool empty (void) const
00543     {
00544         return empty_;
00545     }
00546   
00547     unsigned int max_size (void) const
00548     {
00549         return N;
00550     }
00551 
00552     unsigned int capacity () const
00553    {
00554         return sizeof(T) * N;
00555     }
00556 
00557     T& operator[](int index)
00558     {
00559         return data_[index];
00560     }
00561   
00562     T operator[](int index) const
00563     {
00564         return data_[index];
00565     }
00566   
00567     template<class I>
00568     void assign(I start, I end)
00569     {
00570         clear();   
00571         while(start < end) {
00572             push_back(*start);
00573             start++;
00574         }
00575     }
00576 
00580     class iterator
00581     {
00582     private:
00583         vector<T,N> vec_;
00584         int index_;
00585         bool initialized_;
00586     public:
00587         iterator(void) : 
00588             index_(-1),
00589             initialized_(false)
00590         {
00591             index_ = -1;
00592             initialized_ = false;
00593         }
00594 
00595         ~iterator(void) {}
00596 
00597         static iterator begin(vector<T,N> &vec)
00598         {
00599             iterator i;
00600 
00601             if (!vec.empty()) {
00602                 i.index_ = 0;
00603             }
00604 
00605             i.vec_ = vec;
00606             i.initialized_ = true;
00607             return i;
00608         }
00609 
00610         static iterator end(vector<T,N> &vec)
00611         {
00612             iterator i;
00613 
00614             if (!vec.empty()) {
00615                 i.index_ = vec.size();
00616             }
00617             i.vec_ = vec;
00618             i.initialized_ = true;
00619             return i;
00620         }
00621     
00622         bool operator==(iterator i)
00623         {
00624             return ((vec_ == i.vec_) && 
00625                     (index_ == i.index_) && 
00626                     (initialized_ == i.initialized_));
00627         }
00628 
00629         bool operator!=(iterator i)
00630         {
00631             return (!(*this==i));
00632         }
00633 
00634         void operator++()
00635         {
00636             index_++;
00637         }
00638 
00639         void operator++(int x)
00640         {
00641             index_ += x;
00642         }
00643 
00644         void operator--()
00645         {
00646             index_--;
00647         }
00648 
00649         void operator--(int x)
00650         {
00651             index_ -= x;
00652         }
00653 
00654         T operator *()
00655         {
00656             return vec_[index_];
00657         }
00658     };
00659 
00660     iterator begin(void)
00661     {
00662         return iterator::begin(*this);
00663     }
00664 
00665     iterator end(void)
00666     {
00667         return iterator::end(*this);
00668     }
00669 
00670     T& front(void)
00671     {
00672         return data_[0];
00673     }
00674 
00675     T& back(void)
00676     {
00677         return data_[size_];
00678     }
00679 
00680     const T& front(void) const
00681     {
00682         return data_[0];
00683     }
00684 
00685     const T& back(void) const
00686     {
00687         return data_[size_];
00688     }
00689 };  
00690 
00691 namespace detail {
00692 #define __DEFAULT_NOT_INITIALIZED 1
00693 #define __DEFAULT_BEING_INITIALIZED 2
00694 #define __DEFAULT_INITIALIZED 4
00695 
00696     /*
00697      * Compare and exchange primitives are needed for handling of defaults
00698     */
00699     inline int compare_exchange(volatile int * dest, int exchange, int comparand)
00700     {
00701 #ifdef _WIN32
00702         return (int)(InterlockedCompareExchange(
00703            (volatile long*)dest, 
00704            (long)exchange, 
00705            (long)comparand));
00706 #elif defined(__APPLE__) || defined(__MACOSX)
00707         return OSAtomicOr32Orig((uint32_t)exchange, (volatile uint32_t*)dest);
00708 #else // !_WIN32 || defined(__APPLE__) || defined(__MACOSX)
00709         return (__sync_val_compare_and_swap(
00710             dest, 
00711             comparand, 
00712             exchange));
00713 #endif // !_WIN32
00714     }
00715 }; // namespace detail
00716 
00717     
00723 template <int N>
00724 struct size_t : public cl::vector< ::size_t, N> { };
00725 
00726 namespace detail {
00727 
00728 // GetInfo help struct
00729 template <typename Functor, typename T>
00730 struct GetInfoHelper
00731 {
00732     static cl_int
00733     get(Functor f, cl_uint name, T* param)
00734     {
00735         return f(name, sizeof(T), param, NULL);
00736     }
00737 };
00738 
00739 // Specialized GetInfoHelper for VECTOR_CLASS params
00740 template <typename Func, typename T>
00741 struct GetInfoHelper<Func, VECTOR_CLASS<T> >
00742 {
00743     static cl_int get(Func f, cl_uint name, VECTOR_CLASS<T>* param)
00744     {
00745         ::size_t required;
00746         cl_int err = f(name, 0, NULL, &required);
00747         if (err != CL_SUCCESS) {
00748             return err;
00749         }
00750 
00751         T* value = (T*) alloca(required);
00752         err = f(name, required, value, NULL);
00753         if (err != CL_SUCCESS) {
00754             return err;
00755         }
00756 
00757         param->assign(&value[0], &value[required/sizeof(T)]);
00758         return CL_SUCCESS;
00759     }
00760 };
00761 
00762 // Specialized for getInfo<CL_PROGRAM_BINARIES>
00763 template <typename Func>
00764 struct GetInfoHelper<Func, VECTOR_CLASS<char *> >
00765 {
00766     static cl_int
00767     get(Func f, cl_uint name, VECTOR_CLASS<char *>* param)
00768     {
00769       ::size_t nDevices;
00770       ::size_t * binary_sizes;
00771       char ** values;
00772 
00773       cl_int err = f(CL_PROGRAM_NUM_DEVICES, sizeof(nDevices), &nDevices, NULL);
00774       if (err != CL_SUCCESS) {
00775           return err;
00776       }
00777 
00778       binary_sizes = (::size_t*)alloca(sizeof(::size_t)*nDevices);
00779       err = f(CL_PROGRAM_BINARY_SIZES, sizeof(::size_t)*nDevices, binary_sizes, NULL);
00780       if (err != CL_SUCCESS) {
00781           return err;
00782       }
00783 
00784       values = (char **) alloca(sizeof(char*)*nDevices);
00785       for(cl_uint i = 0; i < nDevices; i++ )
00786       {
00787         if( binary_sizes[i] != 0 )
00788         {            
00789             values[i]= (char *)alloca( sizeof(char)*binary_sizes[i]);
00790         }
00791         else
00792         {
00793             values[i] = NULL;
00794         }
00795       }
00796       err = f(name, sizeof(char *)*nDevices, values, NULL);
00797       if (err != CL_SUCCESS) {
00798         return err;
00799       }
00800       
00801       param->assign(values,values+nDevices);
00802       return CL_SUCCESS;
00803     }
00804 };
00805 
00806 // Specialized GetInfoHelper for STRING_CLASS params
00807 template <typename Func>
00808 struct GetInfoHelper<Func, STRING_CLASS>
00809 {
00810     static cl_int get(Func f, cl_uint name, STRING_CLASS* param)
00811     {
00812         ::size_t required;
00813         cl_int err = f(name, 0, NULL, &required);
00814         if (err != CL_SUCCESS) {
00815             return err;
00816         }
00817 
00818         char* value = (char*) alloca(required);
00819         err = f(name, required, value, NULL);
00820         if (err != CL_SUCCESS) {
00821             return err;
00822         }
00823 
00824         *param = value;
00825         return CL_SUCCESS;
00826     }
00827 };
00828 
00829 // Specialized GetInfoHelper for cl::size_t params
00830 template <typename Func, ::size_t N>
00831 struct GetInfoHelper<Func, size_t<N> >
00832 {
00833     static cl_int get(Func f, cl_uint name, size_t<N>* param)
00834     {
00835         ::size_t required;
00836         cl_int err = f(name, 0, NULL, &required);
00837         if (err != CL_SUCCESS) {
00838             return err;
00839         }
00840 
00841         ::size_t* value = (::size_t*) alloca(required);
00842         err = f(name, required, value, NULL);
00843         if (err != CL_SUCCESS) {
00844             return err;
00845         }
00846 
00847         param->assign(&value[0], &value[required/sizeof(::size_t)]);
00848         return CL_SUCCESS;
00849     }
00850 };
00851 
00852 #define __GET_INFO_HELPER_WITH_RETAIN(CPP_TYPE) \
00853 namespace detail { \
00854 template <typename Func> \
00855 struct GetInfoHelper<Func, CPP_TYPE> \
00856 { \
00857     static cl_int get(Func f, cl_uint name, CPP_TYPE* param) \
00858     { \
00859       cl_uint err = f(name, sizeof(CPP_TYPE), param, NULL); \
00860       if (err != CL_SUCCESS) { \
00861         return err; \
00862       } \
00863       \
00864       return ReferenceHandler<CPP_TYPE::cl_type>::retain((*param)()); \
00865     } \
00866 }; \
00867 } 
00868 
00869 
00870 #define __PARAM_NAME_INFO_1_0(F) \
00871     F(cl_platform_info, CL_PLATFORM_PROFILE, STRING_CLASS) \
00872     F(cl_platform_info, CL_PLATFORM_VERSION, STRING_CLASS) \
00873     F(cl_platform_info, CL_PLATFORM_NAME, STRING_CLASS) \
00874     F(cl_platform_info, CL_PLATFORM_VENDOR, STRING_CLASS) \
00875     F(cl_platform_info, CL_PLATFORM_EXTENSIONS, STRING_CLASS) \
00876     \
00877     F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \
00878     F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \
00879     F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \
00880     F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \
00881     F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, ::size_t) \
00882     F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, VECTOR_CLASS< ::size_t>) \
00883     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \
00884     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \
00885     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \
00886     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \
00887     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \
00888     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \
00889     F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \
00890     F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \
00891     F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \
00892     F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \
00893     F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \
00894     F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, ::size_t) \
00895     F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, ::size_t) \
00896     F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, ::size_t) \
00897     F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, ::size_t) \
00898     F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, ::size_t) \
00899     F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \
00900     F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, ::size_t) \
00901     F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \
00902     F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
00903     F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
00904     F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
00905     F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
00906     F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
00907     F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
00908     F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \
00909     F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \
00910     F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \
00911     F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \
00912     F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \
00913     F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \
00914     F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, ::size_t) \
00915     F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \
00916     F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \
00917     F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \
00918     F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \
00919     F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) \
00920     F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \
00921     F(cl_device_info, CL_DEVICE_NAME, STRING_CLASS) \
00922     F(cl_device_info, CL_DEVICE_VENDOR, STRING_CLASS) \
00923     F(cl_device_info, CL_DRIVER_VERSION, STRING_CLASS) \
00924     F(cl_device_info, CL_DEVICE_PROFILE, STRING_CLASS) \
00925     F(cl_device_info, CL_DEVICE_VERSION, STRING_CLASS) \
00926     F(cl_device_info, CL_DEVICE_EXTENSIONS, STRING_CLASS) \
00927     \
00928     F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \
00929     F(cl_context_info, CL_CONTEXT_DEVICES, VECTOR_CLASS<Device>) \
00930     F(cl_context_info, CL_CONTEXT_PROPERTIES, VECTOR_CLASS<cl_context_properties>) \
00931     \
00932     F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
00933     F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
00934     F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
00935     F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_uint) \
00936     \
00937     F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
00938     F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
00939     F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \
00940     F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \
00941     \
00942     F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \
00943     F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \
00944     F(cl_mem_info, CL_MEM_SIZE, ::size_t) \
00945     F(cl_mem_info, CL_MEM_HOST_PTR, void*) \
00946     F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \
00947     F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \
00948     F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \
00949     \
00950     F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \
00951     F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, ::size_t) \
00952     F(cl_image_info, CL_IMAGE_ROW_PITCH, ::size_t) \
00953     F(cl_image_info, CL_IMAGE_SLICE_PITCH, ::size_t) \
00954     F(cl_image_info, CL_IMAGE_WIDTH, ::size_t) \
00955     F(cl_image_info, CL_IMAGE_HEIGHT, ::size_t) \
00956     F(cl_image_info, CL_IMAGE_DEPTH, ::size_t) \
00957     \
00958     F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
00959     F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
00960     F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_addressing_mode) \
00961     F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_filter_mode) \
00962     F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_bool) \
00963     \
00964     F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
00965     F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
00966     F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \
00967     F(cl_program_info, CL_PROGRAM_DEVICES, VECTOR_CLASS<cl_device_id>) \
00968     F(cl_program_info, CL_PROGRAM_SOURCE, STRING_CLASS) \
00969     F(cl_program_info, CL_PROGRAM_BINARY_SIZES, VECTOR_CLASS< ::size_t>) \
00970     F(cl_program_info, CL_PROGRAM_BINARIES, VECTOR_CLASS<char *>) \
00971     \
00972     F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \
00973     F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, STRING_CLASS) \
00974     F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, STRING_CLASS) \
00975     \
00976     F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, STRING_CLASS) \
00977     F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \
00978     F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \
00979     F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \
00980     F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \
00981     \
00982     F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, ::size_t) \
00983     F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::size_t<3>) \
00984     F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \
00985     \
00986     F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \
00987     F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \
00988     F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \
00989     F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties)
00990 
00991 #if defined(CL_VERSION_1_1)
00992 #define __PARAM_NAME_INFO_1_1(F) \
00993     F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\
00994     F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \
00995     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \
00996     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \
00997     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \
00998     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \
00999     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
01000     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
01001     F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
01002     F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
01003     F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
01004     F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
01005     F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
01006     \
01007     F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \
01008     F(cl_mem_info, CL_MEM_OFFSET, ::size_t) \
01009     \
01010     F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ::size_t) \
01011     F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \
01012     \
01013     F(cl_event_info, CL_EVENT_CONTEXT, cl::Context)
01014 #endif // CL_VERSION_1_1
01015 
01016 #if defined(USE_CL_DEVICE_FISSION)
01017 #define __PARAM_NAME_DEVICE_FISSION(F) \
01018     F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \
01019     F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
01020     F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
01021     F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \
01022     F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, VECTOR_CLASS<cl_device_partition_property_ext>)
01023 #endif // USE_CL_DEVICE_FISSION
01024 
01025 template <typename enum_type, cl_int Name>
01026 struct param_traits {};
01027 
01028 #define __CL_DECLARE_PARAM_TRAITS(token, param_name, T) \
01029 struct token;                                        \
01030 template<>                                           \
01031 struct param_traits<detail:: token,param_name>       \
01032 {                                                    \
01033     enum { value = param_name };                     \
01034     typedef T param_type;                            \
01035 };
01036 
01037 __PARAM_NAME_INFO_1_0(__CL_DECLARE_PARAM_TRAITS)
01038 #if defined(CL_VERSION_1_1)
01039 __PARAM_NAME_INFO_1_1(__CL_DECLARE_PARAM_TRAITS)
01040 #endif // CL_VERSION_1_1
01041 
01042 #if defined(USE_CL_DEVICE_FISSION)
01043 __PARAM_NAME_DEVICE_FISSION(__CL_DECLARE_PARAM_TRAITS);
01044 #endif // USE_CL_DEVICE_FISSION
01045 
01046 #ifdef CL_PLATFORM_ICD_SUFFIX_KHR
01047 __CL_DECLARE_PARAM_TRAITS(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, STRING_CLASS)
01048 #endif
01049 
01050 #ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
01051 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong)
01052 #endif
01053 
01054 #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
01055 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint)
01056 #endif
01057 #ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV
01058 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint)
01059 #endif
01060 #ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV
01061 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint)
01062 #endif
01063 #ifdef CL_DEVICE_WARP_SIZE_NV
01064 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint)
01065 #endif
01066 #ifdef CL_DEVICE_GPU_OVERLAP_NV
01067 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool)
01068 #endif
01069 #ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV
01070 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool)
01071 #endif
01072 #ifdef CL_DEVICE_INTEGRATED_MEMORY_NV
01073 __CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool)
01074 #endif
01075 
01076 // Convenience functions
01077 
01078 template <typename Func, typename T>
01079 inline cl_int
01080 getInfo(Func f, cl_uint name, T* param)
01081 {
01082     return GetInfoHelper<Func, T>::get(f, name, param);
01083 }
01084 
01085 template <typename Func, typename Arg0>
01086 struct GetInfoFunctor0
01087 {
01088     Func f_; const Arg0& arg0_;
01089     cl_int operator ()(
01090         cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
01091     { return f_(arg0_, param, size, value, size_ret); }
01092 };
01093 
01094 template <typename Func, typename Arg0, typename Arg1>
01095 struct GetInfoFunctor1
01096 {
01097     Func f_; const Arg0& arg0_; const Arg1& arg1_;
01098     cl_int operator ()(
01099         cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
01100     { return f_(arg0_, arg1_, param, size, value, size_ret); }
01101 };
01102 
01103 template <typename Func, typename Arg0, typename T>
01104 inline cl_int
01105 getInfo(Func f, const Arg0& arg0, cl_uint name, T* param)
01106 {
01107     GetInfoFunctor0<Func, Arg0> f0 = { f, arg0 };
01108     return GetInfoHelper<GetInfoFunctor0<Func, Arg0>, T>
01109         ::get(f0, name, param);
01110 }
01111 
01112 template <typename Func, typename Arg0, typename Arg1, typename T>
01113 inline cl_int
01114 getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param)
01115 {
01116     GetInfoFunctor1<Func, Arg0, Arg1> f0 = { f, arg0, arg1 };
01117     return GetInfoHelper<GetInfoFunctor1<Func, Arg0, Arg1>, T>
01118         ::get(f0, name, param);
01119 }
01120 
01121 template<typename T>
01122 struct ReferenceHandler
01123 { };
01124 
01125 template <>
01126 struct ReferenceHandler<cl_device_id>
01127 {
01128     // cl_device_id does not have retain().
01129     static cl_int retain(cl_device_id)
01130     { return CL_INVALID_DEVICE; }
01131     // cl_device_id does not have release().
01132     static cl_int release(cl_device_id)
01133     { return CL_INVALID_DEVICE; }
01134 };
01135 
01136 template <>
01137 struct ReferenceHandler<cl_platform_id>
01138 {
01139     // cl_platform_id does not have retain().
01140     static cl_int retain(cl_platform_id)
01141     { return CL_INVALID_PLATFORM; }
01142     // cl_platform_id does not have release().
01143     static cl_int release(cl_platform_id)
01144     { return CL_INVALID_PLATFORM; }
01145 };
01146 
01147 template <>
01148 struct ReferenceHandler<cl_context>
01149 {
01150     static cl_int retain(cl_context context)
01151     { return ::clRetainContext(context); }
01152     static cl_int release(cl_context context)
01153     { return ::clReleaseContext(context); }
01154 };
01155 
01156 template <>
01157 struct ReferenceHandler<cl_command_queue>
01158 {
01159     static cl_int retain(cl_command_queue queue)
01160     { return ::clRetainCommandQueue(queue); }
01161     static cl_int release(cl_command_queue queue)
01162     { return ::clReleaseCommandQueue(queue); }
01163 };
01164 
01165 template <>
01166 struct ReferenceHandler<cl_mem>
01167 {
01168     static cl_int retain(cl_mem memory)
01169     { return ::clRetainMemObject(memory); }
01170     static cl_int release(cl_mem memory)
01171     { return ::clReleaseMemObject(memory); }
01172 };
01173 
01174 template <>
01175 struct ReferenceHandler<cl_sampler>
01176 {
01177     static cl_int retain(cl_sampler sampler)
01178     { return ::clRetainSampler(sampler); }
01179     static cl_int release(cl_sampler sampler)
01180     { return ::clReleaseSampler(sampler); }
01181 };
01182 
01183 template <>
01184 struct ReferenceHandler<cl_program>
01185 {
01186     static cl_int retain(cl_program program)
01187     { return ::clRetainProgram(program); }
01188     static cl_int release(cl_program program)
01189     { return ::clReleaseProgram(program); }
01190 };
01191 
01192 template <>
01193 struct ReferenceHandler<cl_kernel>
01194 {
01195     static cl_int retain(cl_kernel kernel)
01196     { return ::clRetainKernel(kernel); }
01197     static cl_int release(cl_kernel kernel)
01198     { return ::clReleaseKernel(kernel); }
01199 };
01200 
01201 template <>
01202 struct ReferenceHandler<cl_event>
01203 {
01204     static cl_int retain(cl_event event)
01205     { return ::clRetainEvent(event); }
01206     static cl_int release(cl_event event)
01207     { return ::clReleaseEvent(event); }
01208 };
01209 
01210 template <typename T>
01211 class Wrapper
01212 {
01213 public:
01214     typedef T cl_type;
01215 
01216 protected:
01217     cl_type object_;
01218 
01219 public:
01220     Wrapper() : object_(NULL) { }
01221 
01222     Wrapper(const cl_type &obj) : object_(obj) { }
01223 
01224     ~Wrapper()
01225     {
01226         if (object_ != NULL) { release(); }
01227     }
01228 
01229     Wrapper(const Wrapper<cl_type>& rhs)
01230     {
01231         object_ = rhs.object_;
01232         if (object_ != NULL) { retain(); }
01233     }
01234 
01235     Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
01236     {
01237         if (object_ != NULL) { release(); }
01238         object_ = rhs.object_;
01239         if (object_ != NULL) { retain(); }
01240         return *this;
01241     }
01242 
01243     Wrapper<cl_type>& operator = (const cl_type &rhs)
01244     {
01245         if (object_ != NULL) { release(); }
01246         object_ = rhs;
01247         return *this;
01248     }
01249 
01250     cl_type operator ()() const { return object_; }
01251 
01252     cl_type& operator ()() { return object_; }
01253 
01254 protected:
01255 
01256     cl_int retain() const
01257     {
01258         return ReferenceHandler<cl_type>::retain(object_);
01259     }
01260 
01261     cl_int release() const
01262     {
01263         return ReferenceHandler<cl_type>::release(object_);
01264     }
01265 };
01266 
01267 #if defined(__CL_ENABLE_EXCEPTIONS)
01268 static inline cl_int errHandler (
01269     cl_int err,
01270     const char * errStr = NULL) throw(Error)
01271 {
01272     if (err != CL_SUCCESS) {
01273         throw Error(err, errStr);
01274     }
01275     return err;
01276 }
01277 #else
01278 static inline cl_int errHandler (cl_int err, const char * errStr = NULL)
01279 {
01280     return err;
01281 }
01282 #endif // __CL_ENABLE_EXCEPTIONS
01283 
01284 } // namespace detail
01286 
01290 struct ImageFormat : public cl_image_format
01291 {
01292     ImageFormat(){}
01293 
01294     ImageFormat(cl_channel_order order, cl_channel_type type)
01295     {
01296         image_channel_order = order;
01297         image_channel_data_type = type;
01298     }
01299 
01300     ImageFormat& operator = (const ImageFormat& rhs)
01301     {
01302         if (this != &rhs) {
01303             this->image_channel_data_type = rhs.image_channel_data_type;
01304             this->image_channel_order     = rhs.image_channel_order;
01305         }
01306         return *this;
01307     }
01308 };
01309 
01313 class Device : public detail::Wrapper<cl_device_id>
01314 {
01315 public:
01316     Device() : detail::Wrapper<cl_type>() { }
01317 
01318     Device(const Device& device) : detail::Wrapper<cl_type>(device) { }
01319 
01320     Device(const cl_device_id &device) : detail::Wrapper<cl_type>(device) { }
01321 
01322     static Device getDefault(cl_int * err = NULL);
01323 
01324     Device& operator = (const Device& rhs)
01325     {
01326         if (this != &rhs) {
01327             detail::Wrapper<cl_type>::operator=(rhs);
01328         }
01329         return *this;
01330     }
01331 
01332     Device& operator = (const cl_device_id& rhs)
01333     {
01334         detail::Wrapper<cl_type>::operator=(rhs);
01335         return *this;
01336     }
01337 
01338     template <typename T>
01339     cl_int getInfo(cl_device_info name, T* param) const
01340     {
01341         return detail::errHandler(
01342             detail::getInfo(&::clGetDeviceInfo, object_, name, param),
01343             __GET_DEVICE_INFO_ERR);
01344     }
01345 
01346     template <cl_int name> typename
01347     detail::param_traits<detail::cl_device_info, name>::param_type
01348     getInfo(cl_int* err = NULL) const
01349     {
01350         typename detail::param_traits<
01351             detail::cl_device_info, name>::param_type param;
01352         cl_int result = getInfo(name, &param);
01353         if (err != NULL) {
01354             *err = result;
01355         }
01356         return param;
01357     }
01358 
01359 #if defined(USE_CL_DEVICE_FISSION)
01360     cl_int createSubDevices(
01361         const cl_device_partition_property_ext * properties,
01362         VECTOR_CLASS<Device>* devices)
01363     {
01364         typedef CL_API_ENTRY cl_int 
01365             ( CL_API_CALL * PFN_clCreateSubDevicesEXT)(
01366                 cl_device_id /*in_device*/,
01367                 const cl_device_partition_property_ext * /* properties */,
01368                 cl_uint /*num_entries*/,
01369                 cl_device_id * /*out_devices*/,
01370                 cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
01371 
01372         static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL;
01373         __INIT_CL_EXT_FCN_PTR(clCreateSubDevicesEXT);
01374 
01375         cl_uint n = 0;
01376         cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n);
01377         if (err != CL_SUCCESS) {
01378             return detail::errHandler(err, __CREATE_SUB_DEVICES);
01379         }
01380 
01381         cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
01382         err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids, NULL);
01383         if (err != CL_SUCCESS) {
01384             return detail::errHandler(err, __CREATE_SUB_DEVICES);
01385         }
01386 
01387         devices->assign(&ids[0], &ids[n]);
01388         return CL_SUCCESS;
01389     }
01390 #endif
01391 };
01392 
01396 class Platform : public detail::Wrapper<cl_platform_id>
01397 {
01398 public:
01399     static const Platform null();
01400 
01401     Platform() : detail::Wrapper<cl_type>()  { }
01402 
01403     Platform(const Platform& platform) : detail::Wrapper<cl_type>(platform) { }
01404 
01405     Platform(const cl_platform_id &platform) : detail::Wrapper<cl_type>(platform) { }
01406 
01407     Platform& operator = (const Platform& rhs)
01408     {
01409         if (this != &rhs) {
01410             detail::Wrapper<cl_type>::operator=(rhs);
01411         }
01412         return *this;
01413     }
01414 
01415     Platform& operator = (const cl_platform_id& rhs)
01416     {
01417         detail::Wrapper<cl_type>::operator=(rhs);
01418         return *this;
01419     }
01420 
01421     cl_int getInfo(cl_platform_info name, STRING_CLASS* param) const
01422     {
01423         return detail::errHandler(
01424             detail::getInfo(&::clGetPlatformInfo, object_, name, param),
01425             __GET_PLATFORM_INFO_ERR);
01426     }
01427 
01428     template <cl_int name> typename
01429     detail::param_traits<detail::cl_platform_info, name>::param_type
01430     getInfo(cl_int* err = NULL) const
01431     {
01432         typename detail::param_traits<
01433             detail::cl_platform_info, name>::param_type param;
01434         cl_int result = getInfo(name, &param);
01435         if (err != NULL) {
01436             *err = result;
01437         }
01438         return param;
01439     }
01440 
01441     cl_int getDevices(
01442         cl_device_type type,
01443         VECTOR_CLASS<Device>* devices) const
01444     {
01445         cl_uint n = 0;
01446         cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n);
01447         if (err != CL_SUCCESS) {
01448             return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
01449         }
01450 
01451         cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
01452         err = ::clGetDeviceIDs(object_, type, n, ids, NULL);
01453         if (err != CL_SUCCESS) {
01454             return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
01455         }
01456 
01457         devices->assign(&ids[0], &ids[n]);
01458         return CL_SUCCESS;
01459     }
01460 
01461 #if defined(USE_DX_INTEROP)
01462 
01485     cl_int getDevices(
01486         cl_d3d10_device_source_khr d3d_device_source,
01487         void *                     d3d_object,
01488         cl_d3d10_device_set_khr    d3d_device_set,
01489         VECTOR_CLASS<Device>* devices) const
01490     {
01491         typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)(
01492             cl_platform_id platform, 
01493             cl_d3d10_device_source_khr d3d_device_source, 
01494             void * d3d_object,
01495             cl_d3d10_device_set_khr d3d_device_set,
01496             cl_uint num_entries,
01497             cl_device_id * devices,
01498             cl_uint* num_devices);
01499 
01500         static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL;
01501         __INIT_CL_EXT_FCN_PTR(clGetDeviceIDsFromD3D10KHR);
01502 
01503         cl_uint n = 0;
01504         cl_int err = pfn_clGetDeviceIDsFromD3D10KHR(
01505             object_, 
01506             d3d_device_source, 
01507             d3d_object,
01508             d3d_device_set, 
01509             0, 
01510             NULL, 
01511             &n);
01512         if (err != CL_SUCCESS) {
01513             return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
01514         }
01515 
01516         cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
01517         err = pfn_clGetDeviceIDsFromD3D10KHR(
01518             object_, 
01519             d3d_device_source, 
01520             d3d_object,
01521             d3d_device_set,
01522             n, 
01523             ids, 
01524             NULL);
01525         if (err != CL_SUCCESS) {
01526             return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
01527         }
01528 
01529         devices->assign(&ids[0], &ids[n]);
01530         return CL_SUCCESS;
01531     }
01532 #endif
01533 
01534     static cl_int get(
01535         VECTOR_CLASS<Platform>* platforms)
01536     {
01537         cl_uint n = 0;
01538         cl_int err = ::clGetPlatformIDs(0, NULL, &n);
01539         if (err != CL_SUCCESS) {
01540             return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01541         }
01542 
01543         cl_platform_id* ids = (cl_platform_id*) alloca(
01544             n * sizeof(cl_platform_id));
01545         err = ::clGetPlatformIDs(n, ids, NULL);
01546         if (err != CL_SUCCESS) {
01547             return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01548         }
01549 
01550         platforms->assign(&ids[0], &ids[n]);
01551         return CL_SUCCESS;
01552     }
01553 
01554     static cl_int get(
01555         Platform * platform)
01556     {
01557         cl_uint n = 0;
01558         cl_int err = ::clGetPlatformIDs(0, NULL, &n);
01559         if (err != CL_SUCCESS) {
01560             return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01561         }
01562 
01563         cl_platform_id* ids = (cl_platform_id*) alloca(
01564             n * sizeof(cl_platform_id));
01565         err = ::clGetPlatformIDs(n, ids, NULL);
01566         if (err != CL_SUCCESS) {
01567             return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01568         }
01569 
01570         *platform = ids[0];
01571         return CL_SUCCESS;
01572     }
01573 
01574     static Platform get(
01575         cl_int * errResult = NULL)
01576     {
01577         Platform platform;
01578         cl_uint n = 0;
01579         cl_int err = ::clGetPlatformIDs(0, NULL, &n);
01580         if (err != CL_SUCCESS) {
01581             detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01582             if (errResult != NULL) {
01583                 *errResult = err;
01584             }
01585         }
01586 
01587         cl_platform_id* ids = (cl_platform_id*) alloca(
01588             n * sizeof(cl_platform_id));
01589         err = ::clGetPlatformIDs(n, ids, NULL);
01590 
01591         if (err != CL_SUCCESS) {
01592             detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
01593         }
01594 
01595         if (errResult != NULL) {
01596             *errResult = err;
01597         }
01598         
01599         return ids[0];
01600     }
01601 };
01602 
01603 static inline cl_int
01604 UnloadCompiler()
01605 {
01606     return ::clUnloadCompiler();
01607 }
01608 
01609 class Context : public detail::Wrapper<cl_context>
01610 {
01611 private:
01612     static volatile int default_initialized_;
01613     static Context default_;
01614     static volatile cl_int default_error_;
01615 public:
01616     Context(
01617         const VECTOR_CLASS<Device>& devices,
01618         cl_context_properties* properties = NULL,
01619         void (CL_CALLBACK * notifyFptr)(
01620             const char *,
01621             const void *,
01622             ::size_t,
01623             void *) = NULL,
01624         void* data = NULL,
01625         cl_int* err = NULL)
01626     {
01627         cl_int error;
01628         object_ = ::clCreateContext(
01629             properties, (cl_uint) devices.size(),
01630             (cl_device_id*) &devices.front(),
01631             notifyFptr, data, &error);
01632 
01633         detail::errHandler(error, __CREATE_CONTEXT_ERR);
01634         if (err != NULL) {
01635             *err = error;
01636         }
01637     }
01638 
01639     Context(
01640         cl_device_type type,
01641         cl_context_properties* properties = NULL,
01642         void (CL_CALLBACK * notifyFptr)(
01643             const char *,
01644             const void *,
01645             ::size_t,
01646             void *) = NULL,
01647         void* data = NULL,
01648         cl_int* err = NULL)
01649     {
01650         cl_int error;
01651 
01652 #if !defined(__APPLE__) || !defined(__MACOS)
01653         cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 };    
01654         if (properties == NULL) {
01655             prop[1] = (cl_context_properties)Platform::get(&error)();
01656             if (error != CL_SUCCESS) {
01657                 detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
01658                 if (err != NULL) {
01659                     *err = error;
01660                     return;
01661                 }
01662             }
01663 
01664             properties = &prop[0];
01665         }
01666 #endif
01667         object_ = ::clCreateContextFromType(
01668             properties, type, notifyFptr, data, &error);
01669 
01670         detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
01671         if (err != NULL) {
01672             *err = error;
01673         }
01674     }
01675 
01676     static Context getDefault(cl_int * err = NULL) 
01677     {
01678         int state = detail::compare_exchange(
01679             &default_initialized_, 
01680             __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
01681         
01682         if (state & __DEFAULT_INITIALIZED) {
01683             if (err != NULL) {
01684                 *err = default_error_;
01685             }
01686             return default_;
01687         }
01688 
01689         if (state & __DEFAULT_BEING_INITIALIZED) {
01690               // Assume writes will propagate eventually...
01691               while(default_initialized_ != __DEFAULT_INITIALIZED) {
01692                                 ;
01693               }
01694 
01695             if (err != NULL) {
01696                 *err = default_error_;
01697             }
01698             return default_;
01699         }
01700 
01701         cl_int error;
01702         default_ = Context(
01703             CL_DEVICE_TYPE_DEFAULT,
01704             NULL,
01705             NULL,
01706             NULL,
01707             &error);
01708 
01709         default_error_ = error;
01710         // Assume writes will propagate eventually...
01711         default_initialized_ = __DEFAULT_INITIALIZED;
01712         if (err != NULL) {
01713             *err = default_error_;
01714         }
01715         return default_;
01716 
01717     }
01718 
01719     Context() : detail::Wrapper<cl_type>() { }
01720 
01721     Context(const Context& context) : detail::Wrapper<cl_type>(context) { }
01722 
01723     Context(const cl_context& context) : detail::Wrapper<cl_type>(context) { }
01724 
01725     Context& operator = (const Context& rhs)
01726     {
01727         if (this != &rhs) {
01728             detail::Wrapper<cl_type>::operator=(rhs);
01729         }
01730         return *this;
01731     }
01732 
01733     Context& operator = (const cl_context& rhs)
01734     {
01735         detail::Wrapper<cl_type>::operator=(rhs);
01736         return *this;
01737     }
01738 
01739     template <typename T>
01740     cl_int getInfo(cl_context_info name, T* param) const
01741     {
01742         return detail::errHandler(
01743             detail::getInfo(&::clGetContextInfo, object_, name, param),
01744             __GET_CONTEXT_INFO_ERR);
01745     }
01746 
01747     template <cl_int name> typename
01748     detail::param_traits<detail::cl_context_info, name>::param_type
01749     getInfo(cl_int* err = NULL) const
01750     {
01751         typename detail::param_traits<
01752             detail::cl_context_info, name>::param_type param;
01753         cl_int result = getInfo(name, &param);
01754         if (err != NULL) {
01755             *err = result;
01756         }
01757         return param;
01758     }
01759 
01760     cl_int getSupportedImageFormats(
01761         cl_mem_flags flags,
01762         cl_mem_object_type type,
01763         VECTOR_CLASS<ImageFormat>* formats) const
01764     {
01765         cl_uint numEntries;
01766         cl_int err = ::clGetSupportedImageFormats(
01767            object_, 
01768            flags,
01769            type, 
01770            0, 
01771            NULL, 
01772            &numEntries);
01773         if (err != CL_SUCCESS) {
01774             return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
01775         }
01776 
01777         ImageFormat* value = (ImageFormat*)
01778             alloca(numEntries * sizeof(ImageFormat));
01779         err = ::clGetSupportedImageFormats(
01780             object_, 
01781             flags, 
01782             type, 
01783             numEntries,
01784             (cl_image_format*) value, 
01785             NULL);
01786         if (err != CL_SUCCESS) {
01787             return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
01788         }
01789 
01790         formats->assign(&value[0], &value[numEntries]);
01791         return CL_SUCCESS;
01792     }
01793 };
01794 
01795 inline Device Device::getDefault(cl_int * err)
01796 {
01797     cl_int error;
01798     Device device;
01799 
01800     Context context = Context::getDefault(&error);
01801     detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
01802 
01803     if (error != CL_SUCCESS) {
01804         if (err != NULL) {
01805             *err = error;
01806         }
01807     }
01808     else {
01809         device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
01810         if (err != NULL) {
01811             *err = CL_SUCCESS;
01812         }
01813     }
01814 
01815     return device;
01816 }
01817 
01818 #ifdef _WIN32
01819 __declspec(selectany) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
01820 __declspec(selectany) Context Context::default_;
01821 __declspec(selectany) volatile cl_int Context::default_error_ = CL_SUCCESS;
01822 #else
01823 __attribute__((weak)) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
01824 __attribute__((weak)) Context Context::default_;
01825 __attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS;
01826 #endif
01827 
01828 __GET_INFO_HELPER_WITH_RETAIN(cl::Context)
01829 
01830 
01833 class Event : public detail::Wrapper<cl_event>
01834 {
01835 public:
01836     Event() : detail::Wrapper<cl_type>() { }
01837 
01838     Event(const Event& event) : detail::Wrapper<cl_type>(event) { }
01839 
01840     Event(const cl_event& event) : detail::Wrapper<cl_type>(event) { }
01841 
01842     Event& operator = (const Event& rhs)
01843     {
01844         if (this != &rhs) {
01845             detail::Wrapper<cl_type>::operator=(rhs);
01846         }
01847         return *this;
01848     }
01849 
01850     Event& operator = (const cl_event& rhs)
01851     {
01852         detail::Wrapper<cl_type>::operator=(rhs);
01853         return *this;
01854     }
01855 
01856     template <typename T>
01857     cl_int getInfo(cl_event_info name, T* param) const
01858     {
01859         return detail::errHandler(
01860             detail::getInfo(&::clGetEventInfo, object_, name, param),
01861             __GET_EVENT_INFO_ERR);
01862     }
01863 
01864     template <cl_int name> typename
01865     detail::param_traits<detail::cl_event_info, name>::param_type
01866     getInfo(cl_int* err = NULL) const
01867     {
01868         typename detail::param_traits<
01869             detail::cl_event_info, name>::param_type param;
01870         cl_int result = getInfo(name, &param);
01871         if (err != NULL) {
01872             *err = result;
01873         }
01874         return param;
01875     }
01876 
01877     template <typename T>
01878     cl_int getProfilingInfo(cl_profiling_info name, T* param) const
01879     {
01880         return detail::errHandler(detail::getInfo(
01881             &::clGetEventProfilingInfo, object_, name, param),
01882             __GET_EVENT_PROFILE_INFO_ERR);
01883     }
01884 
01885     template <cl_int name> typename
01886     detail::param_traits<detail::cl_profiling_info, name>::param_type
01887     getProfilingInfo(cl_int* err = NULL) const
01888     {
01889         typename detail::param_traits<
01890             detail::cl_profiling_info, name>::param_type param;
01891         cl_int result = getProfilingInfo(name, &param);
01892         if (err != NULL) {
01893             *err = result;
01894         }
01895         return param;
01896     }
01897 
01898     cl_int wait() const
01899     {
01900         return detail::errHandler(
01901             ::clWaitForEvents(1, &object_),
01902             __WAIT_FOR_EVENTS_ERR);
01903     }
01904 
01905 #if defined(CL_VERSION_1_1)
01906     cl_int setCallback(
01907         cl_int type,
01908         void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *),      
01909         void * user_data = NULL)
01910     {
01911         return detail::errHandler(
01912             ::clSetEventCallback(
01913                 object_,
01914                 type,
01915                 pfn_notify,
01916                 user_data), 
01917             __SET_EVENT_CALLBACK_ERR);
01918     }
01919 #endif
01920 
01921     static cl_int
01922     waitForEvents(const VECTOR_CLASS<Event>& events)
01923     {
01924         return detail::errHandler(
01925             ::clWaitForEvents(
01926                 (cl_uint) events.size(), (cl_event*)&events.front()),
01927             __WAIT_FOR_EVENTS_ERR);
01928     }
01929 };
01930 
01931 __GET_INFO_HELPER_WITH_RETAIN(cl::Event)
01932 
01933 #if defined(CL_VERSION_1_1)
01934 
01937 class UserEvent : public Event
01938 {
01939 public:
01940     UserEvent(
01941         const Context& context,
01942         cl_int * err = NULL)
01943     {
01944         cl_int error;
01945         object_ = ::clCreateUserEvent(
01946             context(),
01947             &error);
01948 
01949         detail::errHandler(error, __CREATE_USER_EVENT_ERR);
01950         if (err != NULL) {
01951             *err = error;
01952         }
01953     }
01954 
01955     UserEvent() : Event() { }
01956 
01957     UserEvent(const UserEvent& event) : Event(event) { }
01958 
01959     UserEvent& operator = (const UserEvent& rhs)
01960     {
01961         if (this != &rhs) {
01962             Event::operator=(rhs);
01963         }
01964         return *this;
01965     }
01966 
01967     cl_int setStatus(cl_int status)
01968     {
01969         return detail::errHandler(
01970             ::clSetUserEventStatus(object_,status), 
01971             __SET_USER_EVENT_STATUS_ERR);
01972     }
01973 };
01974 #endif
01975 
01976 inline static cl_int
01977 WaitForEvents(const VECTOR_CLASS<Event>& events)
01978 {
01979     return detail::errHandler(
01980         ::clWaitForEvents(
01981             (cl_uint) events.size(), (cl_event*)&events.front()),
01982         __WAIT_FOR_EVENTS_ERR);
01983 }
01984 
01988 class Memory : public detail::Wrapper<cl_mem>
01989 {
01990 public:
01991     Memory() : detail::Wrapper<cl_type>() { }
01992 
01993     Memory(const Memory& memory) : detail::Wrapper<cl_type>(memory) { }
01994 
01995     Memory(const cl_mem& memory) : detail::Wrapper<cl_type>(memory) { }
01996 
01997     Memory& operator = (const Memory& rhs)
01998     {
01999         if (this != &rhs) {
02000             detail::Wrapper<cl_type>::operator=(rhs);
02001         }
02002         return *this;
02003     }
02004 
02005     Memory& operator = (const cl_mem& rhs)
02006     {
02007         detail::Wrapper<cl_type>::operator=(rhs);
02008         return *this;
02009     }
02010 
02011     template <typename T>
02012     cl_int getInfo(cl_mem_info name, T* param) const
02013     {
02014         return detail::errHandler(
02015             detail::getInfo(&::clGetMemObjectInfo, object_, name, param),
02016             __GET_MEM_OBJECT_INFO_ERR);
02017     }
02018 
02019     template <cl_int name> typename
02020     detail::param_traits<detail::cl_mem_info, name>::param_type
02021     getInfo(cl_int* err = NULL) const
02022     {
02023         typename detail::param_traits<
02024             detail::cl_mem_info, name>::param_type param;
02025         cl_int result = getInfo(name, &param);
02026         if (err != NULL) {
02027             *err = result;
02028         }
02029         return param;
02030     }
02031 
02032 #if defined(CL_VERSION_1_1)
02033     cl_int setDestructorCallback(
02034         void (CL_CALLBACK * pfn_notify)(cl_mem, void *),        
02035         void * user_data = NULL)
02036     {
02037         return detail::errHandler(
02038             ::clSetMemObjectDestructorCallback(
02039                 object_,
02040                 pfn_notify,
02041                 user_data), 
02042             __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR);
02043     }
02044 #endif
02045 
02046 };
02047 
02048 __GET_INFO_HELPER_WITH_RETAIN(cl::Memory)
02049 
02050 
02053 class Buffer : public Memory
02054 {
02055 public:
02056     Buffer(
02057         const Context& context,
02058         cl_mem_flags flags,
02059         ::size_t size,
02060         void* host_ptr = NULL,
02061         cl_int* err = NULL)
02062     {
02063         cl_int error;
02064         object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
02065 
02066         detail::errHandler(error, __CREATE_BUFFER_ERR);
02067         if (err != NULL) {
02068             *err = error;
02069         }
02070     }
02071 
02072     Buffer(
02073          cl_mem_flags flags,
02074         ::size_t size,
02075         void* host_ptr = NULL,
02076         cl_int* err = NULL)
02077     {
02078         cl_int error;
02079 
02080         Context context = Context::getDefault(err);
02081 
02082         object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
02083 
02084         detail::errHandler(error, __CREATE_BUFFER_ERR);
02085         if (err != NULL) {
02086             *err = error;
02087         }
02088     }
02089 
02090 
02091     Buffer() : Memory() { }
02092 
02093     Buffer(const Buffer& buffer) : Memory(buffer) { }
02094 
02095     Buffer(const cl_mem& buffer) : Memory(buffer) { }
02096 
02097     Buffer& operator = (const Buffer& rhs)
02098     {
02099         if (this != &rhs) {
02100             Memory::operator=(rhs);
02101         }
02102         return *this;
02103     }
02104 
02105     Buffer& operator = (const cl_mem& rhs)
02106     {
02107         Memory::operator=(rhs);
02108         return *this;
02109     }
02110 
02111 #if defined(CL_VERSION_1_1)
02112     Buffer createSubBuffer(
02113         cl_mem_flags flags,
02114         cl_buffer_create_type buffer_create_type,
02115         const void * buffer_create_info,
02116         cl_int * err = NULL)
02117     {
02118         Buffer result;
02119         cl_int error;
02120         result.object_ = ::clCreateSubBuffer(
02121             object_, 
02122             flags, 
02123             buffer_create_type, 
02124             buffer_create_info, 
02125             &error);
02126 
02127         detail::errHandler(error, __CREATE_SUBBUFFER_ERR);
02128         if (err != NULL) {
02129             *err = error;
02130         }
02131 
02132         return result;
02133     }       
02134 #endif
02135 };
02136 
02137 #if defined (USE_DX_INTEROP)
02138 class BufferD3D10 : public Buffer
02139 {
02140 public:
02141     typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)(
02142     cl_context context, cl_mem_flags flags, ID3D10Buffer*  buffer,
02143     cl_int* errcode_ret);
02144 
02145     BufferD3D10(
02146         const Context& context,
02147         cl_mem_flags flags,
02148         ID3D10Buffer* bufobj,
02149         cl_int * err = NULL)
02150     {
02151         static PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR = NULL;
02152         __INIT_CL_EXT_FCN_PTR(clCreateFromD3D10BufferKHR);
02153 
02154         cl_int error;
02155         object_ = pfn_clCreateFromD3D10BufferKHR(
02156             context(),
02157             flags,
02158             bufobj,
02159             &error);
02160 
02161         detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
02162         if (err != NULL) {
02163             *err = error;
02164         }
02165     }
02166 
02167     BufferD3D10() : Buffer() { }
02168 
02169     BufferD3D10(const BufferD3D10& buffer) : Buffer(buffer) { }
02170 
02171     BufferD3D10(const cl_mem& buffer) : Buffer(buffer) { }
02172 
02173     BufferD3D10& operator = (const BufferD3D10& rhs)
02174     {
02175         if (this != &rhs) {
02176             Buffer::operator=(rhs);
02177         }
02178         return *this;
02179     }
02180 
02181     BufferD3D10& operator = (const cl_mem& rhs)
02182     {
02183         Buffer::operator=(rhs);
02184         return *this;
02185     }
02186 };
02187 #endif
02188 
02192 class BufferGL : public Buffer
02193 {
02194 public:
02195     BufferGL(
02196         const Context& context,
02197         cl_mem_flags flags,
02198         GLuint bufobj,
02199         cl_int * err = NULL)
02200     {
02201         cl_int error;
02202         object_ = ::clCreateFromGLBuffer(
02203             context(),
02204             flags,
02205             bufobj,
02206             &error);
02207 
02208         detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
02209         if (err != NULL) {
02210             *err = error;
02211         }
02212     }
02213 
02214     BufferGL() : Buffer() { }
02215 
02216     BufferGL(const BufferGL& buffer) : Buffer(buffer) { }
02217 
02218     BufferGL(const cl_mem& buffer) : Buffer(buffer) { }
02219 
02220     BufferGL& operator = (const BufferGL& rhs)
02221     {
02222         if (this != &rhs) {
02223             Buffer::operator=(rhs);
02224         }
02225         return *this;
02226     }
02227 
02228     BufferGL& operator = (const cl_mem& rhs)
02229     {
02230         Buffer::operator=(rhs);
02231         return *this;
02232     }
02233 
02234     cl_int getObjectInfo(
02235         cl_gl_object_type *type,
02236         GLuint * gl_object_name)
02237     {
02238         return detail::errHandler(
02239             ::clGetGLObjectInfo(object_,type,gl_object_name),
02240             __GET_GL_OBJECT_INFO_ERR);
02241     }
02242 };
02243 
02247 class BufferRenderGL : public Buffer
02248 {
02249 public:
02250     BufferRenderGL(
02251         const Context& context,
02252         cl_mem_flags flags,
02253         GLuint bufobj,
02254         cl_int * err = NULL)
02255     {
02256         cl_int error;
02257         object_ = ::clCreateFromGLRenderbuffer(
02258             context(),
02259             flags,
02260             bufobj,
02261             &error);
02262 
02263         detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR);
02264         if (err != NULL) {
02265             *err = error;
02266         }
02267     }
02268 
02269     BufferRenderGL() : Buffer() { }
02270 
02271     BufferRenderGL(const BufferGL& buffer) : Buffer(buffer) { }
02272 
02273     BufferRenderGL(const cl_mem& buffer) : Buffer(buffer) { }
02274 
02275     BufferRenderGL& operator = (const BufferRenderGL& rhs)
02276     {
02277         if (this != &rhs) {
02278             Buffer::operator=(rhs);
02279         }
02280         return *this;
02281     }
02282 
02283     BufferRenderGL& operator = (const cl_mem& rhs)
02284     {
02285         Buffer::operator=(rhs);
02286         return *this;
02287     }
02288 
02289     cl_int getObjectInfo(
02290         cl_gl_object_type *type,
02291         GLuint * gl_object_name)
02292     {
02293         return detail::errHandler(
02294             ::clGetGLObjectInfo(object_,type,gl_object_name),
02295             __GET_GL_OBJECT_INFO_ERR);
02296     }
02297 };
02298 
02302 class Image : public Memory
02303 {
02304 protected:
02305     Image() : Memory() { }
02306 
02307     Image(const Image& image) : Memory(image) { }
02308 
02309     Image(const cl_mem& image) : Memory(image) { }
02310 
02311     Image& operator = (const Image& rhs)
02312     {
02313         if (this != &rhs) {
02314             Memory::operator=(rhs);
02315         }
02316         return *this;
02317     }
02318 
02319     Image& operator = (const cl_mem& rhs)
02320     {
02321         Memory::operator=(rhs);
02322         return *this;
02323     }
02324 
02325 public:
02326     template <typename T>
02327     cl_int getImageInfo(cl_image_info name, T* param) const
02328     {
02329         return detail::errHandler(
02330             detail::getInfo(&::clGetImageInfo, object_, name, param),
02331             __GET_IMAGE_INFO_ERR);
02332     }
02333 
02334     template <cl_int name> typename
02335     detail::param_traits<detail::cl_image_info, name>::param_type
02336     getImageInfo(cl_int* err = NULL) const
02337     {
02338         typename detail::param_traits<
02339             detail::cl_image_info, name>::param_type param;
02340         cl_int result = getImageInfo(name, &param);
02341         if (err != NULL) {
02342             *err = result;
02343         }
02344         return param;
02345     }
02346 };
02347 
02351 class Image2D : public Image
02352 {
02353 public:
02354     Image2D(
02355         const Context& context,
02356         cl_mem_flags flags,
02357         ImageFormat format,
02358         ::size_t width,
02359         ::size_t height,
02360         ::size_t row_pitch = 0,
02361         void* host_ptr = NULL,
02362         cl_int* err = NULL)
02363     {
02364         cl_int error;
02365         object_ = ::clCreateImage2D(
02366             context(), flags,&format, width, height, row_pitch, host_ptr, &error);
02367 
02368         detail::errHandler(error, __CREATE_IMAGE2D_ERR);
02369         if (err != NULL) {
02370             *err = error;
02371         }
02372     }
02373 
02374     Image2D() { }
02375 
02376     Image2D(const Image2D& image2D) : Image(image2D) { }
02377 
02378     Image2D(const cl_mem& image2D) : Image(image2D) { }
02379 
02380     Image2D& operator = (const Image2D& rhs)
02381     {
02382         if (this != &rhs) {
02383             Image::operator=(rhs);
02384         }
02385         return *this;
02386     }
02387 
02388     Image2D& operator = (const cl_mem& rhs)
02389     {
02390         Image::operator=(rhs);
02391         return *this;
02392     }
02393 };
02394 
02398 class Image2DGL : public Image2D
02399 {
02400 public:
02401     Image2DGL(
02402         const Context& context,
02403         cl_mem_flags flags,
02404         GLenum target,
02405         GLint  miplevel,
02406         GLuint texobj,
02407         cl_int * err = NULL)
02408     {
02409         cl_int error;
02410         object_ = ::clCreateFromGLTexture2D(
02411             context(),
02412             flags,
02413             target,
02414             miplevel,
02415             texobj,
02416             &error);
02417 
02418         detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR);
02419         if (err != NULL) {
02420             *err = error;
02421         }
02422     }
02423 
02424     Image2DGL() : Image2D() { }
02425 
02426     Image2DGL(const Image2DGL& image) : Image2D(image) { }
02427 
02428     Image2DGL(const cl_mem& image) : Image2D(image) { }
02429 
02430     Image2DGL& operator = (const Image2DGL& rhs)
02431     {
02432         if (this != &rhs) {
02433             Image2D::operator=(rhs);
02434         }
02435         return *this;
02436     }
02437 
02438     Image2DGL& operator = (const cl_mem& rhs)
02439     {
02440         Image2D::operator=(rhs);
02441         return *this;
02442     }
02443 };
02444 
02448 class Image3D : public Image
02449 {
02450 public:
02451     Image3D(
02452         const Context& context,
02453         cl_mem_flags flags,
02454         ImageFormat format,
02455         ::size_t width,
02456         ::size_t height,
02457         ::size_t depth,
02458         ::size_t row_pitch = 0,
02459         ::size_t slice_pitch = 0,
02460         void* host_ptr = NULL,
02461         cl_int* err = NULL)
02462     {
02463         cl_int error;
02464         object_ = ::clCreateImage3D(
02465             context(), flags, &format, width, height, depth, row_pitch,
02466             slice_pitch, host_ptr, &error);
02467 
02468         detail::errHandler(error, __CREATE_IMAGE3D_ERR);
02469         if (err != NULL) {
02470             *err = error;
02471         }
02472     }
02473 
02474     Image3D() { }
02475 
02476     Image3D(const Image3D& image3D) : Image(image3D) { }
02477 
02478     Image3D(const cl_mem& image3D) : Image(image3D) { }
02479 
02480     Image3D& operator = (const Image3D& rhs)
02481     {
02482         if (this != &rhs) {
02483             Image::operator=(rhs);
02484         }
02485         return *this;
02486     }
02487 
02488     Image3D& operator = (const cl_mem& rhs)
02489     {
02490         Image::operator=(rhs);
02491         return *this;
02492     }
02493 };
02494 
02498 class Image3DGL : public Image3D
02499 {
02500 public:
02501     Image3DGL(
02502         const Context& context,
02503         cl_mem_flags flags,
02504         GLenum target,
02505         GLint  miplevel,
02506         GLuint texobj,
02507         cl_int * err = NULL)
02508     {
02509         cl_int error;
02510         object_ = ::clCreateFromGLTexture3D(
02511             context(),
02512             flags,
02513             target,
02514             miplevel,
02515             texobj,
02516             &error);
02517 
02518         detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR);
02519         if (err != NULL) {
02520             *err = error;
02521         }
02522     }
02523 
02524     Image3DGL() : Image3D() { }
02525 
02526     Image3DGL(const Image3DGL& image) : Image3D(image) { }
02527 
02528     Image3DGL(const cl_mem& image) : Image3D(image) { }
02529 
02530     Image3DGL& operator = (const Image3DGL& rhs)
02531     {
02532         if (this != &rhs) {
02533             Image3D::operator=(rhs);
02534         }
02535         return *this;
02536     }
02537 
02538     Image3DGL& operator = (const cl_mem& rhs)
02539     {
02540         Image3D::operator=(rhs);
02541         return *this;
02542     }
02543 };
02544 
02548 class Sampler : public detail::Wrapper<cl_sampler>
02549 {
02550 public:
02551     Sampler() { }
02552 
02553     Sampler(
02554         const Context& context,
02555         cl_bool normalized_coords,
02556         cl_addressing_mode addressing_mode,
02557         cl_filter_mode filter_mode,
02558         cl_int* err = NULL)
02559     {
02560         cl_int error;
02561         object_ = ::clCreateSampler(
02562             context(), 
02563             normalized_coords,
02564             addressing_mode,
02565             filter_mode,
02566             &error);
02567 
02568         detail::errHandler(error, __CREATE_SAMPLER_ERR);
02569         if (err != NULL) {
02570             *err = error;
02571         }
02572     }
02573 
02574     Sampler(const Sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
02575 
02576     Sampler(const cl_sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
02577 
02578     Sampler& operator = (const Sampler& rhs)
02579     {
02580         if (this != &rhs) {
02581             detail::Wrapper<cl_type>::operator=(rhs);
02582         }
02583         return *this;
02584     }
02585 
02586     Sampler& operator = (const cl_sampler& rhs)
02587     {
02588         detail::Wrapper<cl_type>::operator=(rhs);
02589         return *this;
02590     }
02591 
02592     template <typename T>
02593     cl_int getInfo(cl_sampler_info name, T* param) const
02594     {
02595         return detail::errHandler(
02596             detail::getInfo(&::clGetSamplerInfo, object_, name, param),
02597             __GET_SAMPLER_INFO_ERR);
02598     }
02599 
02600     template <cl_int name> typename
02601     detail::param_traits<detail::cl_sampler_info, name>::param_type
02602     getInfo(cl_int* err = NULL) const
02603     {
02604         typename detail::param_traits<
02605             detail::cl_sampler_info, name>::param_type param;
02606         cl_int result = getInfo(name, &param);
02607         if (err != NULL) {
02608             *err = result;
02609         }
02610         return param;
02611     }
02612 };
02613 
02614 __GET_INFO_HELPER_WITH_RETAIN(cl::Sampler)
02615 
02616 class Program;
02617 class CommandQueue;
02618 class Kernel;
02619 
02623 class NDRange
02624 {
02625 private:
02626     size_t<3> sizes_;
02627     cl_uint dimensions_;
02628 
02629 public:
02630     NDRange()
02631         : dimensions_(0)
02632     { }
02633 
02634     NDRange(::size_t size0)
02635         : dimensions_(1)
02636     {
02637         sizes_.push_back(size0);
02638     }
02639 
02640     NDRange(::size_t size0, ::size_t size1)
02641         : dimensions_(2)
02642     {
02643         sizes_.push_back(size0);
02644         sizes_.push_back(size1);
02645     }
02646 
02647     NDRange(::size_t size0, ::size_t size1, ::size_t size2)
02648         : dimensions_(3)
02649     {
02650         sizes_.push_back(size0);
02651         sizes_.push_back(size1);
02652         sizes_.push_back(size2);
02653     }
02654 
02655     operator const ::size_t*() const { return (const ::size_t*) sizes_; }
02656     ::size_t dimensions() const { return dimensions_; }
02657 };
02658 
02659 static const NDRange NullRange;
02660 
02665 struct LocalSpaceArg
02666 {
02667     ::size_t size_;
02668 };
02669 
02670 namespace detail {
02671 
02672 template <typename T>
02673 struct KernelArgumentHandler
02674 {
02675     static ::size_t size(const T&) { return sizeof(T); }
02676     static T* ptr(T& value) { return &value; }
02677 };
02678 
02679 template <>
02680 struct KernelArgumentHandler<LocalSpaceArg>
02681 {
02682     static ::size_t size(const LocalSpaceArg& value) { return value.size_; }
02683     static void* ptr(LocalSpaceArg&) { return NULL; }
02684 };
02685 
02686 } 
02688 
02689 inline LocalSpaceArg
02690 __local(::size_t size)
02691 {
02692     LocalSpaceArg ret = { size };
02693     return ret;
02694 }
02695 
02696 //class KernelFunctor;
02697 
02701 class Kernel : public detail::Wrapper<cl_kernel>
02702 {
02703 public:
02704     inline Kernel(const Program& program, const char* name, cl_int* err = NULL);
02705 
02706     Kernel() { }
02707 
02708     Kernel(const Kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
02709 
02710     Kernel(const cl_kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
02711 
02712     Kernel& operator = (const Kernel& rhs)
02713     {
02714         if (this != &rhs) {
02715             detail::Wrapper<cl_type>::operator=(rhs);
02716         }
02717         return *this;
02718     }
02719 
02720     Kernel& operator = (const cl_kernel& rhs)
02721     {
02722         detail::Wrapper<cl_type>::operator=(rhs);
02723         return *this;
02724     }
02725 
02726     template <typename T>
02727     cl_int getInfo(cl_kernel_info name, T* param) const
02728     {
02729         return detail::errHandler(
02730             detail::getInfo(&::clGetKernelInfo, object_, name, param),
02731             __GET_KERNEL_INFO_ERR);
02732     }
02733 
02734     template <cl_int name> typename
02735     detail::param_traits<detail::cl_kernel_info, name>::param_type
02736     getInfo(cl_int* err = NULL) const
02737     {
02738         typename detail::param_traits<
02739             detail::cl_kernel_info, name>::param_type param;
02740         cl_int result = getInfo(name, &param);
02741         if (err != NULL) {
02742             *err = result;
02743         }
02744         return param;
02745     }
02746 
02747     template <typename T>
02748     cl_int getWorkGroupInfo(
02749         const Device& device, cl_kernel_work_group_info name, T* param) const
02750     {
02751         return detail::errHandler(
02752             detail::getInfo(
02753                 &::clGetKernelWorkGroupInfo, object_, device(), name, param),
02754                 __GET_KERNEL_WORK_GROUP_INFO_ERR);
02755     }
02756 
02757     template <cl_int name> typename
02758     detail::param_traits<detail::cl_kernel_work_group_info, name>::param_type
02759         getWorkGroupInfo(const Device& device, cl_int* err = NULL) const
02760     {
02761         typename detail::param_traits<
02762         detail::cl_kernel_work_group_info, name>::param_type param;
02763         cl_int result = getWorkGroupInfo(device, name, &param);
02764         if (err != NULL) {
02765             *err = result;
02766         }
02767         return param;
02768     }
02769 
02770     template <typename T>
02771     cl_int setArg(cl_uint index, T value)
02772     {
02773         return detail::errHandler(
02774             ::clSetKernelArg(
02775                 object_,
02776                 index,
02777                 detail::KernelArgumentHandler<T>::size(value),
02778                 detail::KernelArgumentHandler<T>::ptr(value)),
02779             __SET_KERNEL_ARGS_ERR);
02780     }
02781 
02782     cl_int setArg(cl_uint index, ::size_t size, void* argPtr)
02783     {
02784         return detail::errHandler(
02785             ::clSetKernelArg(object_, index, size, argPtr),
02786             __SET_KERNEL_ARGS_ERR);
02787     }
02788 };
02789 
02790 __GET_INFO_HELPER_WITH_RETAIN(cl::Kernel)
02791 
02792 
02795 class Program : public detail::Wrapper<cl_program>
02796 {
02797 public:
02798     typedef VECTOR_CLASS<std::pair<const void*, ::size_t> > Binaries;
02799     typedef VECTOR_CLASS<std::pair<const char*, ::size_t> > Sources;
02800 
02801     Program(
02802         const STRING_CLASS& source,
02803         cl_int* err = NULL)
02804     {
02805         cl_int error;
02806 
02807         const char * strings = source.c_str();
02808         const ::size_t length  = source.size();
02809 
02810         Context context = Context::getDefault(err);
02811 
02812         object_ = ::clCreateProgramWithSource(
02813             context(), (cl_uint)1, &strings, &length, &error);
02814 
02815         detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
02816 
02817         if (error == CL_SUCCESS) {
02818 
02819             error = ::clBuildProgram(
02820                 object_,
02821                 0,
02822                 NULL,
02823                 "",
02824                 NULL,
02825                 NULL);
02826 
02827             detail::errHandler(error, __BUILD_PROGRAM_ERR);
02828         }
02829 
02830         if (err != NULL) {
02831             *err = error;
02832         }
02833     }
02834 
02835     Program(
02836         const STRING_CLASS& source,
02837         bool build,
02838         cl_int* err = NULL)
02839     {
02840         cl_int error;
02841 
02842         const char * strings = source.c_str();
02843         const ::size_t length  = source.size();
02844 
02845         Context context = Context::getDefault(err);
02846 
02847         object_ = ::clCreateProgramWithSource(
02848             context(), (cl_uint)1, &strings, &length, &error);
02849 
02850         detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
02851 
02852         if (error == CL_SUCCESS && build) {
02853 
02854             error = ::clBuildProgram(
02855                 object_,
02856                 0,
02857                 NULL,
02858                 "",
02859                 NULL,
02860                 NULL);
02861 
02862             detail::errHandler(error, __BUILD_PROGRAM_ERR);
02863         }
02864 
02865         if (err != NULL) {
02866             *err = error;
02867         }
02868     }
02869 
02870     Program(
02871         const Context& context,
02872         const STRING_CLASS& source,
02873         bool build = false,
02874         cl_int* err = NULL)
02875     {
02876         cl_int error;
02877 
02878         const char * strings = source.c_str();
02879         const ::size_t length  = source.size();
02880 
02881         object_ = ::clCreateProgramWithSource(
02882             context(), (cl_uint)1, &strings, &length, &error);
02883 
02884         detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
02885 
02886         if (error == CL_SUCCESS && build) {
02887 
02888             error = ::clBuildProgram(
02889                 object_,
02890                 0,
02891                 NULL,
02892                 "",
02893                 NULL,
02894                 NULL);
02895 
02896             detail::errHandler(error, __BUILD_PROGRAM_ERR);
02897         }
02898 
02899         if (err != NULL) {
02900             *err = error;
02901         }
02902     }
02903 
02904     Program(
02905         const Context& context,
02906         const Sources& sources,
02907         cl_int* err = NULL)
02908     {
02909         cl_int error;
02910 
02911         const ::size_t n = (::size_t)sources.size();
02912         ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
02913         const char** strings = (const char**) alloca(n * sizeof(const char*));
02914 
02915         for (::size_t i = 0; i < n; ++i) {
02916             strings[i] = sources[(int)i].first;
02917             lengths[i] = sources[(int)i].second;
02918         }
02919 
02920         object_ = ::clCreateProgramWithSource(
02921             context(), (cl_uint)n, strings, lengths, &error);
02922 
02923         detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
02924         if (err != NULL) {
02925             *err = error;
02926         }
02927     }
02928 
02929     Program(
02930         const Context& context,
02931         const VECTOR_CLASS<Device>& devices,
02932         const Binaries& binaries,
02933         VECTOR_CLASS<cl_int>* binaryStatus = NULL,
02934         cl_int* err = NULL)
02935     {
02936         cl_int error;
02937         const ::size_t n = binaries.size();
02938         ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
02939         const unsigned char** images = (const unsigned char**) alloca(n * sizeof(const void*));
02940 
02941         for (::size_t i = 0; i < n; ++i) {
02942             images[i] = (const unsigned char*)binaries[(int)i].first;
02943             lengths[i] = binaries[(int)i].second;
02944         }
02945 
02946         object_ = ::clCreateProgramWithBinary(
02947             context(), (cl_uint) devices.size(),
02948             (cl_device_id*)&devices.front(),
02949             lengths, images, binaryStatus != NULL
02950                ? (cl_int*) &binaryStatus->front()
02951                : NULL, &error);
02952 
02953         detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
02954         if (err != NULL) {
02955             *err = error;
02956         }
02957     }
02958 
02959     Program() { }
02960 
02961     Program(const Program& program) : detail::Wrapper<cl_type>(program) { }
02962 
02963     Program(const cl_program& program) : detail::Wrapper<cl_type>(program) { }
02964 
02965     Program& operator = (const Program& rhs)
02966     {
02967         if (this != &rhs) {
02968             detail::Wrapper<cl_type>::operator=(rhs);
02969         }
02970         return *this;
02971     }
02972 
02973     Program& operator = (const cl_program& rhs)
02974     {
02975         detail::Wrapper<cl_type>::operator=(rhs);
02976         return *this;
02977     }
02978 
02979     cl_int build(
02980         const VECTOR_CLASS<Device>& devices,
02981         const char* options = NULL,
02982         void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
02983         void* data = NULL) const
02984     {
02985         return detail::errHandler(
02986             ::clBuildProgram(
02987                 object_,
02988                 (cl_uint)
02989                 devices.size(),
02990                 (cl_device_id*)&devices.front(),
02991                 options,
02992                 notifyFptr,
02993                 data),
02994                 __BUILD_PROGRAM_ERR);
02995     }
02996 
02997     cl_int build(
02998         const char* options = NULL,
02999         void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
03000         void* data = NULL) const
03001     {
03002         return detail::errHandler(
03003             ::clBuildProgram(
03004                 object_,
03005                 0,
03006                 NULL,
03007                 options,
03008                 notifyFptr,
03009                 data),
03010                 __BUILD_PROGRAM_ERR);
03011     }
03012 
03013     template <typename T>
03014     cl_int getInfo(cl_program_info name, T* param) const
03015     {
03016         return detail::errHandler(
03017             detail::getInfo(&::clGetProgramInfo, object_, name, param),
03018             __GET_PROGRAM_INFO_ERR);
03019     }
03020 
03021     template <cl_int name> typename
03022     detail::param_traits<detail::cl_program_info, name>::param_type
03023     getInfo(cl_int* err = NULL) const
03024     {
03025         typename detail::param_traits<
03026             detail::cl_program_info, name>::param_type param;
03027         cl_int result = getInfo(name, &param);
03028         if (err != NULL) {
03029             *err = result;
03030         }
03031         return param;
03032     }
03033 
03034     template <typename T>
03035     cl_int getBuildInfo(
03036         const Device& device, cl_program_build_info name, T* param) const
03037     {
03038         return detail::errHandler(
03039             detail::getInfo(
03040                 &::clGetProgramBuildInfo, object_, device(), name, param),
03041                 __GET_PROGRAM_BUILD_INFO_ERR);
03042     }
03043 
03044     template <cl_int name> typename
03045     detail::param_traits<detail::cl_program_build_info, name>::param_type
03046     getBuildInfo(const Device& device, cl_int* err = NULL) const
03047     {
03048         typename detail::param_traits<
03049             detail::cl_program_build_info, name>::param_type param;
03050         cl_int result = getBuildInfo(device, name, &param);
03051         if (err != NULL) {
03052             *err = result;
03053         }
03054         return param;
03055     }
03056 
03057     cl_int createKernels(VECTOR_CLASS<Kernel>* kernels)
03058     {
03059         cl_uint numKernels;
03060         cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels);
03061         if (err != CL_SUCCESS) {
03062             return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
03063         }
03064 
03065         Kernel* value = (Kernel*) alloca(numKernels * sizeof(Kernel));
03066         err = ::clCreateKernelsInProgram(
03067             object_, numKernels, (cl_kernel*) value, NULL);
03068         if (err != CL_SUCCESS) {
03069             return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
03070         }
03071 
03072         kernels->assign(&value[0], &value[numKernels]);
03073         return CL_SUCCESS;
03074     }
03075 };
03076 
03077 template<>
03078 inline VECTOR_CLASS<char *> cl::Program::getInfo<CL_PROGRAM_BINARIES>(cl_int* err) const
03079 {
03080     VECTOR_CLASS< ::size_t> sizes = getInfo<CL_PROGRAM_BINARY_SIZES>();
03081     VECTOR_CLASS<char *> binaries;
03082     for (VECTOR_CLASS< ::size_t>::iterator s = sizes.begin(); s != sizes.end(); ++s) 
03083     {
03084         char *ptr = NULL;
03085         if (*s != 0) 
03086             ptr = new char[*s];
03087         binaries.push_back(ptr);
03088     }
03089     
03090     cl_int result = getInfo(CL_PROGRAM_BINARIES, &binaries);
03091     if (err != NULL) {
03092         *err = result;
03093     }
03094     return binaries;
03095 }
03096 
03097 __GET_INFO_HELPER_WITH_RETAIN(cl::Program)
03098 
03099 inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
03100 {
03101     cl_int error;
03102 
03103     object_ = ::clCreateKernel(program(), name, &error);
03104     detail::errHandler(error, __CREATE_KERNEL_ERR);
03105 
03106     if (err != NULL) {
03107         *err = error;
03108     }
03109 
03110 }
03111 
03115 class CommandQueue : public detail::Wrapper<cl_command_queue>
03116 {
03117 private:
03118     static volatile int default_initialized_;
03119     static CommandQueue default_;
03120     static volatile cl_int default_error_;
03121 public:
03122    CommandQueue(
03123         cl_command_queue_properties properties,
03124         cl_int* err = NULL)
03125     {
03126         cl_int error;
03127 
03128         Context context = Context::getDefault(&error);
03129         detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
03130 
03131         if (error != CL_SUCCESS) {
03132             if (err != NULL) {
03133                 *err = error;
03134             }
03135         }
03136         else {
03137             Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
03138 
03139             object_ = ::clCreateCommandQueue(
03140                 context(), device(), properties, &error);
03141 
03142             detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
03143             if (err != NULL) {
03144                 *err = error;
03145             }
03146         }
03147     }
03148 
03149     CommandQueue(
03150         const Context& context,
03151         const Device& device,
03152         cl_command_queue_properties properties = 0,
03153         cl_int* err = NULL)
03154     {
03155         cl_int error;
03156         object_ = ::clCreateCommandQueue(
03157             context(), device(), properties, &error);
03158 
03159         detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
03160         if (err != NULL) {
03161             *err = error;
03162         }
03163     }
03164 
03165     static CommandQueue getDefault(cl_int * err = NULL) 
03166     {
03167         int state = detail::compare_exchange(
03168             &default_initialized_, 
03169             __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
03170 
03171         if (state & __DEFAULT_INITIALIZED) {
03172             if (err != NULL) {
03173                 *err = default_error_;
03174             }
03175             return default_;
03176         }
03177 
03178         if (state & __DEFAULT_BEING_INITIALIZED) {
03179               // Assume writes will propagate eventually...
03180               while(default_initialized_ != __DEFAULT_INITIALIZED) {
03181                                 ;
03182               }
03183 
03184             if (err != NULL) {
03185                 *err = default_error_;
03186             }
03187             return default_;
03188         }
03189 
03190         cl_int error;
03191 
03192         Context context = Context::getDefault(&error);
03193         detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
03194 
03195         if (error != CL_SUCCESS) {
03196             if (err != NULL) {
03197                 *err = error;
03198             }
03199         }
03200         else {
03201             Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
03202 
03203 
03204             default_ = CommandQueue(context, device, 0, &error);
03205 
03206             detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
03207             if (err != NULL) {
03208                 *err = error;
03209             }
03210         }
03211 
03212         default_error_ = error;
03213         // Assume writes will propagate eventually...
03214         default_initialized_ = __DEFAULT_INITIALIZED;
03215         if (err != NULL) {
03216             *err = default_error_;
03217         }
03218         return default_;
03219 
03220     }
03221 
03222     CommandQueue() { }
03223 
03224     CommandQueue(const CommandQueue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
03225 
03226     CommandQueue(const cl_command_queue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
03227 
03228     CommandQueue& operator = (const CommandQueue& rhs)
03229     {
03230         if (this != &rhs) {
03231             detail::Wrapper<cl_type>::operator=(rhs);
03232         }
03233         return *this;
03234     }
03235 
03236     CommandQueue& operator = (const cl_command_queue& rhs)
03237     {
03238         detail::Wrapper<cl_type>::operator=(rhs);
03239         return *this;
03240     }
03241 
03242     template <typename T>
03243     cl_int getInfo(cl_command_queue_info name, T* param) const
03244     {
03245         return detail::errHandler(
03246             detail::getInfo(
03247                 &::clGetCommandQueueInfo, object_, name, param),
03248                 __GET_COMMAND_QUEUE_INFO_ERR);
03249     }
03250 
03251     template <cl_int name> typename
03252     detail::param_traits<detail::cl_command_queue_info, name>::param_type
03253     getInfo(cl_int* err = NULL) const
03254     {
03255         typename detail::param_traits<
03256             detail::cl_command_queue_info, name>::param_type param;
03257         cl_int result = getInfo(name, &param);
03258         if (err != NULL) {
03259             *err = result;
03260         }
03261         return param;
03262     }
03263 
03264     cl_int enqueueReadBuffer(
03265         const Buffer& buffer,
03266         cl_bool blocking,
03267         ::size_t offset,
03268         ::size_t size,
03269         void* ptr,
03270         const VECTOR_CLASS<Event>* events = NULL,
03271         Event* event = NULL) const
03272     {
03273         cl_event tmp;
03274         cl_int err = detail::errHandler(
03275             ::clEnqueueReadBuffer(
03276                 object_, buffer(), blocking, offset, size,
03277                 ptr,
03278                 (events != NULL) ? (cl_uint) events->size() : 0,
03279                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03280                 (event != NULL) ? &tmp : NULL),
03281             __ENQUEUE_READ_BUFFER_ERR);
03282 
03283         if (event != NULL && err == CL_SUCCESS)
03284             *event = tmp;
03285 
03286         return err;
03287     }
03288 
03289     cl_int enqueueWriteBuffer(
03290         const Buffer& buffer,
03291         cl_bool blocking,
03292         ::size_t offset,
03293         ::size_t size,
03294         const void* ptr,
03295         const VECTOR_CLASS<Event>* events = NULL,
03296         Event* event = NULL) const
03297     {
03298         cl_event tmp;
03299         cl_int err = detail::errHandler(
03300             ::clEnqueueWriteBuffer(
03301                 object_, buffer(), blocking, offset, size,
03302                 ptr,
03303                 (events != NULL) ? (cl_uint) events->size() : 0,
03304                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03305                 (event != NULL) ? &tmp : NULL),
03306                 __ENQUEUE_WRITE_BUFFER_ERR);
03307 
03308         if (event != NULL && err == CL_SUCCESS)
03309             *event = tmp;
03310 
03311         return err;
03312     }
03313 
03314     cl_int enqueueCopyBuffer(
03315         const Buffer& src,
03316         const Buffer& dst,
03317         ::size_t src_offset,
03318         ::size_t dst_offset,
03319         ::size_t size,
03320         const VECTOR_CLASS<Event>* events = NULL,
03321         Event* event = NULL) const
03322     {
03323         cl_event tmp;
03324         cl_int err = detail::errHandler(
03325             ::clEnqueueCopyBuffer(
03326                 object_, src(), dst(), src_offset, dst_offset, size,
03327                 (events != NULL) ? (cl_uint) events->size() : 0,
03328                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03329                 (event != NULL) ? &tmp : NULL),
03330             __ENQEUE_COPY_BUFFER_ERR);
03331 
03332         if (event != NULL && err == CL_SUCCESS)
03333             *event = tmp;
03334 
03335         return err;
03336     }
03337 
03338 #if defined(CL_VERSION_1_1)
03339     cl_int enqueueReadBufferRect(
03340         const Buffer& buffer,
03341         cl_bool blocking,
03342         const size_t<3>& buffer_offset,
03343         const size_t<3>& host_offset,
03344         const size_t<3>& region,
03345         ::size_t buffer_row_pitch,
03346         ::size_t buffer_slice_pitch,
03347         ::size_t host_row_pitch,
03348         ::size_t host_slice_pitch,
03349         void *ptr,
03350         const VECTOR_CLASS<Event>* events = NULL,
03351         Event* event = NULL) const
03352     {
03353         cl_event tmp;
03354         cl_int err = detail::errHandler(
03355             ::clEnqueueReadBufferRect(
03356                 object_, 
03357                 buffer(), 
03358                 blocking, 
03359                 (const ::size_t *)buffer_offset,
03360                 (const ::size_t *)host_offset,
03361                 (const ::size_t *)region,
03362                 buffer_row_pitch,
03363                 buffer_slice_pitch,
03364                 host_row_pitch,
03365                 host_slice_pitch,
03366                 ptr,
03367                 (events != NULL) ? (cl_uint) events->size() : 0,
03368                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03369                 (event != NULL) ? &tmp : NULL),
03370                 __ENQUEUE_READ_BUFFER_RECT_ERR);
03371 
03372         if (event != NULL && err == CL_SUCCESS)
03373             *event = tmp;
03374 
03375         return err;
03376     }
03377 
03378 
03379     cl_int enqueueWriteBufferRect(
03380         const Buffer& buffer,
03381         cl_bool blocking,
03382         const size_t<3>& buffer_offset,
03383         const size_t<3>& host_offset,
03384         const size_t<3>& region,
03385         ::size_t buffer_row_pitch,
03386         ::size_t buffer_slice_pitch,
03387         ::size_t host_row_pitch,
03388         ::size_t host_slice_pitch,
03389         void *ptr,
03390         const VECTOR_CLASS<Event>* events = NULL,
03391         Event* event = NULL) const
03392     {
03393         cl_event tmp;
03394         cl_int err = detail::errHandler(
03395             ::clEnqueueWriteBufferRect(
03396                 object_, 
03397                 buffer(), 
03398                 blocking, 
03399                 (const ::size_t *)buffer_offset,
03400                 (const ::size_t *)host_offset,
03401                 (const ::size_t *)region,
03402                 buffer_row_pitch,
03403                 buffer_slice_pitch,
03404                 host_row_pitch,
03405                 host_slice_pitch,
03406                 ptr,
03407                 (events != NULL) ? (cl_uint) events->size() : 0,
03408                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03409                 (event != NULL) ? &tmp : NULL),
03410                 __ENQUEUE_WRITE_BUFFER_RECT_ERR);
03411 
03412         if (event != NULL && err == CL_SUCCESS)
03413             *event = tmp;
03414 
03415         return err;
03416     }
03417 
03418     cl_int enqueueCopyBufferRect(
03419         const Buffer& src,
03420         const Buffer& dst,
03421         const size_t<3>& src_origin,
03422         const size_t<3>& dst_origin,
03423         const size_t<3>& region,
03424         ::size_t src_row_pitch,
03425         ::size_t src_slice_pitch,
03426         ::size_t dst_row_pitch,
03427         ::size_t dst_slice_pitch,
03428         const VECTOR_CLASS<Event>* events = NULL,
03429         Event* event = NULL) const
03430     {
03431         cl_event tmp;
03432         cl_int err = detail::errHandler(
03433             ::clEnqueueCopyBufferRect(
03434                 object_, 
03435                 src(), 
03436                 dst(), 
03437                 (const ::size_t *)src_origin, 
03438                 (const ::size_t *)dst_origin, 
03439                 (const ::size_t *)region,
03440                 src_row_pitch,
03441                 src_slice_pitch,
03442                 dst_row_pitch,
03443                 dst_slice_pitch,
03444                 (events != NULL) ? (cl_uint) events->size() : 0,
03445                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03446                 (event != NULL) ? &tmp : NULL),
03447             __ENQEUE_COPY_BUFFER_RECT_ERR);
03448 
03449         if (event != NULL && err == CL_SUCCESS)
03450             *event = tmp;
03451 
03452         return err;
03453     }
03454 #endif
03455 
03456     cl_int enqueueReadImage(
03457         const Image& image,
03458         cl_bool blocking,
03459         const size_t<3>& origin,
03460         const size_t<3>& region,
03461         ::size_t row_pitch,
03462         ::size_t slice_pitch,
03463         void* ptr,
03464         const VECTOR_CLASS<Event>* events = NULL,
03465         Event* event = NULL) const
03466     {
03467         cl_event tmp;
03468         cl_int err = detail::errHandler(
03469             ::clEnqueueReadImage(
03470                 object_, image(), blocking, (const ::size_t *) origin,
03471                 (const ::size_t *) region, row_pitch, slice_pitch, ptr,
03472                 (events != NULL) ? (cl_uint) events->size() : 0,
03473                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03474                 (event != NULL) ? &tmp : NULL),
03475             __ENQUEUE_READ_IMAGE_ERR);
03476 
03477         if (event != NULL && err == CL_SUCCESS)
03478             *event = tmp;
03479 
03480         return err;
03481     }
03482 
03483     cl_int enqueueWriteImage(
03484         const Image& image,
03485         cl_bool blocking,
03486         const size_t<3>& origin,
03487         const size_t<3>& region,
03488         ::size_t row_pitch,
03489         ::size_t slice_pitch,
03490         void* ptr,
03491         const VECTOR_CLASS<Event>* events = NULL,
03492         Event* event = NULL) const
03493     {
03494         cl_event tmp;
03495         cl_int err = detail::errHandler(
03496             ::clEnqueueWriteImage(
03497                 object_, image(), blocking, (const ::size_t *) origin,
03498                 (const ::size_t *) region, row_pitch, slice_pitch, ptr,
03499                 (events != NULL) ? (cl_uint) events->size() : 0,
03500                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03501                 (event != NULL) ? &tmp : NULL),
03502             __ENQUEUE_WRITE_IMAGE_ERR);
03503 
03504         if (event != NULL && err == CL_SUCCESS)
03505             *event = tmp;
03506 
03507         return err;
03508     }
03509 
03510     cl_int enqueueCopyImage(
03511         const Image& src,
03512         const Image& dst,
03513         const size_t<3>& src_origin,
03514         const size_t<3>& dst_origin,
03515         const size_t<3>& region,
03516         const VECTOR_CLASS<Event>* events = NULL,
03517         Event* event = NULL) const
03518     {
03519         cl_event tmp;
03520         cl_int err = detail::errHandler(
03521             ::clEnqueueCopyImage(
03522                 object_, src(), dst(), (const ::size_t *) src_origin,
03523                 (const ::size_t *)dst_origin, (const ::size_t *) region,
03524                 (events != NULL) ? (cl_uint) events->size() : 0,
03525                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03526                 (event != NULL) ? &tmp : NULL),
03527             __ENQUEUE_COPY_IMAGE_ERR);
03528 
03529         if (event != NULL && err == CL_SUCCESS)
03530             *event = tmp;
03531 
03532         return err;
03533     }
03534 
03535     cl_int enqueueCopyImageToBuffer(
03536         const Image& src,
03537         const Buffer& dst,
03538         const size_t<3>& src_origin,
03539         const size_t<3>& region,
03540         ::size_t dst_offset,
03541         const VECTOR_CLASS<Event>* events = NULL,
03542         Event* event = NULL) const
03543     {
03544         cl_event tmp;
03545         cl_int err = detail::errHandler(
03546             ::clEnqueueCopyImageToBuffer(
03547                 object_, src(), dst(), (const ::size_t *) src_origin,
03548                 (const ::size_t *) region, dst_offset,
03549                 (events != NULL) ? (cl_uint) events->size() : 0,
03550                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03551                 (event != NULL) ? &tmp : NULL),
03552             __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR);
03553 
03554         if (event != NULL && err == CL_SUCCESS)
03555             *event = tmp;
03556 
03557         return err;
03558     }
03559 
03560     cl_int enqueueCopyBufferToImage(
03561         const Buffer& src,
03562         const Image& dst,
03563         ::size_t src_offset,
03564         const size_t<3>& dst_origin,
03565         const size_t<3>& region,
03566         const VECTOR_CLASS<Event>* events = NULL,
03567         Event* event = NULL) const
03568     {
03569         cl_event tmp;
03570         cl_int err = detail::errHandler(
03571             ::clEnqueueCopyBufferToImage(
03572                 object_, src(), dst(), src_offset,
03573                 (const ::size_t *) dst_origin, (const ::size_t *) region,
03574                 (events != NULL) ? (cl_uint) events->size() : 0,
03575                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03576                 (event != NULL) ? &tmp : NULL),
03577             __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR);
03578 
03579         if (event != NULL && err == CL_SUCCESS)
03580             *event = tmp;
03581 
03582         return err;
03583     }
03584 
03585     void* enqueueMapBuffer(
03586         const Buffer& buffer,
03587         cl_bool blocking,
03588         cl_map_flags flags,
03589         ::size_t offset,
03590         ::size_t size,
03591         const VECTOR_CLASS<Event>* events = NULL,
03592         Event* event = NULL,
03593         cl_int* err = NULL) const
03594     {
03595         cl_int error;
03596         void * result = ::clEnqueueMapBuffer(
03597             object_, buffer(), blocking, flags, offset, size,
03598             (events != NULL) ? (cl_uint) events->size() : 0,
03599             (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03600             (cl_event*) event,
03601             &error);
03602 
03603         detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
03604         if (err != NULL) {
03605             *err = error;
03606         }
03607         return result;
03608     }
03609 
03610     void* enqueueMapImage(
03611         const Image& buffer,
03612         cl_bool blocking,
03613         cl_map_flags flags,
03614         const size_t<3>& origin,
03615         const size_t<3>& region,
03616         ::size_t * row_pitch,
03617         ::size_t * slice_pitch,
03618         const VECTOR_CLASS<Event>* events = NULL,
03619         Event* event = NULL,
03620         cl_int* err = NULL) const
03621     {
03622         cl_int error;
03623         void * result = ::clEnqueueMapImage(
03624             object_, buffer(), blocking, flags,
03625             (const ::size_t *) origin, (const ::size_t *) region,
03626             row_pitch, slice_pitch,
03627             (events != NULL) ? (cl_uint) events->size() : 0,
03628             (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03629             (cl_event*) event,
03630             &error);
03631 
03632         detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR);
03633         if (err != NULL) {
03634               *err = error;
03635         }
03636         return result;
03637     }
03638 
03639     cl_int enqueueUnmapMemObject(
03640         const Memory& memory,
03641         void* mapped_ptr,
03642         const VECTOR_CLASS<Event>* events = NULL,
03643         Event* event = NULL) const
03644     {
03645         cl_event tmp;
03646         cl_int err = detail::errHandler(
03647             ::clEnqueueUnmapMemObject(
03648                 object_, memory(), mapped_ptr,
03649                 (events != NULL) ? (cl_uint) events->size() : 0,
03650                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03651                 (event != NULL) ? &tmp : NULL),
03652             __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
03653 
03654         if (event != NULL && err == CL_SUCCESS)
03655             *event = tmp;
03656 
03657         return err;
03658     }
03659 
03660     cl_int enqueueNDRangeKernel(
03661         const Kernel& kernel,
03662         const NDRange& offset,
03663         const NDRange& global,
03664         const NDRange& local = NullRange,
03665         const VECTOR_CLASS<Event>* events = NULL,
03666         Event* event = NULL) const
03667     {
03668         cl_event tmp;
03669         cl_int err = detail::errHandler(
03670             ::clEnqueueNDRangeKernel(
03671                 object_, kernel(), (cl_uint) global.dimensions(),
03672                 offset.dimensions() != 0 ? (const ::size_t*) offset : NULL,
03673                 (const ::size_t*) global,
03674                 local.dimensions() != 0 ? (const ::size_t*) local : NULL,
03675                 (events != NULL) ? (cl_uint) events->size() : 0,
03676                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03677                 (event != NULL) ? &tmp : NULL),
03678             __ENQUEUE_NDRANGE_KERNEL_ERR);
03679 
03680         if (event != NULL && err == CL_SUCCESS)
03681             *event = tmp;
03682 
03683         return err;
03684     }
03685 
03686     cl_int enqueueTask(
03687         const Kernel& kernel,
03688         const VECTOR_CLASS<Event>* events = NULL,
03689         Event* event = NULL) const
03690     {
03691         cl_event tmp;
03692         cl_int err = detail::errHandler(
03693             ::clEnqueueTask(
03694                 object_, kernel(),
03695                 (events != NULL) ? (cl_uint) events->size() : 0,
03696                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03697                 (event != NULL) ? &tmp : NULL),
03698             __ENQUEUE_TASK_ERR);
03699 
03700         if (event != NULL && err == CL_SUCCESS)
03701             *event = tmp;
03702 
03703         return err;
03704     }
03705 
03706     cl_int enqueueNativeKernel(
03707         void (*userFptr)(void *),
03708         std::pair<void*, ::size_t> args,
03709         const VECTOR_CLASS<Memory>* mem_objects = NULL,
03710         const VECTOR_CLASS<const void*>* mem_locs = NULL,
03711         const VECTOR_CLASS<Event>* events = NULL,
03712         Event* event = NULL) const
03713     {
03714         cl_mem * mems = (mem_objects != NULL && mem_objects->size() > 0) 
03715             ? (cl_mem*) alloca(mem_objects->size() * sizeof(cl_mem))
03716             : NULL;
03717 
03718         if (mems != NULL) {
03719             for (unsigned int i = 0; i < mem_objects->size(); i++) {
03720                 mems[i] = ((*mem_objects)[i])();
03721             }
03722         }
03723 
03724         cl_event tmp;
03725         cl_int err = detail::errHandler(
03726             ::clEnqueueNativeKernel(
03727                 object_, userFptr, args.first, args.second,
03728                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
03729                 mems,
03730                 (mem_locs != NULL) ? (const void **) &mem_locs->front() : NULL,
03731                 (events != NULL) ? (cl_uint) events->size() : 0,
03732                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03733                 (event != NULL) ? &tmp : NULL),
03734             __ENQUEUE_NATIVE_KERNEL);
03735 
03736         if (event != NULL && err == CL_SUCCESS)
03737             *event = tmp;
03738 
03739         return err;
03740     }
03741 
03742     cl_int enqueueMarker(Event* event = NULL) const
03743     {
03744         return detail::errHandler(
03745             ::clEnqueueMarker(object_, (cl_event*) event),
03746             __ENQUEUE_MARKER_ERR);
03747     }
03748 
03749     cl_int enqueueWaitForEvents(const VECTOR_CLASS<Event>& events) const
03750     {
03751         return detail::errHandler(
03752             ::clEnqueueWaitForEvents(
03753                 object_,
03754                 (cl_uint) events.size(),
03755                 (const cl_event*) &events.front()),
03756             __ENQUEUE_WAIT_FOR_EVENTS_ERR);
03757     }
03758 
03759     cl_int enqueueAcquireGLObjects(
03760          const VECTOR_CLASS<Memory>* mem_objects = NULL,
03761          const VECTOR_CLASS<Event>* events = NULL,
03762          Event* event = NULL) const
03763      {
03764         cl_event tmp;
03765         cl_int err = detail::errHandler(
03766              ::clEnqueueAcquireGLObjects(
03767                  object_,
03768                  (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
03769                  (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
03770                  (events != NULL) ? (cl_uint) events->size() : 0,
03771                  (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03772                  (event != NULL) ? &tmp : NULL),
03773              __ENQUEUE_ACQUIRE_GL_ERR);
03774 
03775         if (event != NULL && err == CL_SUCCESS)
03776             *event = tmp;
03777 
03778         return err;
03779      }
03780 
03781     cl_int enqueueReleaseGLObjects(
03782          const VECTOR_CLASS<Memory>* mem_objects = NULL,
03783          const VECTOR_CLASS<Event>* events = NULL,
03784          Event* event = NULL) const
03785      {
03786         cl_event tmp;
03787         cl_int err = detail::errHandler(
03788              ::clEnqueueReleaseGLObjects(
03789                  object_,
03790                  (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
03791                  (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
03792                  (events != NULL) ? (cl_uint) events->size() : 0,
03793                  (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
03794                  (event != NULL) ? &tmp : NULL),
03795              __ENQUEUE_RELEASE_GL_ERR);
03796 
03797         if (event != NULL && err == CL_SUCCESS)
03798             *event = tmp;
03799 
03800         return err;
03801      }
03802 
03803 #if defined (USE_DX_INTEROP)
03804 typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)(
03805     cl_command_queue command_queue, cl_uint num_objects,
03806     const cl_mem* mem_objects, cl_uint num_events_in_wait_list,
03807     const cl_event* event_wait_list, cl_event* event);
03808 typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
03809     cl_command_queue command_queue, cl_uint num_objects,
03810     const cl_mem* mem_objects,  cl_uint num_events_in_wait_list,
03811     const cl_event* event_wait_list, cl_event* event);
03812 
03813     cl_int enqueueAcquireD3D10Objects(
03814          const VECTOR_CLASS<Memory>* mem_objects = NULL,
03815          const VECTOR_CLASS<Event>* events = NULL,
03816          Event* event = NULL) const
03817      {
03818          static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL;
03819          __INIT_CL_EXT_FCN_PTR(clEnqueueAcquireD3D10ObjectsKHR);
03820         
03821         cl_event tmp;
03822         cl_int err = detail::errHandler(
03823              pfn_clEnqueueAcquireD3D10ObjectsKHR(
03824                  object_,
03825                  (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
03826                  (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
03827                  (events != NULL) ? (cl_uint) events->size() : 0,
03828                  (events != NULL) ? (cl_event*) &events->front() : NULL,
03829                  (event != NULL) ? &tmp : NULL),
03830              __ENQUEUE_ACQUIRE_GL_ERR);
03831 
03832         if (event != NULL && err == CL_SUCCESS)
03833             *event = tmp;
03834 
03835         return err;
03836      }
03837 
03838     cl_int enqueueReleaseD3D10Objects(
03839          const VECTOR_CLASS<Memory>* mem_objects = NULL,
03840          const VECTOR_CLASS<Event>* events = NULL,
03841          Event* event = NULL) const
03842     {
03843         static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL;
03844         __INIT_CL_EXT_FCN_PTR(clEnqueueReleaseD3D10ObjectsKHR);
03845 
03846         cl_event tmp;
03847         cl_int err = detail::errHandler(
03848             pfn_clEnqueueReleaseD3D10ObjectsKHR(
03849                 object_,
03850                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
03851                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
03852                 (events != NULL) ? (cl_uint) events->size() : 0,
03853                 (events != NULL) ? (cl_event*) &events->front() : NULL,
03854                 (event != NULL) ? &tmp : NULL),
03855             __ENQUEUE_RELEASE_GL_ERR);
03856 
03857         if (event != NULL && err == CL_SUCCESS)
03858             *event = tmp;
03859 
03860         return err;
03861     }
03862 #endif
03863 
03864     cl_int enqueueBarrier() const
03865     {
03866         return detail::errHandler(
03867             ::clEnqueueBarrier(object_),
03868             __ENQUEUE_BARRIER_ERR);
03869     }
03870 
03871     cl_int flush() const
03872     {
03873         return detail::errHandler(::clFlush(object_), __FLUSH_ERR);
03874     }
03875 
03876     cl_int finish() const
03877     {
03878         return detail::errHandler(::clFinish(object_), __FINISH_ERR);
03879     }
03880 };
03881 
03882 __GET_INFO_HELPER_WITH_RETAIN(cl::CommandQueue)
03883 
03884 #ifdef _WIN32
03885 __declspec(selectany) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
03886 __declspec(selectany) CommandQueue CommandQueue::default_;
03887 __declspec(selectany) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
03888 #else
03889 __attribute__((weak)) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
03890 __attribute__((weak)) CommandQueue CommandQueue::default_;
03891 __attribute__((weak)) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
03892 #endif
03893 
03894 inline cl_int enqueueReadBuffer(
03895     const Buffer& buffer,
03896     cl_bool blocking,
03897     ::size_t offset,
03898     ::size_t size,
03899     void* ptr,
03900     const VECTOR_CLASS<Event>* events = NULL,
03901     Event* event = NULL)
03902 {
03903     cl_int error;
03904     CommandQueue queue = CommandQueue::getDefault(&error);
03905 
03906     if (error != CL_SUCCESS) {
03907         return error;
03908     }
03909 
03910     return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event);
03911 }
03912 
03913 inline cl_int enqueueWriteBuffer(
03914         const Buffer& buffer,
03915         cl_bool blocking,
03916         ::size_t offset,
03917         ::size_t size,
03918         const void* ptr,
03919         const VECTOR_CLASS<Event>* events = NULL,
03920         Event* event = NULL)
03921 {
03922     cl_int error;
03923     CommandQueue queue = CommandQueue::getDefault(&error);
03924 
03925     if (error != CL_SUCCESS) {
03926         return error;
03927     }
03928 
03929     return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event);
03930 }
03931 
03932 inline cl_int enqueueCopyBuffer(
03933         const Buffer& src,
03934         const Buffer& dst,
03935         ::size_t src_offset,
03936         ::size_t dst_offset,
03937         ::size_t size,
03938         const VECTOR_CLASS<Event>* events = NULL,
03939         Event* event = NULL)
03940 {
03941     cl_int error;
03942     CommandQueue queue = CommandQueue::getDefault(&error);
03943 
03944     if (error != CL_SUCCESS) {
03945         return error;
03946     }
03947 
03948     return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event);
03949 }
03950 
03951 #if defined(CL_VERSION_1_1)
03952 inline cl_int enqueueReadBufferRect(
03953     const Buffer& buffer,
03954     cl_bool blocking,
03955     const size_t<3>& buffer_offset,
03956     const size_t<3>& host_offset,
03957     const size_t<3>& region,
03958     ::size_t buffer_row_pitch,
03959     ::size_t buffer_slice_pitch,
03960     ::size_t host_row_pitch,
03961     ::size_t host_slice_pitch,
03962     void *ptr,
03963     const VECTOR_CLASS<Event>* events = NULL,
03964     Event* event = NULL)
03965 {
03966     cl_int error;
03967     CommandQueue queue = CommandQueue::getDefault(&error);
03968 
03969     if (error != CL_SUCCESS) {
03970         return error;
03971     }
03972 
03973     return queue.enqueueReadBufferRect(
03974         buffer, 
03975         blocking, 
03976         buffer_offset, 
03977         host_offset,
03978         region,
03979         buffer_row_pitch,
03980         host_slice_pitch,
03981         host_row_pitch,
03982         host_slice_pitch,
03983         ptr, 
03984         events, 
03985         event);
03986 }
03987 
03988 inline cl_int enqueueWriteBufferRect(
03989     const Buffer& buffer,
03990     cl_bool blocking,
03991     const size_t<3>& buffer_offset,
03992     const size_t<3>& host_offset,
03993     const size_t<3>& region,
03994     ::size_t buffer_row_pitch,
03995     ::size_t buffer_slice_pitch,
03996     ::size_t host_row_pitch,
03997     ::size_t host_slice_pitch,
03998     void *ptr,
03999     const VECTOR_CLASS<Event>* events = NULL,
04000     Event* event = NULL)
04001 {
04002     cl_int error;
04003     CommandQueue queue = CommandQueue::getDefault(&error);
04004 
04005     if (error != CL_SUCCESS) {
04006         return error;
04007     }
04008 
04009     return queue.enqueueWriteBufferRect(
04010         buffer, 
04011         blocking, 
04012         buffer_offset, 
04013         host_offset,
04014         region,
04015         buffer_row_pitch,
04016         buffer_slice_pitch,
04017         host_row_pitch,
04018         host_slice_pitch,
04019         ptr, 
04020         events, 
04021         event);
04022 }
04023 
04024 inline cl_int enqueueCopyBufferRect(
04025     const Buffer& src,
04026     const Buffer& dst,
04027     const size_t<3>& src_origin,
04028     const size_t<3>& dst_origin,
04029     const size_t<3>& region,
04030     ::size_t src_row_pitch,
04031     ::size_t src_slice_pitch,
04032     ::size_t dst_row_pitch,
04033     ::size_t dst_slice_pitch,
04034     const VECTOR_CLASS<Event>* events = NULL,
04035     Event* event = NULL)
04036 {
04037     cl_int error;
04038     CommandQueue queue = CommandQueue::getDefault(&error);
04039 
04040     if (error != CL_SUCCESS) {
04041         return error;
04042     }
04043 
04044     return queue.enqueueCopyBufferRect(
04045         src,
04046         dst,
04047         src_origin,
04048         dst_origin,
04049         region,
04050         src_row_pitch,
04051         src_slice_pitch,
04052         dst_row_pitch,
04053         dst_slice_pitch,
04054         events, 
04055         event);
04056 }
04057 #endif
04058 
04059 inline cl_int enqueueReadImage(
04060     const Image& image,
04061     cl_bool blocking,
04062     const size_t<3>& origin,
04063     const size_t<3>& region,
04064     ::size_t row_pitch,
04065     ::size_t slice_pitch,
04066     void* ptr,
04067     const VECTOR_CLASS<Event>* events = NULL,
04068     Event* event = NULL) 
04069 {
04070     cl_int error;
04071     CommandQueue queue = CommandQueue::getDefault(&error);
04072 
04073     if (error != CL_SUCCESS) {
04074         return error;
04075     }
04076 
04077     return queue.enqueueReadImage(
04078         image,
04079         blocking,
04080         origin,
04081         region,
04082         row_pitch,
04083         slice_pitch,
04084         ptr,
04085         events, 
04086         event);
04087 }
04088 
04089 inline cl_int enqueueWriteImage(
04090     const Image& image,
04091     cl_bool blocking,
04092     const size_t<3>& origin,
04093     const size_t<3>& region,
04094     ::size_t row_pitch,
04095     ::size_t slice_pitch,
04096     void* ptr,
04097     const VECTOR_CLASS<Event>* events = NULL,
04098     Event* event = NULL)
04099 {
04100     cl_int error;
04101     CommandQueue queue = CommandQueue::getDefault(&error);
04102 
04103     if (error != CL_SUCCESS) {
04104         return error;
04105     }
04106 
04107     return queue.enqueueWriteImage(
04108         image,
04109         blocking,
04110         origin,
04111         region,
04112         row_pitch,
04113         slice_pitch,
04114         ptr,
04115         events, 
04116         event);
04117 }
04118 
04119 inline cl_int enqueueCopyImage(
04120     const Image& src,
04121     const Image& dst,
04122     const size_t<3>& src_origin,
04123     const size_t<3>& dst_origin,
04124     const size_t<3>& region,
04125     const VECTOR_CLASS<Event>* events = NULL,
04126     Event* event = NULL)
04127 {
04128     cl_int error;
04129     CommandQueue queue = CommandQueue::getDefault(&error);
04130 
04131     if (error != CL_SUCCESS) {
04132         return error;
04133     }
04134 
04135     return queue.enqueueCopyImage(
04136         src,
04137         dst,
04138         src_origin,
04139         dst_origin,
04140         region,
04141         events,
04142         event);
04143 }
04144 
04145 inline cl_int enqueueCopyImageToBuffer(
04146     const Image& src,
04147     const Buffer& dst,
04148     const size_t<3>& src_origin,
04149     const size_t<3>& region,
04150     ::size_t dst_offset,
04151     const VECTOR_CLASS<Event>* events = NULL,
04152     Event* event = NULL)
04153 {
04154     cl_int error;
04155     CommandQueue queue = CommandQueue::getDefault(&error);
04156 
04157     if (error != CL_SUCCESS) {
04158         return error;
04159     }
04160 
04161     return queue.enqueueCopyImageToBuffer(
04162         src,
04163         dst,
04164         src_origin,
04165         region,
04166         dst_offset,
04167         events,
04168         event);
04169 }
04170 
04171 inline cl_int enqueueCopyBufferToImage(
04172     const Buffer& src,
04173     const Image& dst,
04174     ::size_t src_offset,
04175     const size_t<3>& dst_origin,
04176     const size_t<3>& region,
04177     const VECTOR_CLASS<Event>* events = NULL,
04178     Event* event = NULL)
04179 {
04180     cl_int error;
04181     CommandQueue queue = CommandQueue::getDefault(&error);
04182 
04183     if (error != CL_SUCCESS) {
04184         return error;
04185     }
04186 
04187     return queue.enqueueCopyBufferToImage(
04188         src,
04189         dst,
04190         src_offset,
04191         dst_origin,
04192         region,
04193         events,
04194         event);
04195 }
04196 
04197 
04198 inline cl_int flush(void)
04199 {
04200     cl_int error;
04201     CommandQueue queue = CommandQueue::getDefault(&error);
04202 
04203     if (error != CL_SUCCESS) {
04204         return error;
04205     }
04206 
04207     return queue.flush();
04208 }
04209 
04210 inline cl_int finish(void)
04211 {
04212     cl_int error;
04213     CommandQueue queue = CommandQueue::getDefault(&error);
04214 
04215     if (error != CL_SUCCESS) {
04216         return error;
04217     }
04218 
04219 
04220     return queue.finish();
04221 }
04222 
04223 
04224 // Kernel Functor support
04225 // New interface as of September 2011
04226 // Requires the C++11 std::tr1::function (note do not support TR1)
04227 // Visual Studio 2010 and GCC 4.2
04228 
04229 #if (defined(_WIN32) && (_MSC_VER >= 1600)) || defined(linux) || defined(__APPLE__) || defined(__MACOSX)
04230 struct EnqueueArgs
04231 {
04232     CommandQueue queue_;
04233     NDRange offset_;
04234     NDRange global_;
04235     NDRange local_;
04236 
04237     EnqueueArgs(NDRange global) : 
04238       queue_(CommandQueue::getDefault()),
04239       offset_(NullRange), 
04240       global_(global),
04241       local_(NullRange)
04242     {
04243 
04244     }
04245 
04246     EnqueueArgs(NDRange global, NDRange local) : 
04247       queue_(CommandQueue::getDefault()),
04248       offset_(NullRange), 
04249       global_(global),
04250       local_(local)
04251     {
04252 
04253     }
04254 
04255     EnqueueArgs(NDRange offset, NDRange global, NDRange local) : 
04256       queue_(CommandQueue::getDefault()),
04257       offset_(offset), 
04258       global_(global),
04259       local_(local)
04260     {
04261 
04262     }
04263 
04264     EnqueueArgs(CommandQueue queue, NDRange global) : 
04265       queue_(queue),
04266       offset_(NullRange), 
04267       global_(global),
04268       local_(NullRange)
04269     {
04270 
04271     }
04272 
04273     EnqueueArgs(CommandQueue queue, NDRange global, NDRange local) : 
04274       queue_(queue),
04275       offset_(NullRange), 
04276       global_(global),
04277       local_(local)
04278     {
04279 
04280     }
04281 
04282     EnqueueArgs(CommandQueue queue, NDRange offset, NDRange global, NDRange local) : 
04283       queue_(queue),
04284       offset_(offset), 
04285       global_(global),
04286       local_(local)
04287     {
04288 
04289     }
04290 };
04291 
04292 namespace detail {
04293 
04294 class NullType {};
04295 
04296 template<int index, typename T0>
04297 struct SetArg
04298 {
04299     static void set (Kernel kernel, T0 arg)
04300     {
04301         kernel.setArg(index, arg);
04302     }
04303 };
04304 
04305 
04306 template<int index>
04307 struct SetArg<index, NullType>
04308 {
04309     static void set (Kernel kernel, NullType)
04310     {
04311     }
04312 };
04313 
04314 template<typename T>
04315 struct MoveToDevice
04316 {
04317     static void move(CommandQueue, T)
04318     {
04319     }
04320 };
04321 
04322 
04323 template<typename T>
04324 struct MoveFromDevice
04325 {
04326     static void move(CommandQueue, T)
04327     {
04328     }
04329 };
04330 
04331 
04332 template <
04333    typename T0,   typename T1,   typename T2,   typename T3,
04334    typename T4,   typename T5,   typename T6,   typename T7,
04335    typename T8,   typename T9,   typename T10,   typename T11,
04336    typename T12,   typename T13,   typename T14,   typename T15,
04337    typename T16,   typename T17,   typename T18,   typename T19,
04338    typename T20,   typename T21,   typename T22,   typename T23,
04339    typename T24,   typename T25,   typename T26,   typename T27,
04340    typename T28,   typename T29,   typename T30,   typename T31,
04341    typename T32,   typename T33,   typename T34,   typename T35,
04342    typename T36,   typename T37,   typename T38,   typename T39,
04343    typename T40,   typename T41,   typename T42,   typename T43,
04344    typename T44,   typename T45,   typename T46,   typename T47,
04345    typename T48,   typename T49,   typename T50,   typename T51,
04346    typename T52,   typename T53,   typename T54,   typename T55,
04347    typename T56,   typename T57,   typename T58,   typename T59,
04348    typename T60,   typename T61,   typename T62,   typename T63,
04349    typename T64,   typename T65,   typename T66,   typename T67,
04350    typename T68,   typename T69,   typename T70,   typename T71,
04351    typename T72,   typename T73,   typename T74,   typename T75,
04352    typename T76,   typename T77,   typename T78,   typename T79,
04353    typename T80,   typename T81,   typename T82,   typename T83,
04354    typename T84,   typename T85,   typename T86,   typename T87,
04355    typename T88,   typename T89,   typename T90,   typename T91,
04356    typename T92,   typename T93,   typename T94,   typename T95,
04357    typename T96,   typename T97,   typename T98,   typename T99,
04358    typename T100,   typename T101,   typename T102,   typename T103,
04359    typename T104,   typename T105,   typename T106,   typename T107,
04360    typename T108,   typename T109,   typename T110,   typename T111,
04361    typename T112,   typename T113,   typename T114,   typename T115,
04362    typename T116,   typename T117,   typename T118,   typename T119,
04363    typename T120,   typename T121,   typename T122,   typename T123,
04364    typename T124,   typename T125,   typename T126,   typename T127>
04365 class KernelFunctorGlobal
04366 {
04367 private:
04368     Kernel kernel_;
04369 
04370 public:
04371    KernelFunctorGlobal(
04372         Kernel kernel,
04373         cl_int * err = NULL) :
04374             kernel_(kernel)
04375     {}
04376 
04377    KernelFunctorGlobal(
04378         const Program& program,
04379         const STRING_CLASS name,
04380         cl_int * err = NULL) :
04381             kernel_(program, name.c_str(), err)
04382     {}
04383 
04384     Event operator() (
04385         const EnqueueArgs& args,
04386         T0 t0,
04387         T1 t1 = NullType(),
04388         T2 t2 = NullType(),
04389         T3 t3 = NullType(),
04390         T4 t4 = NullType(),
04391         T5 t5 = NullType(),
04392         T6 t6 = NullType(),
04393         T7 t7 = NullType(),
04394         T8 t8 = NullType(),
04395         T9 t9 = NullType(),
04396         T10 t10 = NullType(),
04397         T11 t11 = NullType(),
04398         T12 t12 = NullType(),
04399         T13 t13 = NullType(),
04400         T14 t14 = NullType(),
04401         T15 t15 = NullType(),
04402         T16 t16 = NullType(),
04403         T17 t17 = NullType(),
04404         T18 t18 = NullType(),
04405         T19 t19 = NullType(),
04406         T20 t20 = NullType(),
04407         T21 t21 = NullType(),
04408         T22 t22 = NullType(),
04409         T23 t23 = NullType(),
04410         T24 t24 = NullType(),
04411         T25 t25 = NullType(),
04412         T26 t26 = NullType(),
04413         T27 t27 = NullType(),
04414         T28 t28 = NullType(),
04415         T29 t29 = NullType(),
04416         T30 t30 = NullType(),
04417         T31 t31 = NullType(),
04418         T32 t32 = NullType(),
04419         T33 t33 = NullType(),
04420         T34 t34 = NullType(),
04421         T35 t35 = NullType(),
04422         T36 t36 = NullType(),
04423         T37 t37 = NullType(),
04424         T38 t38 = NullType(),
04425         T39 t39 = NullType(),
04426         T40 t40 = NullType(),
04427         T41 t41 = NullType(),
04428         T42 t42 = NullType(),
04429         T43 t43 = NullType(),
04430         T44 t44 = NullType(),
04431         T45 t45 = NullType(),
04432         T46 t46 = NullType(),
04433         T47 t47 = NullType(),
04434         T48 t48 = NullType(),
04435         T49 t49 = NullType(),
04436         T50 t50 = NullType(),
04437         T51 t51 = NullType(),
04438         T52 t52 = NullType(),
04439         T53 t53 = NullType(),
04440         T54 t54 = NullType(),
04441         T55 t55 = NullType(),
04442         T56 t56 = NullType(),
04443         T57 t57 = NullType(),
04444         T58 t58 = NullType(),
04445         T59 t59 = NullType(),
04446         T60 t60 = NullType(),
04447         T61 t61 = NullType(),
04448         T62 t62 = NullType(),
04449         T63 t63 = NullType(),
04450         T64 t64 = NullType(),
04451         T65 t65 = NullType(),
04452         T66 t66 = NullType(),
04453         T67 t67 = NullType(),
04454         T68 t68 = NullType(),
04455         T69 t69 = NullType(),
04456         T70 t70 = NullType(),
04457         T71 t71 = NullType(),
04458         T72 t72 = NullType(),
04459         T73 t73 = NullType(),
04460         T74 t74 = NullType(),
04461         T75 t75 = NullType(),
04462         T76 t76 = NullType(),
04463         T77 t77 = NullType(),
04464         T78 t78 = NullType(),
04465         T79 t79 = NullType(),
04466         T80 t80 = NullType(),
04467         T81 t81 = NullType(),
04468         T82 t82 = NullType(),
04469         T83 t83 = NullType(),
04470         T84 t84 = NullType(),
04471         T85 t85 = NullType(),
04472         T86 t86 = NullType(),
04473         T87 t87 = NullType(),
04474         T88 t88 = NullType(),
04475         T89 t89 = NullType(),
04476         T90 t90 = NullType(),
04477         T91 t91 = NullType(),
04478         T92 t92 = NullType(),
04479         T93 t93 = NullType(),
04480         T94 t94 = NullType(),
04481         T95 t95 = NullType(),
04482         T96 t96 = NullType(),
04483         T97 t97 = NullType(),
04484         T98 t98 = NullType(),
04485         T99 t99 = NullType(),
04486         T100 t100 = NullType(),
04487         T101 t101 = NullType(),
04488         T102 t102 = NullType(),
04489         T103 t103 = NullType(),
04490         T104 t104 = NullType(),
04491         T105 t105 = NullType(),
04492         T106 t106 = NullType(),
04493         T107 t107 = NullType(),
04494         T108 t108 = NullType(),
04495         T109 t109 = NullType(),
04496         T110 t110 = NullType(),
04497         T111 t111 = NullType(),
04498         T112 t112 = NullType(),
04499         T113 t113 = NullType(),
04500         T114 t114 = NullType(),
04501         T115 t115 = NullType(),
04502         T116 t116 = NullType(),
04503         T117 t117 = NullType(),
04504         T118 t118 = NullType(),
04505         T119 t119 = NullType(),
04506         T120 t120 = NullType(),
04507         T121 t121 = NullType(),
04508         T122 t122 = NullType(),
04509         T123 t123 = NullType(),
04510         T124 t124 = NullType(),
04511         T125 t125 = NullType(),
04512         T126 t126 = NullType(),
04513         T127 t127 = NullType())
04514     {
04515         Event event;
04516         SetArg<0, T0>::set(kernel_, t0);
04517         SetArg<1, T1>::set(kernel_, t1);
04518         SetArg<2, T2>::set(kernel_, t2);
04519         SetArg<3, T3>::set(kernel_, t3);
04520         SetArg<4, T4>::set(kernel_, t4);
04521         SetArg<5, T5>::set(kernel_, t5);
04522         SetArg<6, T6>::set(kernel_, t6);
04523         SetArg<7, T7>::set(kernel_, t7);
04524         SetArg<8, T8>::set(kernel_, t8);
04525         SetArg<9, T9>::set(kernel_, t9);
04526         SetArg<10, T10>::set(kernel_, t10);
04527         SetArg<11, T11>::set(kernel_, t11);
04528         SetArg<12, T12>::set(kernel_, t12);
04529         SetArg<13, T13>::set(kernel_, t13);
04530         SetArg<14, T14>::set(kernel_, t14);
04531         SetArg<15, T15>::set(kernel_, t15);
04532         SetArg<16, T16>::set(kernel_, t16);
04533         SetArg<17, T17>::set(kernel_, t17);
04534         SetArg<18, T18>::set(kernel_, t18);
04535         SetArg<19, T19>::set(kernel_, t19);
04536         SetArg<20, T20>::set(kernel_, t20);
04537         SetArg<21, T21>::set(kernel_, t21);
04538         SetArg<22, T22>::set(kernel_, t22);
04539         SetArg<23, T23>::set(kernel_, t23);
04540         SetArg<24, T24>::set(kernel_, t24);
04541         SetArg<25, T25>::set(kernel_, t25);
04542         SetArg<26, T26>::set(kernel_, t26);
04543         SetArg<27, T27>::set(kernel_, t27);
04544         SetArg<28, T28>::set(kernel_, t28);
04545         SetArg<29, T29>::set(kernel_, t29);
04546         SetArg<30, T30>::set(kernel_, t30);
04547         SetArg<31, T31>::set(kernel_, t31);
04548         SetArg<32, T32>::set(kernel_, t32);
04549         SetArg<33, T33>::set(kernel_, t33);
04550         SetArg<34, T34>::set(kernel_, t34);
04551         SetArg<35, T35>::set(kernel_, t35);
04552         SetArg<36, T36>::set(kernel_, t36);
04553         SetArg<37, T37>::set(kernel_, t37);
04554         SetArg<38, T38>::set(kernel_, t38);
04555         SetArg<39, T39>::set(kernel_, t39);
04556         SetArg<40, T40>::set(kernel_, t40);
04557         SetArg<41, T41>::set(kernel_, t41);
04558         SetArg<42, T42>::set(kernel_, t42);
04559         SetArg<43, T43>::set(kernel_, t43);
04560         SetArg<44, T44>::set(kernel_, t44);
04561         SetArg<45, T45>::set(kernel_, t45);
04562         SetArg<46, T46>::set(kernel_, t46);
04563         SetArg<47, T47>::set(kernel_, t47);
04564         SetArg<48, T48>::set(kernel_, t48);
04565         SetArg<49, T49>::set(kernel_, t49);
04566         SetArg<50, T50>::set(kernel_, t50);
04567         SetArg<51, T51>::set(kernel_, t51);
04568         SetArg<52, T52>::set(kernel_, t52);
04569         SetArg<53, T53>::set(kernel_, t53);
04570         SetArg<54, T54>::set(kernel_, t54);
04571         SetArg<55, T55>::set(kernel_, t55);
04572         SetArg<56, T56>::set(kernel_, t56);
04573         SetArg<57, T57>::set(kernel_, t57);
04574         SetArg<58, T58>::set(kernel_, t58);
04575         SetArg<59, T59>::set(kernel_, t59);
04576         SetArg<60, T60>::set(kernel_, t60);
04577         SetArg<61, T61>::set(kernel_, t61);
04578         SetArg<62, T62>::set(kernel_, t62);
04579         SetArg<63, T63>::set(kernel_, t63);
04580         SetArg<64, T64>::set(kernel_, t64);
04581         SetArg<65, T65>::set(kernel_, t65);
04582         SetArg<66, T66>::set(kernel_, t66);
04583         SetArg<67, T67>::set(kernel_, t67);
04584         SetArg<68, T68>::set(kernel_, t68);
04585         SetArg<69, T69>::set(kernel_, t69);
04586         SetArg<70, T70>::set(kernel_, t70);
04587         SetArg<71, T71>::set(kernel_, t71);
04588         SetArg<72, T72>::set(kernel_, t72);
04589         SetArg<73, T73>::set(kernel_, t73);
04590         SetArg<74, T74>::set(kernel_, t74);
04591         SetArg<75, T75>::set(kernel_, t75);
04592         SetArg<76, T76>::set(kernel_, t76);
04593         SetArg<77, T77>::set(kernel_, t77);
04594         SetArg<78, T78>::set(kernel_, t78);
04595         SetArg<79, T79>::set(kernel_, t79);
04596         SetArg<80, T80>::set(kernel_, t80);
04597         SetArg<81, T81>::set(kernel_, t81);
04598         SetArg<82, T82>::set(kernel_, t82);
04599         SetArg<83, T83>::set(kernel_, t83);
04600         SetArg<84, T84>::set(kernel_, t84);
04601         SetArg<85, T85>::set(kernel_, t85);
04602         SetArg<86, T86>::set(kernel_, t86);
04603         SetArg<87, T87>::set(kernel_, t87);
04604         SetArg<88, T88>::set(kernel_, t88);
04605         SetArg<89, T89>::set(kernel_, t89);
04606         SetArg<90, T90>::set(kernel_, t90);
04607         SetArg<91, T91>::set(kernel_, t91);
04608         SetArg<92, T92>::set(kernel_, t92);
04609         SetArg<93, T93>::set(kernel_, t93);
04610         SetArg<94, T94>::set(kernel_, t94);
04611         SetArg<95, T95>::set(kernel_, t95);
04612         SetArg<96, T96>::set(kernel_, t96);
04613         SetArg<97, T97>::set(kernel_, t97);
04614         SetArg<98, T98>::set(kernel_, t98);
04615         SetArg<99, T99>::set(kernel_, t99);
04616         SetArg<100, T100>::set(kernel_, t100);
04617         SetArg<101, T101>::set(kernel_, t101);
04618         SetArg<102, T102>::set(kernel_, t102);
04619         SetArg<103, T103>::set(kernel_, t103);
04620         SetArg<104, T104>::set(kernel_, t104);
04621         SetArg<105, T105>::set(kernel_, t105);
04622         SetArg<106, T106>::set(kernel_, t106);
04623         SetArg<107, T107>::set(kernel_, t107);
04624         SetArg<108, T108>::set(kernel_, t108);
04625         SetArg<109, T109>::set(kernel_, t109);
04626         SetArg<110, T110>::set(kernel_, t110);
04627         SetArg<111, T111>::set(kernel_, t111);
04628         SetArg<112, T112>::set(kernel_, t112);
04629         SetArg<113, T113>::set(kernel_, t113);
04630         SetArg<114, T114>::set(kernel_, t114);
04631         SetArg<115, T115>::set(kernel_, t115);
04632         SetArg<116, T116>::set(kernel_, t116);
04633         SetArg<117, T117>::set(kernel_, t117);
04634         SetArg<118, T118>::set(kernel_, t118);
04635         SetArg<119, T119>::set(kernel_, t119);
04636         SetArg<120, T120>::set(kernel_, t120);
04637         SetArg<121, T121>::set(kernel_, t121);
04638         SetArg<122, T122>::set(kernel_, t122);
04639         SetArg<123, T123>::set(kernel_, t123);
04640         SetArg<124, T124>::set(kernel_, t124);
04641         SetArg<125, T125>::set(kernel_, t125);
04642         SetArg<126, T126>::set(kernel_, t126);
04643         SetArg<127, T127>::set(kernel_, t127);
04644 
04645         // Move any arguments that need moving
04646         MoveToDevice<T0>::move(args.queue_, t0);
04647         MoveToDevice<T1>::move(args.queue_, t1);
04648         MoveToDevice<T2>::move(args.queue_, t2);
04649         MoveToDevice<T3>::move(args.queue_, t3);
04650         MoveToDevice<T4>::move(args.queue_, t4);
04651         MoveToDevice<T5>::move(args.queue_, t5);
04652         MoveToDevice<T6>::move(args.queue_, t6);
04653         MoveToDevice<T7>::move(args.queue_, t7);
04654         MoveToDevice<T8>::move(args.queue_, t8);
04655         MoveToDevice<T9>::move(args.queue_, t9);
04656         MoveToDevice<T10>::move(args.queue_, t10);
04657         MoveToDevice<T11>::move(args.queue_, t11);
04658         MoveToDevice<T12>::move(args.queue_, t12);
04659         MoveToDevice<T13>::move(args.queue_, t13);
04660         MoveToDevice<T14>::move(args.queue_, t14);
04661         MoveToDevice<T15>::move(args.queue_, t15);
04662         MoveToDevice<T16>::move(args.queue_, t16);
04663         MoveToDevice<T17>::move(args.queue_, t17);
04664         MoveToDevice<T18>::move(args.queue_, t18);
04665         MoveToDevice<T19>::move(args.queue_, t19);
04666         MoveToDevice<T20>::move(args.queue_, t20);
04667         MoveToDevice<T21>::move(args.queue_, t21);
04668         MoveToDevice<T22>::move(args.queue_, t22);
04669         MoveToDevice<T23>::move(args.queue_, t23);
04670         MoveToDevice<T24>::move(args.queue_, t24);
04671         MoveToDevice<T25>::move(args.queue_, t25);
04672         MoveToDevice<T26>::move(args.queue_, t26);
04673         MoveToDevice<T27>::move(args.queue_, t27);
04674         MoveToDevice<T28>::move(args.queue_, t28);
04675         MoveToDevice<T29>::move(args.queue_, t29);
04676         MoveToDevice<T30>::move(args.queue_, t30);
04677         MoveToDevice<T31>::move(args.queue_, t31);
04678         MoveToDevice<T32>::move(args.queue_, t32);
04679         MoveToDevice<T33>::move(args.queue_, t33);
04680         MoveToDevice<T34>::move(args.queue_, t34);
04681         MoveToDevice<T35>::move(args.queue_, t35);
04682         MoveToDevice<T36>::move(args.queue_, t36);
04683         MoveToDevice<T37>::move(args.queue_, t37);
04684         MoveToDevice<T38>::move(args.queue_, t38);
04685         MoveToDevice<T39>::move(args.queue_, t39);
04686         MoveToDevice<T40>::move(args.queue_, t40);
04687         MoveToDevice<T41>::move(args.queue_, t41);
04688         MoveToDevice<T42>::move(args.queue_, t42);
04689         MoveToDevice<T43>::move(args.queue_, t43);
04690         MoveToDevice<T44>::move(args.queue_, t44);
04691         MoveToDevice<T45>::move(args.queue_, t45);
04692         MoveToDevice<T46>::move(args.queue_, t46);
04693         MoveToDevice<T47>::move(args.queue_, t47);
04694         MoveToDevice<T48>::move(args.queue_, t48);
04695         MoveToDevice<T49>::move(args.queue_, t49);
04696         MoveToDevice<T50>::move(args.queue_, t50);
04697         MoveToDevice<T51>::move(args.queue_, t51);
04698         MoveToDevice<T52>::move(args.queue_, t52);
04699         MoveToDevice<T53>::move(args.queue_, t53);
04700         MoveToDevice<T54>::move(args.queue_, t54);
04701         MoveToDevice<T55>::move(args.queue_, t55);
04702         MoveToDevice<T56>::move(args.queue_, t56);
04703         MoveToDevice<T57>::move(args.queue_, t57);
04704         MoveToDevice<T58>::move(args.queue_, t58);
04705         MoveToDevice<T59>::move(args.queue_, t59);
04706         MoveToDevice<T60>::move(args.queue_, t60);
04707         MoveToDevice<T61>::move(args.queue_, t61);
04708         MoveToDevice<T62>::move(args.queue_, t62);
04709         MoveToDevice<T63>::move(args.queue_, t63);
04710         MoveToDevice<T64>::move(args.queue_, t64);
04711         MoveToDevice<T65>::move(args.queue_, t65);
04712         MoveToDevice<T66>::move(args.queue_, t66);
04713         MoveToDevice<T67>::move(args.queue_, t67);
04714         MoveToDevice<T68>::move(args.queue_, t68);
04715         MoveToDevice<T69>::move(args.queue_, t69);
04716         MoveToDevice<T70>::move(args.queue_, t70);
04717         MoveToDevice<T71>::move(args.queue_, t71);
04718         MoveToDevice<T72>::move(args.queue_, t72);
04719         MoveToDevice<T73>::move(args.queue_, t73);
04720         MoveToDevice<T74>::move(args.queue_, t74);
04721         MoveToDevice<T75>::move(args.queue_, t75);
04722         MoveToDevice<T76>::move(args.queue_, t76);
04723         MoveToDevice<T77>::move(args.queue_, t77);
04724         MoveToDevice<T78>::move(args.queue_, t78);
04725         MoveToDevice<T79>::move(args.queue_, t79);
04726         MoveToDevice<T80>::move(args.queue_, t80);
04727         MoveToDevice<T81>::move(args.queue_, t81);
04728         MoveToDevice<T82>::move(args.queue_, t82);
04729         MoveToDevice<T83>::move(args.queue_, t83);
04730         MoveToDevice<T84>::move(args.queue_, t84);
04731         MoveToDevice<T85>::move(args.queue_, t85);
04732         MoveToDevice<T86>::move(args.queue_, t86);
04733         MoveToDevice<T87>::move(args.queue_, t87);
04734         MoveToDevice<T88>::move(args.queue_, t88);
04735         MoveToDevice<T89>::move(args.queue_, t89);
04736         MoveToDevice<T90>::move(args.queue_, t90);
04737         MoveToDevice<T91>::move(args.queue_, t91);
04738         MoveToDevice<T92>::move(args.queue_, t92);
04739         MoveToDevice<T93>::move(args.queue_, t93);
04740         MoveToDevice<T94>::move(args.queue_, t94);
04741         MoveToDevice<T95>::move(args.queue_, t95);
04742         MoveToDevice<T96>::move(args.queue_, t96);
04743         MoveToDevice<T97>::move(args.queue_, t97);
04744         MoveToDevice<T98>::move(args.queue_, t98);
04745         MoveToDevice<T99>::move(args.queue_, t99);
04746         MoveToDevice<T100>::move(args.queue_, t100);
04747         MoveToDevice<T101>::move(args.queue_, t101);
04748         MoveToDevice<T102>::move(args.queue_, t102);
04749         MoveToDevice<T103>::move(args.queue_, t103);
04750         MoveToDevice<T104>::move(args.queue_, t104);
04751         MoveToDevice<T105>::move(args.queue_, t105);
04752         MoveToDevice<T106>::move(args.queue_, t106);
04753         MoveToDevice<T107>::move(args.queue_, t107);
04754         MoveToDevice<T108>::move(args.queue_, t108);
04755         MoveToDevice<T109>::move(args.queue_, t109);
04756         MoveToDevice<T110>::move(args.queue_, t110);
04757         MoveToDevice<T111>::move(args.queue_, t111);
04758         MoveToDevice<T112>::move(args.queue_, t112);
04759         MoveToDevice<T113>::move(args.queue_, t113);
04760         MoveToDevice<T114>::move(args.queue_, t114);
04761         MoveToDevice<T115>::move(args.queue_, t115);
04762         MoveToDevice<T116>::move(args.queue_, t116);
04763         MoveToDevice<T117>::move(args.queue_, t117);
04764         MoveToDevice<T118>::move(args.queue_, t118);
04765         MoveToDevice<T119>::move(args.queue_, t119);
04766         MoveToDevice<T120>::move(args.queue_, t120);
04767         MoveToDevice<T121>::move(args.queue_, t121);
04768         MoveToDevice<T122>::move(args.queue_, t122);
04769         MoveToDevice<T123>::move(args.queue_, t123);
04770         MoveToDevice<T124>::move(args.queue_, t124);
04771         MoveToDevice<T125>::move(args.queue_, t125);
04772         MoveToDevice<T126>::move(args.queue_, t126);
04773         MoveToDevice<T127>::move(args.queue_, t127);
04774 
04775         args.queue_.enqueueNDRangeKernel(
04776             kernel_,
04777             args.offset_,
04778             args.global_,
04779             args.local_,
04780             NULL,
04781             &event);
04782 
04783         // Move any arguments that need moving
04784         MoveFromDevice<T0>::move(args.queue_, t0);
04785         MoveFromDevice<T1>::move(args.queue_, t1);
04786         MoveFromDevice<T2>::move(args.queue_, t2);
04787         MoveFromDevice<T3>::move(args.queue_, t3);
04788         MoveFromDevice<T4>::move(args.queue_, t4);
04789         MoveFromDevice<T5>::move(args.queue_, t5);
04790         MoveFromDevice<T6>::move(args.queue_, t6);
04791         MoveFromDevice<T7>::move(args.queue_, t7);
04792         MoveFromDevice<T8>::move(args.queue_, t8);
04793         MoveFromDevice<T9>::move(args.queue_, t9);
04794         MoveFromDevice<T10>::move(args.queue_, t10);
04795         MoveFromDevice<T11>::move(args.queue_, t11);
04796         MoveFromDevice<T12>::move(args.queue_, t12);
04797         MoveFromDevice<T13>::move(args.queue_, t13);
04798         MoveFromDevice<T14>::move(args.queue_, t14);
04799         MoveFromDevice<T15>::move(args.queue_, t15);
04800         MoveFromDevice<T16>::move(args.queue_, t16);
04801         MoveFromDevice<T17>::move(args.queue_, t17);
04802         MoveFromDevice<T18>::move(args.queue_, t18);
04803         MoveFromDevice<T19>::move(args.queue_, t19);
04804         MoveFromDevice<T20>::move(args.queue_, t20);
04805         MoveFromDevice<T21>::move(args.queue_, t21);
04806         MoveFromDevice<T22>::move(args.queue_, t22);
04807         MoveFromDevice<T23>::move(args.queue_, t23);
04808         MoveFromDevice<T24>::move(args.queue_, t24);
04809         MoveFromDevice<T25>::move(args.queue_, t25);
04810         MoveFromDevice<T26>::move(args.queue_, t26);
04811         MoveFromDevice<T27>::move(args.queue_, t27);
04812         MoveFromDevice<T28>::move(args.queue_, t28);
04813         MoveFromDevice<T29>::move(args.queue_, t29);
04814         MoveFromDevice<T30>::move(args.queue_, t30);
04815         MoveFromDevice<T31>::move(args.queue_, t31);
04816         MoveFromDevice<T32>::move(args.queue_, t32);
04817         MoveFromDevice<T33>::move(args.queue_, t33);
04818         MoveFromDevice<T34>::move(args.queue_, t34);
04819         MoveFromDevice<T35>::move(args.queue_, t35);
04820         MoveFromDevice<T36>::move(args.queue_, t36);
04821         MoveFromDevice<T37>::move(args.queue_, t37);
04822         MoveFromDevice<T38>::move(args.queue_, t38);
04823         MoveFromDevice<T39>::move(args.queue_, t39);
04824         MoveFromDevice<T40>::move(args.queue_, t40);
04825         MoveFromDevice<T41>::move(args.queue_, t41);
04826         MoveFromDevice<T42>::move(args.queue_, t42);
04827         MoveFromDevice<T43>::move(args.queue_, t43);
04828         MoveFromDevice<T44>::move(args.queue_, t44);
04829         MoveFromDevice<T45>::move(args.queue_, t45);
04830         MoveFromDevice<T46>::move(args.queue_, t46);
04831         MoveFromDevice<T47>::move(args.queue_, t47);
04832         MoveFromDevice<T48>::move(args.queue_, t48);
04833         MoveFromDevice<T49>::move(args.queue_, t49);
04834         MoveFromDevice<T50>::move(args.queue_, t50);
04835         MoveFromDevice<T51>::move(args.queue_, t51);
04836         MoveFromDevice<T52>::move(args.queue_, t52);
04837         MoveFromDevice<T53>::move(args.queue_, t53);
04838         MoveFromDevice<T54>::move(args.queue_, t54);
04839         MoveFromDevice<T55>::move(args.queue_, t55);
04840         MoveFromDevice<T56>::move(args.queue_, t56);
04841         MoveFromDevice<T57>::move(args.queue_, t57);
04842         MoveFromDevice<T58>::move(args.queue_, t58);
04843         MoveFromDevice<T59>::move(args.queue_, t59);
04844         MoveFromDevice<T60>::move(args.queue_, t60);
04845         MoveFromDevice<T61>::move(args.queue_, t61);
04846         MoveFromDevice<T62>::move(args.queue_, t62);
04847         MoveFromDevice<T63>::move(args.queue_, t63);
04848         MoveFromDevice<T64>::move(args.queue_, t64);
04849         MoveFromDevice<T65>::move(args.queue_, t65);
04850         MoveFromDevice<T66>::move(args.queue_, t66);
04851         MoveFromDevice<T67>::move(args.queue_, t67);
04852         MoveFromDevice<T68>::move(args.queue_, t68);
04853         MoveFromDevice<T69>::move(args.queue_, t69);
04854         MoveFromDevice<T70>::move(args.queue_, t70);
04855         MoveFromDevice<T71>::move(args.queue_, t71);
04856         MoveFromDevice<T72>::move(args.queue_, t72);
04857         MoveFromDevice<T73>::move(args.queue_, t73);
04858         MoveFromDevice<T74>::move(args.queue_, t74);
04859         MoveFromDevice<T75>::move(args.queue_, t75);
04860         MoveFromDevice<T76>::move(args.queue_, t76);
04861         MoveFromDevice<T77>::move(args.queue_, t77);
04862         MoveFromDevice<T78>::move(args.queue_, t78);
04863         MoveFromDevice<T79>::move(args.queue_, t79);
04864         MoveFromDevice<T80>::move(args.queue_, t80);
04865         MoveFromDevice<T81>::move(args.queue_, t81);
04866         MoveFromDevice<T82>::move(args.queue_, t82);
04867         MoveFromDevice<T83>::move(args.queue_, t83);
04868         MoveFromDevice<T84>::move(args.queue_, t84);
04869         MoveFromDevice<T85>::move(args.queue_, t85);
04870         MoveFromDevice<T86>::move(args.queue_, t86);
04871         MoveFromDevice<T87>::move(args.queue_, t87);
04872         MoveFromDevice<T88>::move(args.queue_, t88);
04873         MoveFromDevice<T89>::move(args.queue_, t89);
04874         MoveFromDevice<T90>::move(args.queue_, t90);
04875         MoveFromDevice<T91>::move(args.queue_, t91);
04876         MoveFromDevice<T92>::move(args.queue_, t92);
04877         MoveFromDevice<T93>::move(args.queue_, t93);
04878         MoveFromDevice<T94>::move(args.queue_, t94);
04879         MoveFromDevice<T95>::move(args.queue_, t95);
04880         MoveFromDevice<T96>::move(args.queue_, t96);
04881         MoveFromDevice<T97>::move(args.queue_, t97);
04882         MoveFromDevice<T98>::move(args.queue_, t98);
04883         MoveFromDevice<T99>::move(args.queue_, t99);
04884         MoveFromDevice<T100>::move(args.queue_, t100);
04885         MoveFromDevice<T101>::move(args.queue_, t101);
04886         MoveFromDevice<T102>::move(args.queue_, t102);
04887         MoveFromDevice<T103>::move(args.queue_, t103);
04888         MoveFromDevice<T104>::move(args.queue_, t104);
04889         MoveFromDevice<T105>::move(args.queue_, t105);
04890         MoveFromDevice<T106>::move(args.queue_, t106);
04891         MoveFromDevice<T107>::move(args.queue_, t107);
04892         MoveFromDevice<T108>::move(args.queue_, t108);
04893         MoveFromDevice<T109>::move(args.queue_, t109);
04894         MoveFromDevice<T110>::move(args.queue_, t110);
04895         MoveFromDevice<T111>::move(args.queue_, t111);
04896         MoveFromDevice<T112>::move(args.queue_, t112);
04897         MoveFromDevice<T113>::move(args.queue_, t113);
04898         MoveFromDevice<T114>::move(args.queue_, t114);
04899         MoveFromDevice<T115>::move(args.queue_, t115);
04900         MoveFromDevice<T116>::move(args.queue_, t116);
04901         MoveFromDevice<T117>::move(args.queue_, t117);
04902         MoveFromDevice<T118>::move(args.queue_, t118);
04903         MoveFromDevice<T119>::move(args.queue_, t119);
04904         MoveFromDevice<T120>::move(args.queue_, t120);
04905         MoveFromDevice<T121>::move(args.queue_, t121);
04906         MoveFromDevice<T122>::move(args.queue_, t122);
04907         MoveFromDevice<T123>::move(args.queue_, t123);
04908         MoveFromDevice<T124>::move(args.queue_, t124);
04909         MoveFromDevice<T125>::move(args.queue_, t125);
04910         MoveFromDevice<T126>::move(args.queue_, t126);
04911         MoveFromDevice<T127>::move(args.queue_, t127);
04912 
04913         return event;
04914     }
04915 
04916     Event operator() (
04917         const EnqueueArgs& args,
04918         const Event& waitEvent,
04919         T0 t0,
04920         T1 t1 = NullType(),
04921         T2 t2 = NullType(),
04922         T3 t3 = NullType(),
04923         T4 t4 = NullType(),
04924         T5 t5 = NullType(),
04925         T6 t6 = NullType(),
04926         T7 t7 = NullType(),
04927         T8 t8 = NullType(),
04928         T9 t9 = NullType(),
04929         T10 t10 = NullType(),
04930         T11 t11 = NullType(),
04931         T12 t12 = NullType(),
04932         T13 t13 = NullType(),
04933         T14 t14 = NullType(),
04934         T15 t15 = NullType(),
04935         T16 t16 = NullType(),
04936         T17 t17 = NullType(),
04937         T18 t18 = NullType(),
04938         T19 t19 = NullType(),
04939         T20 t20 = NullType(),
04940         T21 t21 = NullType(),
04941         T22 t22 = NullType(),
04942         T23 t23 = NullType(),
04943         T24 t24 = NullType(),
04944         T25 t25 = NullType(),
04945         T26 t26 = NullType(),
04946         T27 t27 = NullType(),
04947         T28 t28 = NullType(),
04948         T29 t29 = NullType(),
04949         T30 t30 = NullType(),
04950         T31 t31 = NullType(),
04951         T32 t32 = NullType(),
04952         T33 t33 = NullType(),
04953         T34 t34 = NullType(),
04954         T35 t35 = NullType(),
04955         T36 t36 = NullType(),
04956         T37 t37 = NullType(),
04957         T38 t38 = NullType(),
04958         T39 t39 = NullType(),
04959         T40 t40 = NullType(),
04960         T41 t41 = NullType(),
04961         T42 t42 = NullType(),
04962         T43 t43 = NullType(),
04963         T44 t44 = NullType(),
04964         T45 t45 = NullType(),
04965         T46 t46 = NullType(),
04966         T47 t47 = NullType(),
04967         T48 t48 = NullType(),
04968         T49 t49 = NullType(),
04969         T50 t50 = NullType(),
04970         T51 t51 = NullType(),
04971         T52 t52 = NullType(),
04972         T53 t53 = NullType(),
04973         T54 t54 = NullType(),
04974         T55 t55 = NullType(),
04975         T56 t56 = NullType(),
04976         T57 t57 = NullType(),
04977         T58 t58 = NullType(),
04978         T59 t59 = NullType(),
04979         T60 t60 = NullType(),
04980         T61 t61 = NullType(),
04981         T62 t62 = NullType(),
04982         T63 t63 = NullType(),
04983         T64 t64 = NullType(),
04984         T65 t65 = NullType(),
04985         T66 t66 = NullType(),
04986         T67 t67 = NullType(),
04987         T68 t68 = NullType(),
04988         T69 t69 = NullType(),
04989         T70 t70 = NullType(),
04990         T71 t71 = NullType(),
04991         T72 t72 = NullType(),
04992         T73 t73 = NullType(),
04993         T74 t74 = NullType(),
04994         T75 t75 = NullType(),
04995         T76 t76 = NullType(),
04996         T77 t77 = NullType(),
04997         T78 t78 = NullType(),
04998         T79 t79 = NullType(),
04999         T80 t80 = NullType(),
05000         T81 t81 = NullType(),
05001         T82 t82 = NullType(),
05002         T83 t83 = NullType(),
05003         T84 t84 = NullType(),
05004         T85 t85 = NullType(),
05005         T86 t86 = NullType(),
05006         T87 t87 = NullType(),
05007         T88 t88 = NullType(),
05008         T89 t89 = NullType(),
05009         T90 t90 = NullType(),
05010         T91 t91 = NullType(),
05011         T92 t92 = NullType(),
05012         T93 t93 = NullType(),
05013         T94 t94 = NullType(),
05014         T95 t95 = NullType(),
05015         T96 t96 = NullType(),
05016         T97 t97 = NullType(),
05017         T98 t98 = NullType(),
05018         T99 t99 = NullType(),
05019         T100 t100 = NullType(),
05020         T101 t101 = NullType(),
05021         T102 t102 = NullType(),
05022         T103 t103 = NullType(),
05023         T104 t104 = NullType(),
05024         T105 t105 = NullType(),
05025         T106 t106 = NullType(),
05026         T107 t107 = NullType(),
05027         T108 t108 = NullType(),
05028         T109 t109 = NullType(),
05029         T110 t110 = NullType(),
05030         T111 t111 = NullType(),
05031         T112 t112 = NullType(),
05032         T113 t113 = NullType(),
05033         T114 t114 = NullType(),
05034         T115 t115 = NullType(),
05035         T116 t116 = NullType(),
05036         T117 t117 = NullType(),
05037         T118 t118 = NullType(),
05038         T119 t119 = NullType(),
05039         T120 t120 = NullType(),
05040         T121 t121 = NullType(),
05041         T122 t122 = NullType(),
05042         T123 t123 = NullType(),
05043         T124 t124 = NullType(),
05044         T125 t125 = NullType(),
05045         T126 t126 = NullType(),
05046         T127 t127 = NullType())
05047     {
05048         Event event;
05049         SetArg<0, T0>::set(kernel_, t0);
05050         SetArg<1, T1>::set(kernel_, t1);
05051         SetArg<2, T2>::set(kernel_, t2);
05052         SetArg<3, T3>::set(kernel_, t3);
05053         SetArg<4, T4>::set(kernel_, t4);
05054         SetArg<5, T5>::set(kernel_, t5);
05055         SetArg<6, T6>::set(kernel_, t6);
05056         SetArg<7, T7>::set(kernel_, t7);
05057         SetArg<8, T8>::set(kernel_, t8);
05058         SetArg<9, T9>::set(kernel_, t9);
05059         SetArg<10, T10>::set(kernel_, t10);
05060         SetArg<11, T11>::set(kernel_, t11);
05061         SetArg<12, T12>::set(kernel_, t12);
05062         SetArg<13, T13>::set(kernel_, t13);
05063         SetArg<14, T14>::set(kernel_, t14);
05064         SetArg<15, T15>::set(kernel_, t15);
05065         SetArg<16, T16>::set(kernel_, t16);
05066         SetArg<17, T17>::set(kernel_, t17);
05067         SetArg<18, T18>::set(kernel_, t18);
05068         SetArg<19, T19>::set(kernel_, t19);
05069         SetArg<20, T20>::set(kernel_, t20);
05070         SetArg<21, T21>::set(kernel_, t21);
05071         SetArg<22, T22>::set(kernel_, t22);
05072         SetArg<23, T23>::set(kernel_, t23);
05073         SetArg<24, T24>::set(kernel_, t24);
05074         SetArg<25, T25>::set(kernel_, t25);
05075         SetArg<26, T26>::set(kernel_, t26);
05076         SetArg<27, T27>::set(kernel_, t27);
05077         SetArg<28, T28>::set(kernel_, t28);
05078         SetArg<29, T29>::set(kernel_, t29);
05079         SetArg<30, T30>::set(kernel_, t30);
05080         SetArg<31, T31>::set(kernel_, t31);
05081         SetArg<32, T32>::set(kernel_, t32);
05082         SetArg<33, T33>::set(kernel_, t33);
05083         SetArg<34, T34>::set(kernel_, t34);
05084         SetArg<35, T35>::set(kernel_, t35);
05085         SetArg<36, T36>::set(kernel_, t36);
05086         SetArg<37, T37>::set(kernel_, t37);
05087         SetArg<38, T38>::set(kernel_, t38);
05088         SetArg<39, T39>::set(kernel_, t39);
05089         SetArg<40, T40>::set(kernel_, t40);
05090         SetArg<41, T41>::set(kernel_, t41);
05091         SetArg<42, T42>::set(kernel_, t42);
05092         SetArg<43, T43>::set(kernel_, t43);
05093         SetArg<44, T44>::set(kernel_, t44);
05094         SetArg<45, T45>::set(kernel_, t45);
05095         SetArg<46, T46>::set(kernel_, t46);
05096         SetArg<47, T47>::set(kernel_, t47);
05097         SetArg<48, T48>::set(kernel_, t48);
05098         SetArg<49, T49>::set(kernel_, t49);
05099         SetArg<50, T50>::set(kernel_, t50);
05100         SetArg<51, T51>::set(kernel_, t51);
05101         SetArg<52, T52>::set(kernel_, t52);
05102         SetArg<53, T53>::set(kernel_, t53);
05103         SetArg<54, T54>::set(kernel_, t54);
05104         SetArg<55, T55>::set(kernel_, t55);
05105         SetArg<56, T56>::set(kernel_, t56);
05106         SetArg<57, T57>::set(kernel_, t57);
05107         SetArg<58, T58>::set(kernel_, t58);
05108         SetArg<59, T59>::set(kernel_, t59);
05109         SetArg<60, T60>::set(kernel_, t60);
05110         SetArg<61, T61>::set(kernel_, t61);
05111         SetArg<62, T62>::set(kernel_, t62);
05112         SetArg<63, T63>::set(kernel_, t63);
05113         SetArg<64, T64>::set(kernel_, t64);
05114         SetArg<65, T65>::set(kernel_, t65);
05115         SetArg<66, T66>::set(kernel_, t66);
05116         SetArg<67, T67>::set(kernel_, t67);
05117         SetArg<68, T68>::set(kernel_, t68);
05118         SetArg<69, T69>::set(kernel_, t69);
05119         SetArg<70, T70>::set(kernel_, t70);
05120         SetArg<71, T71>::set(kernel_, t71);
05121         SetArg<72, T72>::set(kernel_, t72);
05122         SetArg<73, T73>::set(kernel_, t73);
05123         SetArg<74, T74>::set(kernel_, t74);
05124         SetArg<75, T75>::set(kernel_, t75);
05125         SetArg<76, T76>::set(kernel_, t76);
05126         SetArg<77, T77>::set(kernel_, t77);
05127         SetArg<78, T78>::set(kernel_, t78);
05128         SetArg<79, T79>::set(kernel_, t79);
05129         SetArg<80, T80>::set(kernel_, t80);
05130         SetArg<81, T81>::set(kernel_, t81);
05131         SetArg<82, T82>::set(kernel_, t82);
05132         SetArg<83, T83>::set(kernel_, t83);
05133         SetArg<84, T84>::set(kernel_, t84);
05134         SetArg<85, T85>::set(kernel_, t85);
05135         SetArg<86, T86>::set(kernel_, t86);
05136         SetArg<87, T87>::set(kernel_, t87);
05137         SetArg<88, T88>::set(kernel_, t88);
05138         SetArg<89, T89>::set(kernel_, t89);
05139         SetArg<90, T90>::set(kernel_, t90);
05140         SetArg<91, T91>::set(kernel_, t91);
05141         SetArg<92, T92>::set(kernel_, t92);
05142         SetArg<93, T93>::set(kernel_, t93);
05143         SetArg<94, T94>::set(kernel_, t94);
05144         SetArg<95, T95>::set(kernel_, t95);
05145         SetArg<96, T96>::set(kernel_, t96);
05146         SetArg<97, T97>::set(kernel_, t97);
05147         SetArg<98, T98>::set(kernel_, t98);
05148         SetArg<99, T99>::set(kernel_, t99);
05149         SetArg<100, T100>::set(kernel_, t100);
05150         SetArg<101, T101>::set(kernel_, t101);
05151         SetArg<102, T102>::set(kernel_, t102);
05152         SetArg<103, T103>::set(kernel_, t103);
05153         SetArg<104, T104>::set(kernel_, t104);
05154         SetArg<105, T105>::set(kernel_, t105);
05155         SetArg<106, T106>::set(kernel_, t106);
05156         SetArg<107, T107>::set(kernel_, t107);
05157         SetArg<108, T108>::set(kernel_, t108);
05158         SetArg<109, T109>::set(kernel_, t109);
05159         SetArg<110, T110>::set(kernel_, t110);
05160         SetArg<111, T111>::set(kernel_, t111);
05161         SetArg<112, T112>::set(kernel_, t112);
05162         SetArg<113, T113>::set(kernel_, t113);
05163         SetArg<114, T114>::set(kernel_, t114);
05164         SetArg<115, T115>::set(kernel_, t115);
05165         SetArg<116, T116>::set(kernel_, t116);
05166         SetArg<117, T117>::set(kernel_, t117);
05167         SetArg<118, T118>::set(kernel_, t118);
05168         SetArg<119, T119>::set(kernel_, t119);
05169         SetArg<120, T120>::set(kernel_, t120);
05170         SetArg<121, T121>::set(kernel_, t121);
05171         SetArg<122, T122>::set(kernel_, t122);
05172         SetArg<123, T123>::set(kernel_, t123);
05173         SetArg<124, T124>::set(kernel_, t124);
05174         SetArg<125, T125>::set(kernel_, t125);
05175         SetArg<126, T126>::set(kernel_, t126);
05176         SetArg<127, T127>::set(kernel_, t127);
05177 
05178         // Move any arguments that need moving
05179         MoveToDevice<T0>::move(args.queue_, t0);
05180         MoveToDevice<T1>::move(args.queue_, t1);
05181         MoveToDevice<T2>::move(args.queue_, t2);
05182         MoveToDevice<T3>::move(args.queue_, t3);
05183         MoveToDevice<T4>::move(args.queue_, t4);
05184         MoveToDevice<T5>::move(args.queue_, t5);
05185         MoveToDevice<T6>::move(args.queue_, t6);
05186         MoveToDevice<T7>::move(args.queue_, t7);
05187         MoveToDevice<T8>::move(args.queue_, t8);
05188         MoveToDevice<T9>::move(args.queue_, t9);
05189         MoveToDevice<T10>::move(args.queue_, t10);
05190         MoveToDevice<T11>::move(args.queue_, t11);
05191         MoveToDevice<T12>::move(args.queue_, t12);
05192         MoveToDevice<T13>::move(args.queue_, t13);
05193         MoveToDevice<T14>::move(args.queue_, t14);
05194         MoveToDevice<T15>::move(args.queue_, t15);
05195         MoveToDevice<T16>::move(args.queue_, t16);
05196         MoveToDevice<T17>::move(args.queue_, t17);
05197         MoveToDevice<T18>::move(args.queue_, t18);
05198         MoveToDevice<T19>::move(args.queue_, t19);
05199         MoveToDevice<T20>::move(args.queue_, t20);
05200         MoveToDevice<T21>::move(args.queue_, t21);
05201         MoveToDevice<T22>::move(args.queue_, t22);
05202         MoveToDevice<T23>::move(args.queue_, t23);
05203         MoveToDevice<T24>::move(args.queue_, t24);
05204         MoveToDevice<T25>::move(args.queue_, t25);
05205         MoveToDevice<T26>::move(args.queue_, t26);
05206         MoveToDevice<T27>::move(args.queue_, t27);
05207         MoveToDevice<T28>::move(args.queue_, t28);
05208         MoveToDevice<T29>::move(args.queue_, t29);
05209         MoveToDevice<T30>::move(args.queue_, t30);
05210         MoveToDevice<T31>::move(args.queue_, t31);
05211         MoveToDevice<T32>::move(args.queue_, t32);
05212         MoveToDevice<T33>::move(args.queue_, t33);
05213         MoveToDevice<T34>::move(args.queue_, t34);
05214         MoveToDevice<T35>::move(args.queue_, t35);
05215         MoveToDevice<T36>::move(args.queue_, t36);
05216         MoveToDevice<T37>::move(args.queue_, t37);
05217         MoveToDevice<T38>::move(args.queue_, t38);
05218         MoveToDevice<T39>::move(args.queue_, t39);
05219         MoveToDevice<T40>::move(args.queue_, t40);
05220         MoveToDevice<T41>::move(args.queue_, t41);
05221         MoveToDevice<T42>::move(args.queue_, t42);
05222         MoveToDevice<T43>::move(args.queue_, t43);
05223         MoveToDevice<T44>::move(args.queue_, t44);
05224         MoveToDevice<T45>::move(args.queue_, t45);
05225         MoveToDevice<T46>::move(args.queue_, t46);
05226         MoveToDevice<T47>::move(args.queue_, t47);
05227         MoveToDevice<T48>::move(args.queue_, t48);
05228         MoveToDevice<T49>::move(args.queue_, t49);
05229         MoveToDevice<T50>::move(args.queue_, t50);
05230         MoveToDevice<T51>::move(args.queue_, t51);
05231         MoveToDevice<T52>::move(args.queue_, t52);
05232         MoveToDevice<T53>::move(args.queue_, t53);
05233         MoveToDevice<T54>::move(args.queue_, t54);
05234         MoveToDevice<T55>::move(args.queue_, t55);
05235         MoveToDevice<T56>::move(args.queue_, t56);
05236         MoveToDevice<T57>::move(args.queue_, t57);
05237         MoveToDevice<T58>::move(args.queue_, t58);
05238         MoveToDevice<T59>::move(args.queue_, t59);
05239         MoveToDevice<T60>::move(args.queue_, t60);
05240         MoveToDevice<T61>::move(args.queue_, t61);
05241         MoveToDevice<T62>::move(args.queue_, t62);
05242         MoveToDevice<T63>::move(args.queue_, t63);
05243         MoveToDevice<T64>::move(args.queue_, t64);
05244         MoveToDevice<T65>::move(args.queue_, t65);
05245         MoveToDevice<T66>::move(args.queue_, t66);
05246         MoveToDevice<T67>::move(args.queue_, t67);
05247         MoveToDevice<T68>::move(args.queue_, t68);
05248         MoveToDevice<T69>::move(args.queue_, t69);
05249         MoveToDevice<T70>::move(args.queue_, t70);
05250         MoveToDevice<T71>::move(args.queue_, t71);
05251         MoveToDevice<T72>::move(args.queue_, t72);
05252         MoveToDevice<T73>::move(args.queue_, t73);
05253         MoveToDevice<T74>::move(args.queue_, t74);
05254         MoveToDevice<T75>::move(args.queue_, t75);
05255         MoveToDevice<T76>::move(args.queue_, t76);
05256         MoveToDevice<T77>::move(args.queue_, t77);
05257         MoveToDevice<T78>::move(args.queue_, t78);
05258         MoveToDevice<T79>::move(args.queue_, t79);
05259         MoveToDevice<T80>::move(args.queue_, t80);
05260         MoveToDevice<T81>::move(args.queue_, t81);
05261         MoveToDevice<T82>::move(args.queue_, t82);
05262         MoveToDevice<T83>::move(args.queue_, t83);
05263         MoveToDevice<T84>::move(args.queue_, t84);
05264         MoveToDevice<T85>::move(args.queue_, t85);
05265         MoveToDevice<T86>::move(args.queue_, t86);
05266         MoveToDevice<T87>::move(args.queue_, t87);
05267         MoveToDevice<T88>::move(args.queue_, t88);
05268         MoveToDevice<T89>::move(args.queue_, t89);
05269         MoveToDevice<T90>::move(args.queue_, t90);
05270         MoveToDevice<T91>::move(args.queue_, t91);
05271         MoveToDevice<T92>::move(args.queue_, t92);
05272         MoveToDevice<T93>::move(args.queue_, t93);
05273         MoveToDevice<T94>::move(args.queue_, t94);
05274         MoveToDevice<T95>::move(args.queue_, t95);
05275         MoveToDevice<T96>::move(args.queue_, t96);
05276         MoveToDevice<T97>::move(args.queue_, t97);
05277         MoveToDevice<T98>::move(args.queue_, t98);
05278         MoveToDevice<T99>::move(args.queue_, t99);
05279         MoveToDevice<T100>::move(args.queue_, t100);
05280         MoveToDevice<T101>::move(args.queue_, t101);
05281         MoveToDevice<T102>::move(args.queue_, t102);
05282         MoveToDevice<T103>::move(args.queue_, t103);
05283         MoveToDevice<T104>::move(args.queue_, t104);
05284         MoveToDevice<T105>::move(args.queue_, t105);
05285         MoveToDevice<T106>::move(args.queue_, t106);
05286         MoveToDevice<T107>::move(args.queue_, t107);
05287         MoveToDevice<T108>::move(args.queue_, t108);
05288         MoveToDevice<T109>::move(args.queue_, t109);
05289         MoveToDevice<T110>::move(args.queue_, t110);
05290         MoveToDevice<T111>::move(args.queue_, t111);
05291         MoveToDevice<T112>::move(args.queue_, t112);
05292         MoveToDevice<T113>::move(args.queue_, t113);
05293         MoveToDevice<T114>::move(args.queue_, t114);
05294         MoveToDevice<T115>::move(args.queue_, t115);
05295         MoveToDevice<T116>::move(args.queue_, t116);
05296         MoveToDevice<T117>::move(args.queue_, t117);
05297         MoveToDevice<T118>::move(args.queue_, t118);
05298         MoveToDevice<T119>::move(args.queue_, t119);
05299         MoveToDevice<T120>::move(args.queue_, t120);
05300         MoveToDevice<T121>::move(args.queue_, t121);
05301         MoveToDevice<T122>::move(args.queue_, t122);
05302         MoveToDevice<T123>::move(args.queue_, t123);
05303         MoveToDevice<T124>::move(args.queue_, t124);
05304         MoveToDevice<T125>::move(args.queue_, t125);
05305         MoveToDevice<T126>::move(args.queue_, t126);
05306         MoveToDevice<T127>::move(args.queue_, t127);
05307 
05308         VECTOR_CLASS<Event> events(&waitEvent, &waitEvent);
05309 
05310         args.queue_.enqueueNDRangeKernel(
05311             kernel_,
05312             args.offset_,
05313             args.global_,
05314             args.local_,
05315             &events,
05316             &event);
05317 
05318         // Move any arguments that need moving
05319        MoveFromDevice<T0>::move(args.queue_, t0);
05320         MoveFromDevice<T1>::move(args.queue_, t1);
05321         MoveFromDevice<T2>::move(args.queue_, t2);
05322         MoveFromDevice<T3>::move(args.queue_, t3);
05323         MoveFromDevice<T4>::move(args.queue_, t4);
05324         MoveFromDevice<T5>::move(args.queue_, t5);
05325         MoveFromDevice<T6>::move(args.queue_, t6);
05326         MoveFromDevice<T7>::move(args.queue_, t7);
05327         MoveFromDevice<T8>::move(args.queue_, t8);
05328         MoveFromDevice<T9>::move(args.queue_, t9);
05329         MoveFromDevice<T10>::move(args.queue_, t10);
05330         MoveFromDevice<T11>::move(args.queue_, t11);
05331         MoveFromDevice<T12>::move(args.queue_, t12);
05332         MoveFromDevice<T13>::move(args.queue_, t13);
05333         MoveFromDevice<T14>::move(args.queue_, t14);
05334         MoveFromDevice<T15>::move(args.queue_, t15);
05335         MoveFromDevice<T16>::move(args.queue_, t16);
05336         MoveFromDevice<T17>::move(args.queue_, t17);
05337         MoveFromDevice<T18>::move(args.queue_, t18);
05338         MoveFromDevice<T19>::move(args.queue_, t19);
05339         MoveFromDevice<T20>::move(args.queue_, t20);
05340         MoveFromDevice<T21>::move(args.queue_, t21);
05341         MoveFromDevice<T22>::move(args.queue_, t22);
05342         MoveFromDevice<T23>::move(args.queue_, t23);
05343         MoveFromDevice<T24>::move(args.queue_, t24);
05344         MoveFromDevice<T25>::move(args.queue_, t25);
05345         MoveFromDevice<T26>::move(args.queue_, t26);
05346         MoveFromDevice<T27>::move(args.queue_, t27);
05347         MoveFromDevice<T28>::move(args.queue_, t28);
05348         MoveFromDevice<T29>::move(args.queue_, t29);
05349         MoveFromDevice<T30>::move(args.queue_, t30);
05350         MoveFromDevice<T31>::move(args.queue_, t31);
05351         MoveFromDevice<T32>::move(args.queue_, t32);
05352         MoveFromDevice<T33>::move(args.queue_, t33);
05353         MoveFromDevice<T34>::move(args.queue_, t34);
05354         MoveFromDevice<T35>::move(args.queue_, t35);
05355         MoveFromDevice<T36>::move(args.queue_, t36);
05356         MoveFromDevice<T37>::move(args.queue_, t37);
05357         MoveFromDevice<T38>::move(args.queue_, t38);
05358         MoveFromDevice<T39>::move(args.queue_, t39);
05359         MoveFromDevice<T40>::move(args.queue_, t40);
05360         MoveFromDevice<T41>::move(args.queue_, t41);
05361         MoveFromDevice<T42>::move(args.queue_, t42);
05362         MoveFromDevice<T43>::move(args.queue_, t43);
05363         MoveFromDevice<T44>::move(args.queue_, t44);
05364         MoveFromDevice<T45>::move(args.queue_, t45);
05365         MoveFromDevice<T46>::move(args.queue_, t46);
05366         MoveFromDevice<T47>::move(args.queue_, t47);
05367         MoveFromDevice<T48>::move(args.queue_, t48);
05368         MoveFromDevice<T49>::move(args.queue_, t49);
05369         MoveFromDevice<T50>::move(args.queue_, t50);
05370         MoveFromDevice<T51>::move(args.queue_, t51);
05371         MoveFromDevice<T52>::move(args.queue_, t52);
05372         MoveFromDevice<T53>::move(args.queue_, t53);
05373         MoveFromDevice<T54>::move(args.queue_, t54);
05374         MoveFromDevice<T55>::move(args.queue_, t55);
05375         MoveFromDevice<T56>::move(args.queue_, t56);
05376         MoveFromDevice<T57>::move(args.queue_, t57);
05377         MoveFromDevice<T58>::move(args.queue_, t58);
05378         MoveFromDevice<T59>::move(args.queue_, t59);
05379         MoveFromDevice<T60>::move(args.queue_, t60);
05380         MoveFromDevice<T61>::move(args.queue_, t61);
05381         MoveFromDevice<T62>::move(args.queue_, t62);
05382         MoveFromDevice<T63>::move(args.queue_, t63);
05383         MoveFromDevice<T64>::move(args.queue_, t64);
05384         MoveFromDevice<T65>::move(args.queue_, t65);
05385         MoveFromDevice<T66>::move(args.queue_, t66);
05386         MoveFromDevice<T67>::move(args.queue_, t67);
05387         MoveFromDevice<T68>::move(args.queue_, t68);
05388         MoveFromDevice<T69>::move(args.queue_, t69);
05389         MoveFromDevice<T70>::move(args.queue_, t70);
05390         MoveFromDevice<T71>::move(args.queue_, t71);
05391         MoveFromDevice<T72>::move(args.queue_, t72);
05392         MoveFromDevice<T73>::move(args.queue_, t73);
05393         MoveFromDevice<T74>::move(args.queue_, t74);
05394         MoveFromDevice<T75>::move(args.queue_, t75);
05395         MoveFromDevice<T76>::move(args.queue_, t76);
05396         MoveFromDevice<T77>::move(args.queue_, t77);
05397         MoveFromDevice<T78>::move(args.queue_, t78);
05398         MoveFromDevice<T79>::move(args.queue_, t79);
05399         MoveFromDevice<T80>::move(args.queue_, t80);
05400         MoveFromDevice<T81>::move(args.queue_, t81);
05401         MoveFromDevice<T82>::move(args.queue_, t82);
05402         MoveFromDevice<T83>::move(args.queue_, t83);
05403         MoveFromDevice<T84>::move(args.queue_, t84);
05404         MoveFromDevice<T85>::move(args.queue_, t85);
05405         MoveFromDevice<T86>::move(args.queue_, t86);
05406         MoveFromDevice<T87>::move(args.queue_, t87);
05407         MoveFromDevice<T88>::move(args.queue_, t88);
05408         MoveFromDevice<T89>::move(args.queue_, t89);
05409         MoveFromDevice<T90>::move(args.queue_, t90);
05410         MoveFromDevice<T91>::move(args.queue_, t91);
05411         MoveFromDevice<T92>::move(args.queue_, t92);
05412         MoveFromDevice<T93>::move(args.queue_, t93);
05413         MoveFromDevice<T94>::move(args.queue_, t94);
05414         MoveFromDevice<T95>::move(args.queue_, t95);
05415         MoveFromDevice<T96>::move(args.queue_, t96);
05416         MoveFromDevice<T97>::move(args.queue_, t97);
05417         MoveFromDevice<T98>::move(args.queue_, t98);
05418         MoveFromDevice<T99>::move(args.queue_, t99);
05419         MoveFromDevice<T100>::move(args.queue_, t100);
05420         MoveFromDevice<T101>::move(args.queue_, t101);
05421         MoveFromDevice<T102>::move(args.queue_, t102);
05422         MoveFromDevice<T103>::move(args.queue_, t103);
05423         MoveFromDevice<T104>::move(args.queue_, t104);
05424         MoveFromDevice<T105>::move(args.queue_, t105);
05425         MoveFromDevice<T106>::move(args.queue_, t106);
05426         MoveFromDevice<T107>::move(args.queue_, t107);
05427         MoveFromDevice<T108>::move(args.queue_, t108);
05428         MoveFromDevice<T109>::move(args.queue_, t109);
05429         MoveFromDevice<T110>::move(args.queue_, t110);
05430         MoveFromDevice<T111>::move(args.queue_, t111);
05431         MoveFromDevice<T112>::move(args.queue_, t112);
05432         MoveFromDevice<T113>::move(args.queue_, t113);
05433         MoveFromDevice<T114>::move(args.queue_, t114);
05434         MoveFromDevice<T115>::move(args.queue_, t115);
05435         MoveFromDevice<T116>::move(args.queue_, t116);
05436         MoveFromDevice<T117>::move(args.queue_, t117);
05437         MoveFromDevice<T118>::move(args.queue_, t118);
05438         MoveFromDevice<T119>::move(args.queue_, t119);
05439         MoveFromDevice<T120>::move(args.queue_, t120);
05440         MoveFromDevice<T121>::move(args.queue_, t121);
05441         MoveFromDevice<T122>::move(args.queue_, t122);
05442         MoveFromDevice<T123>::move(args.queue_, t123);
05443         MoveFromDevice<T124>::move(args.queue_, t124);
05444         MoveFromDevice<T125>::move(args.queue_, t125);
05445         MoveFromDevice<T126>::move(args.queue_, t126);
05446         MoveFromDevice<T127>::move(args.queue_, t127);
05447         return event;
05448     }
05449 
05450     Event operator() (
05451         const EnqueueArgs& args,
05452         const VECTOR_CLASS<Event>& waitEvents,
05453         T0 t0,
05454         T1 t1 = NullType(),
05455         T2 t2 = NullType(),
05456         T3 t3 = NullType(),
05457         T4 t4 = NullType(),
05458         T5 t5 = NullType(),
05459         T6 t6 = NullType(),
05460         T7 t7 = NullType(),
05461         T8 t8 = NullType(),
05462         T9 t9 = NullType(),
05463         T10 t10 = NullType(),
05464         T11 t11 = NullType(),
05465         T12 t12 = NullType(),
05466         T13 t13 = NullType(),
05467         T14 t14 = NullType(),
05468         T15 t15 = NullType(),
05469         T16 t16 = NullType(),
05470         T17 t17 = NullType(),
05471         T18 t18 = NullType(),
05472         T19 t19 = NullType(),
05473         T20 t20 = NullType(),
05474         T21 t21 = NullType(),
05475         T22 t22 = NullType(),
05476         T23 t23 = NullType(),
05477         T24 t24 = NullType(),
05478         T25 t25 = NullType(),
05479         T26 t26 = NullType(),
05480         T27 t27 = NullType(),
05481         T28 t28 = NullType(),
05482         T29 t29 = NullType(),
05483         T30 t30 = NullType(),
05484         T31 t31 = NullType(),
05485         T32 t32 = NullType(),
05486         T33 t33 = NullType(),
05487         T34 t34 = NullType(),
05488         T35 t35 = NullType(),
05489         T36 t36 = NullType(),
05490         T37 t37 = NullType(),
05491         T38 t38 = NullType(),
05492         T39 t39 = NullType(),
05493         T40 t40 = NullType(),
05494         T41 t41 = NullType(),
05495         T42 t42 = NullType(),
05496         T43 t43 = NullType(),
05497         T44 t44 = NullType(),
05498         T45 t45 = NullType(),
05499         T46 t46 = NullType(),
05500         T47 t47 = NullType(),
05501         T48 t48 = NullType(),
05502         T49 t49 = NullType(),
05503         T50 t50 = NullType(),
05504         T51 t51 = NullType(),
05505         T52 t52 = NullType(),
05506         T53 t53 = NullType(),
05507         T54 t54 = NullType(),
05508         T55 t55 = NullType(),
05509         T56 t56 = NullType(),
05510         T57 t57 = NullType(),
05511         T58 t58 = NullType(),
05512         T59 t59 = NullType(),
05513         T60 t60 = NullType(),
05514         T61 t61 = NullType(),
05515         T62 t62 = NullType(),
05516         T63 t63 = NullType(),
05517         T64 t64 = NullType(),
05518         T65 t65 = NullType(),
05519         T66 t66 = NullType(),
05520         T67 t67 = NullType(),
05521         T68 t68 = NullType(),
05522         T69 t69 = NullType(),
05523         T70 t70 = NullType(),
05524         T71 t71 = NullType(),
05525         T72 t72 = NullType(),
05526         T73 t73 = NullType(),
05527         T74 t74 = NullType(),
05528         T75 t75 = NullType(),
05529         T76 t76 = NullType(),
05530         T77 t77 = NullType(),
05531         T78 t78 = NullType(),
05532         T79 t79 = NullType(),
05533         T80 t80 = NullType(),
05534         T81 t81 = NullType(),
05535         T82 t82 = NullType(),
05536         T83 t83 = NullType(),
05537         T84 t84 = NullType(),
05538         T85 t85 = NullType(),
05539         T86 t86 = NullType(),
05540         T87 t87 = NullType(),
05541         T88 t88 = NullType(),
05542         T89 t89 = NullType(),
05543         T90 t90 = NullType(),
05544         T91 t91 = NullType(),
05545         T92 t92 = NullType(),
05546         T93 t93 = NullType(),
05547         T94 t94 = NullType(),
05548         T95 t95 = NullType(),
05549         T96 t96 = NullType(),
05550         T97 t97 = NullType(),
05551         T98 t98 = NullType(),
05552         T99 t99 = NullType(),
05553         T100 t100 = NullType(),
05554         T101 t101 = NullType(),
05555         T102 t102 = NullType(),
05556         T103 t103 = NullType(),
05557         T104 t104 = NullType(),
05558         T105 t105 = NullType(),
05559         T106 t106 = NullType(),
05560         T107 t107 = NullType(),
05561         T108 t108 = NullType(),
05562         T109 t109 = NullType(),
05563         T110 t110 = NullType(),
05564         T111 t111 = NullType(),
05565         T112 t112 = NullType(),
05566         T113 t113 = NullType(),
05567         T114 t114 = NullType(),
05568         T115 t115 = NullType(),
05569         T116 t116 = NullType(),
05570         T117 t117 = NullType(),
05571         T118 t118 = NullType(),
05572         T119 t119 = NullType(),
05573         T120 t120 = NullType(),
05574         T121 t121 = NullType(),
05575         T122 t122 = NullType(),
05576         T123 t123 = NullType(),
05577         T124 t124 = NullType(),
05578         T125 t125 = NullType(),
05579         T126 t126 = NullType(),
05580         T127 t127 = NullType())
05581     {
05582         Event event;
05583         SetArg<0, T0>::set(kernel_, t0);
05584         SetArg<1, T1>::set(kernel_, t1);
05585         SetArg<2, T2>::set(kernel_, t2);
05586         SetArg<3, T3>::set(kernel_, t3);
05587         SetArg<4, T4>::set(kernel_, t4);
05588         SetArg<5, T5>::set(kernel_, t5);
05589         SetArg<6, T6>::set(kernel_, t6);
05590         SetArg<7, T7>::set(kernel_, t7);
05591         SetArg<8, T8>::set(kernel_, t8);
05592         SetArg<9, T9>::set(kernel_, t9);
05593         SetArg<10, T10>::set(kernel_, t10);
05594         SetArg<11, T11>::set(kernel_, t11);
05595         SetArg<12, T12>::set(kernel_, t12);
05596         SetArg<13, T13>::set(kernel_, t13);
05597         SetArg<14, T14>::set(kernel_, t14);
05598         SetArg<15, T15>::set(kernel_, t15);
05599         SetArg<16, T16>::set(kernel_, t16);
05600         SetArg<17, T17>::set(kernel_, t17);
05601         SetArg<18, T18>::set(kernel_, t18);
05602         SetArg<19, T19>::set(kernel_, t19);
05603         SetArg<20, T20>::set(kernel_, t20);
05604         SetArg<21, T21>::set(kernel_, t21);
05605         SetArg<22, T22>::set(kernel_, t22);
05606         SetArg<23, T23>::set(kernel_, t23);
05607         SetArg<24, T24>::set(kernel_, t24);
05608         SetArg<25, T25>::set(kernel_, t25);
05609         SetArg<26, T26>::set(kernel_, t26);
05610         SetArg<27, T27>::set(kernel_, t27);
05611         SetArg<28, T28>::set(kernel_, t28);
05612         SetArg<29, T29>::set(kernel_, t29);
05613         SetArg<30, T30>::set(kernel_, t30);
05614         SetArg<31, T31>::set(kernel_, t31);
05615         SetArg<32, T32>::set(kernel_, t32);
05616         SetArg<33, T33>::set(kernel_, t33);
05617         SetArg<34, T34>::set(kernel_, t34);
05618         SetArg<35, T35>::set(kernel_, t35);
05619         SetArg<36, T36>::set(kernel_, t36);
05620         SetArg<37, T37>::set(kernel_, t37);
05621         SetArg<38, T38>::set(kernel_, t38);
05622         SetArg<39, T39>::set(kernel_, t39);
05623         SetArg<40, T40>::set(kernel_, t40);
05624         SetArg<41, T41>::set(kernel_, t41);
05625         SetArg<42, T42>::set(kernel_, t42);
05626         SetArg<43, T43>::set(kernel_, t43);
05627         SetArg<44, T44>::set(kernel_, t44);
05628         SetArg<45, T45>::set(kernel_, t45);
05629         SetArg<46, T46>::set(kernel_, t46);
05630         SetArg<47, T47>::set(kernel_, t47);
05631         SetArg<48, T48>::set(kernel_, t48);
05632         SetArg<49, T49>::set(kernel_, t49);
05633         SetArg<50, T50>::set(kernel_, t50);
05634         SetArg<51, T51>::set(kernel_, t51);
05635         SetArg<52, T52>::set(kernel_, t52);
05636         SetArg<53, T53>::set(kernel_, t53);
05637         SetArg<54, T54>::set(kernel_, t54);
05638         SetArg<55, T55>::set(kernel_, t55);
05639         SetArg<56, T56>::set(kernel_, t56);
05640         SetArg<57, T57>::set(kernel_, t57);
05641         SetArg<58, T58>::set(kernel_, t58);
05642         SetArg<59, T59>::set(kernel_, t59);
05643         SetArg<60, T60>::set(kernel_, t60);
05644         SetArg<61, T61>::set(kernel_, t61);
05645         SetArg<62, T62>::set(kernel_, t62);
05646         SetArg<63, T63>::set(kernel_, t63);
05647         SetArg<64, T64>::set(kernel_, t64);
05648         SetArg<65, T65>::set(kernel_, t65);
05649         SetArg<66, T66>::set(kernel_, t66);
05650         SetArg<67, T67>::set(kernel_, t67);
05651         SetArg<68, T68>::set(kernel_, t68);
05652         SetArg<69, T69>::set(kernel_, t69);
05653         SetArg<70, T70>::set(kernel_, t70);
05654         SetArg<71, T71>::set(kernel_, t71);
05655         SetArg<72, T72>::set(kernel_, t72);
05656         SetArg<73, T73>::set(kernel_, t73);
05657         SetArg<74, T74>::set(kernel_, t74);
05658         SetArg<75, T75>::set(kernel_, t75);
05659         SetArg<76, T76>::set(kernel_, t76);
05660         SetArg<77, T77>::set(kernel_, t77);
05661         SetArg<78, T78>::set(kernel_, t78);
05662         SetArg<79, T79>::set(kernel_, t79);
05663         SetArg<80, T80>::set(kernel_, t80);
05664         SetArg<81, T81>::set(kernel_, t81);
05665         SetArg<82, T82>::set(kernel_, t82);
05666         SetArg<83, T83>::set(kernel_, t83);
05667         SetArg<84, T84>::set(kernel_, t84);
05668         SetArg<85, T85>::set(kernel_, t85);
05669         SetArg<86, T86>::set(kernel_, t86);
05670         SetArg<87, T87>::set(kernel_, t87);
05671         SetArg<88, T88>::set(kernel_, t88);
05672         SetArg<89, T89>::set(kernel_, t89);
05673         SetArg<90, T90>::set(kernel_, t90);
05674         SetArg<91, T91>::set(kernel_, t91);
05675         SetArg<92, T92>::set(kernel_, t92);
05676         SetArg<93, T93>::set(kernel_, t93);
05677         SetArg<94, T94>::set(kernel_, t94);
05678         SetArg<95, T95>::set(kernel_, t95);
05679         SetArg<96, T96>::set(kernel_, t96);
05680         SetArg<97, T97>::set(kernel_, t97);
05681         SetArg<98, T98>::set(kernel_, t98);
05682         SetArg<99, T99>::set(kernel_, t99);
05683         SetArg<100, T100>::set(kernel_, t100);
05684         SetArg<101, T101>::set(kernel_, t101);
05685         SetArg<102, T102>::set(kernel_, t102);
05686         SetArg<103, T103>::set(kernel_, t103);
05687         SetArg<104, T104>::set(kernel_, t104);
05688         SetArg<105, T105>::set(kernel_, t105);
05689         SetArg<106, T106>::set(kernel_, t106);
05690         SetArg<107, T107>::set(kernel_, t107);
05691         SetArg<108, T108>::set(kernel_, t108);
05692         SetArg<109, T109>::set(kernel_, t109);
05693         SetArg<110, T110>::set(kernel_, t110);
05694         SetArg<111, T111>::set(kernel_, t111);
05695         SetArg<112, T112>::set(kernel_, t112);
05696         SetArg<113, T113>::set(kernel_, t113);
05697         SetArg<114, T114>::set(kernel_, t114);
05698         SetArg<115, T115>::set(kernel_, t115);
05699         SetArg<116, T116>::set(kernel_, t116);
05700         SetArg<117, T117>::set(kernel_, t117);
05701         SetArg<118, T118>::set(kernel_, t118);
05702         SetArg<119, T119>::set(kernel_, t119);
05703         SetArg<120, T120>::set(kernel_, t120);
05704         SetArg<121, T121>::set(kernel_, t121);
05705         SetArg<122, T122>::set(kernel_, t122);
05706         SetArg<123, T123>::set(kernel_, t123);
05707         SetArg<124, T124>::set(kernel_, t124);
05708         SetArg<125, T125>::set(kernel_, t125);
05709         SetArg<126, T126>::set(kernel_, t126);
05710         SetArg<127, T127>::set(kernel_, t127);
05711 
05712         // Move any arguments that need moving
05713         MoveToDevice<T0>::move(args.queue_, t0);
05714         MoveToDevice<T1>::move(args.queue_, t1);
05715         MoveToDevice<T2>::move(args.queue_, t2);
05716         MoveToDevice<T3>::move(args.queue_, t3);
05717         MoveToDevice<T4>::move(args.queue_, t4);
05718         MoveToDevice<T5>::move(args.queue_, t5);
05719         MoveToDevice<T6>::move(args.queue_, t6);
05720         MoveToDevice<T7>::move(args.queue_, t7);
05721         MoveToDevice<T8>::move(args.queue_, t8);
05722         MoveToDevice<T9>::move(args.queue_, t9);
05723         MoveToDevice<T10>::move(args.queue_, t10);
05724         MoveToDevice<T11>::move(args.queue_, t11);
05725         MoveToDevice<T12>::move(args.queue_, t12);
05726         MoveToDevice<T13>::move(args.queue_, t13);
05727         MoveToDevice<T14>::move(args.queue_, t14);
05728         MoveToDevice<T15>::move(args.queue_, t15);
05729         MoveToDevice<T16>::move(args.queue_, t16);
05730         MoveToDevice<T17>::move(args.queue_, t17);
05731         MoveToDevice<T18>::move(args.queue_, t18);
05732         MoveToDevice<T19>::move(args.queue_, t19);
05733         MoveToDevice<T20>::move(args.queue_, t20);
05734         MoveToDevice<T21>::move(args.queue_, t21);
05735         MoveToDevice<T22>::move(args.queue_, t22);
05736         MoveToDevice<T23>::move(args.queue_, t23);
05737         MoveToDevice<T24>::move(args.queue_, t24);
05738         MoveToDevice<T25>::move(args.queue_, t25);
05739         MoveToDevice<T26>::move(args.queue_, t26);
05740         MoveToDevice<T27>::move(args.queue_, t27);
05741         MoveToDevice<T28>::move(args.queue_, t28);
05742         MoveToDevice<T29>::move(args.queue_, t29);
05743         MoveToDevice<T30>::move(args.queue_, t30);
05744         MoveToDevice<T31>::move(args.queue_, t31);
05745         MoveToDevice<T32>::move(args.queue_, t32);
05746         MoveToDevice<T33>::move(args.queue_, t33);
05747         MoveToDevice<T34>::move(args.queue_, t34);
05748         MoveToDevice<T35>::move(args.queue_, t35);
05749         MoveToDevice<T36>::move(args.queue_, t36);
05750         MoveToDevice<T37>::move(args.queue_, t37);
05751         MoveToDevice<T38>::move(args.queue_, t38);
05752         MoveToDevice<T39>::move(args.queue_, t39);
05753         MoveToDevice<T40>::move(args.queue_, t40);
05754         MoveToDevice<T41>::move(args.queue_, t41);
05755         MoveToDevice<T42>::move(args.queue_, t42);
05756         MoveToDevice<T43>::move(args.queue_, t43);
05757         MoveToDevice<T44>::move(args.queue_, t44);
05758         MoveToDevice<T45>::move(args.queue_, t45);
05759         MoveToDevice<T46>::move(args.queue_, t46);
05760         MoveToDevice<T47>::move(args.queue_, t47);
05761         MoveToDevice<T48>::move(args.queue_, t48);
05762         MoveToDevice<T49>::move(args.queue_, t49);
05763         MoveToDevice<T50>::move(args.queue_, t50);
05764         MoveToDevice<T51>::move(args.queue_, t51);
05765         MoveToDevice<T52>::move(args.queue_, t52);
05766         MoveToDevice<T53>::move(args.queue_, t53);
05767         MoveToDevice<T54>::move(args.queue_, t54);
05768         MoveToDevice<T55>::move(args.queue_, t55);
05769         MoveToDevice<T56>::move(args.queue_, t56);
05770         MoveToDevice<T57>::move(args.queue_, t57);
05771         MoveToDevice<T58>::move(args.queue_, t58);
05772         MoveToDevice<T59>::move(args.queue_, t59);
05773         MoveToDevice<T60>::move(args.queue_, t60);
05774         MoveToDevice<T61>::move(args.queue_, t61);
05775         MoveToDevice<T62>::move(args.queue_, t62);
05776         MoveToDevice<T63>::move(args.queue_, t63);
05777         MoveToDevice<T64>::move(args.queue_, t64);
05778         MoveToDevice<T65>::move(args.queue_, t65);
05779         MoveToDevice<T66>::move(args.queue_, t66);
05780         MoveToDevice<T67>::move(args.queue_, t67);
05781         MoveToDevice<T68>::move(args.queue_, t68);
05782         MoveToDevice<T69>::move(args.queue_, t69);
05783         MoveToDevice<T70>::move(args.queue_, t70);
05784         MoveToDevice<T71>::move(args.queue_, t71);
05785         MoveToDevice<T72>::move(args.queue_, t72);
05786         MoveToDevice<T73>::move(args.queue_, t73);
05787         MoveToDevice<T74>::move(args.queue_, t74);
05788         MoveToDevice<T75>::move(args.queue_, t75);
05789         MoveToDevice<T76>::move(args.queue_, t76);
05790         MoveToDevice<T77>::move(args.queue_, t77);
05791         MoveToDevice<T78>::move(args.queue_, t78);
05792         MoveToDevice<T79>::move(args.queue_, t79);
05793         MoveToDevice<T80>::move(args.queue_, t80);
05794         MoveToDevice<T81>::move(args.queue_, t81);
05795         MoveToDevice<T82>::move(args.queue_, t82);
05796         MoveToDevice<T83>::move(args.queue_, t83);
05797         MoveToDevice<T84>::move(args.queue_, t84);
05798         MoveToDevice<T85>::move(args.queue_, t85);
05799         MoveToDevice<T86>::move(args.queue_, t86);
05800         MoveToDevice<T87>::move(args.queue_, t87);
05801         MoveToDevice<T88>::move(args.queue_, t88);
05802         MoveToDevice<T89>::move(args.queue_, t89);
05803         MoveToDevice<T90>::move(args.queue_, t90);
05804         MoveToDevice<T91>::move(args.queue_, t91);
05805         MoveToDevice<T92>::move(args.queue_, t92);
05806         MoveToDevice<T93>::move(args.queue_, t93);
05807         MoveToDevice<T94>::move(args.queue_, t94);
05808         MoveToDevice<T95>::move(args.queue_, t95);
05809         MoveToDevice<T96>::move(args.queue_, t96);
05810         MoveToDevice<T97>::move(args.queue_, t97);
05811         MoveToDevice<T98>::move(args.queue_, t98);
05812         MoveToDevice<T99>::move(args.queue_, t99);
05813         MoveToDevice<T100>::move(args.queue_, t100);
05814         MoveToDevice<T101>::move(args.queue_, t101);
05815         MoveToDevice<T102>::move(args.queue_, t102);
05816         MoveToDevice<T103>::move(args.queue_, t103);
05817         MoveToDevice<T104>::move(args.queue_, t104);
05818         MoveToDevice<T105>::move(args.queue_, t105);
05819         MoveToDevice<T106>::move(args.queue_, t106);
05820         MoveToDevice<T107>::move(args.queue_, t107);
05821         MoveToDevice<T108>::move(args.queue_, t108);
05822         MoveToDevice<T109>::move(args.queue_, t109);
05823         MoveToDevice<T110>::move(args.queue_, t110);
05824         MoveToDevice<T111>::move(args.queue_, t111);
05825         MoveToDevice<T112>::move(args.queue_, t112);
05826         MoveToDevice<T113>::move(args.queue_, t113);
05827         MoveToDevice<T114>::move(args.queue_, t114);
05828         MoveToDevice<T115>::move(args.queue_, t115);
05829         MoveToDevice<T116>::move(args.queue_, t116);
05830         MoveToDevice<T117>::move(args.queue_, t117);
05831         MoveToDevice<T118>::move(args.queue_, t118);
05832         MoveToDevice<T119>::move(args.queue_, t119);
05833         MoveToDevice<T120>::move(args.queue_, t120);
05834         MoveToDevice<T121>::move(args.queue_, t121);
05835         MoveToDevice<T122>::move(args.queue_, t122);
05836         MoveToDevice<T123>::move(args.queue_, t123);
05837         MoveToDevice<T124>::move(args.queue_, t124);
05838         MoveToDevice<T125>::move(args.queue_, t125);
05839         MoveToDevice<T126>::move(args.queue_, t126);
05840         MoveToDevice<T127>::move(args.queue_, t127);
05841 
05842         args.queue_.enqueueNDRangeKernel(
05843             kernel_,
05844             args.offset_,
05845             args.global_,
05846             args.local_,
05847             &waitEvents,
05848             &event);
05849 
05850         // Move any arguments that need moving
05851        MoveFromDevice<T0>::move(args.queue_, t0);
05852         MoveFromDevice<T1>::move(args.queue_, t1);
05853         MoveFromDevice<T2>::move(args.queue_, t2);
05854         MoveFromDevice<T3>::move(args.queue_, t3);
05855         MoveFromDevice<T4>::move(args.queue_, t4);
05856         MoveFromDevice<T5>::move(args.queue_, t5);
05857         MoveFromDevice<T6>::move(args.queue_, t6);
05858         MoveFromDevice<T7>::move(args.queue_, t7);
05859         MoveFromDevice<T8>::move(args.queue_, t8);
05860         MoveFromDevice<T9>::move(args.queue_, t9);
05861         MoveFromDevice<T10>::move(args.queue_, t10);
05862         MoveFromDevice<T11>::move(args.queue_, t11);
05863         MoveFromDevice<T12>::move(args.queue_, t12);
05864         MoveFromDevice<T13>::move(args.queue_, t13);
05865         MoveFromDevice<T14>::move(args.queue_, t14);
05866         MoveFromDevice<T15>::move(args.queue_, t15);
05867         MoveFromDevice<T16>::move(args.queue_, t16);
05868         MoveFromDevice<T17>::move(args.queue_, t17);
05869         MoveFromDevice<T18>::move(args.queue_, t18);
05870         MoveFromDevice<T19>::move(args.queue_, t19);
05871         MoveFromDevice<T20>::move(args.queue_, t20);
05872         MoveFromDevice<T21>::move(args.queue_, t21);
05873         MoveFromDevice<T22>::move(args.queue_, t22);
05874         MoveFromDevice<T23>::move(args.queue_, t23);
05875         MoveFromDevice<T24>::move(args.queue_, t24);
05876         MoveFromDevice<T25>::move(args.queue_, t25);
05877         MoveFromDevice<T26>::move(args.queue_, t26);
05878         MoveFromDevice<T27>::move(args.queue_, t27);
05879         MoveFromDevice<T28>::move(args.queue_, t28);
05880         MoveFromDevice<T29>::move(args.queue_, t29);
05881         MoveFromDevice<T30>::move(args.queue_, t30);
05882         MoveFromDevice<T31>::move(args.queue_, t31);
05883         MoveFromDevice<T32>::move(args.queue_, t32);
05884         MoveFromDevice<T33>::move(args.queue_, t33);
05885         MoveFromDevice<T34>::move(args.queue_, t34);
05886         MoveFromDevice<T35>::move(args.queue_, t35);
05887         MoveFromDevice<T36>::move(args.queue_, t36);
05888         MoveFromDevice<T37>::move(args.queue_, t37);
05889         MoveFromDevice<T38>::move(args.queue_, t38);
05890         MoveFromDevice<T39>::move(args.queue_, t39);
05891         MoveFromDevice<T40>::move(args.queue_, t40);
05892         MoveFromDevice<T41>::move(args.queue_, t41);
05893         MoveFromDevice<T42>::move(args.queue_, t42);
05894         MoveFromDevice<T43>::move(args.queue_, t43);
05895         MoveFromDevice<T44>::move(args.queue_, t44);
05896         MoveFromDevice<T45>::move(args.queue_, t45);
05897         MoveFromDevice<T46>::move(args.queue_, t46);
05898         MoveFromDevice<T47>::move(args.queue_, t47);
05899         MoveFromDevice<T48>::move(args.queue_, t48);
05900         MoveFromDevice<T49>::move(args.queue_, t49);
05901         MoveFromDevice<T50>::move(args.queue_, t50);
05902         MoveFromDevice<T51>::move(args.queue_, t51);
05903         MoveFromDevice<T52>::move(args.queue_, t52);
05904         MoveFromDevice<T53>::move(args.queue_, t53);
05905         MoveFromDevice<T54>::move(args.queue_, t54);
05906         MoveFromDevice<T55>::move(args.queue_, t55);
05907         MoveFromDevice<T56>::move(args.queue_, t56);
05908         MoveFromDevice<T57>::move(args.queue_, t57);
05909         MoveFromDevice<T58>::move(args.queue_, t58);
05910         MoveFromDevice<T59>::move(args.queue_, t59);
05911         MoveFromDevice<T60>::move(args.queue_, t60);
05912         MoveFromDevice<T61>::move(args.queue_, t61);
05913         MoveFromDevice<T62>::move(args.queue_, t62);
05914         MoveFromDevice<T63>::move(args.queue_, t63);
05915         MoveFromDevice<T64>::move(args.queue_, t64);
05916         MoveFromDevice<T65>::move(args.queue_, t65);
05917         MoveFromDevice<T66>::move(args.queue_, t66);
05918         MoveFromDevice<T67>::move(args.queue_, t67);
05919         MoveFromDevice<T68>::move(args.queue_, t68);
05920         MoveFromDevice<T69>::move(args.queue_, t69);
05921         MoveFromDevice<T70>::move(args.queue_, t70);
05922         MoveFromDevice<T71>::move(args.queue_, t71);
05923         MoveFromDevice<T72>::move(args.queue_, t72);
05924         MoveFromDevice<T73>::move(args.queue_, t73);
05925         MoveFromDevice<T74>::move(args.queue_, t74);
05926         MoveFromDevice<T75>::move(args.queue_, t75);
05927         MoveFromDevice<T76>::move(args.queue_, t76);
05928         MoveFromDevice<T77>::move(args.queue_, t77);
05929         MoveFromDevice<T78>::move(args.queue_, t78);
05930         MoveFromDevice<T79>::move(args.queue_, t79);
05931         MoveFromDevice<T80>::move(args.queue_, t80);
05932         MoveFromDevice<T81>::move(args.queue_, t81);
05933         MoveFromDevice<T82>::move(args.queue_, t82);
05934         MoveFromDevice<T83>::move(args.queue_, t83);
05935         MoveFromDevice<T84>::move(args.queue_, t84);
05936         MoveFromDevice<T85>::move(args.queue_, t85);
05937         MoveFromDevice<T86>::move(args.queue_, t86);
05938         MoveFromDevice<T87>::move(args.queue_, t87);
05939         MoveFromDevice<T88>::move(args.queue_, t88);
05940         MoveFromDevice<T89>::move(args.queue_, t89);
05941         MoveFromDevice<T90>::move(args.queue_, t90);
05942         MoveFromDevice<T91>::move(args.queue_, t91);
05943         MoveFromDevice<T92>::move(args.queue_, t92);
05944         MoveFromDevice<T93>::move(args.queue_, t93);
05945         MoveFromDevice<T94>::move(args.queue_, t94);
05946         MoveFromDevice<T95>::move(args.queue_, t95);
05947         MoveFromDevice<T96>::move(args.queue_, t96);
05948         MoveFromDevice<T97>::move(args.queue_, t97);
05949         MoveFromDevice<T98>::move(args.queue_, t98);
05950         MoveFromDevice<T99>::move(args.queue_, t99);
05951         MoveFromDevice<T100>::move(args.queue_, t100);
05952         MoveFromDevice<T101>::move(args.queue_, t101);
05953         MoveFromDevice<T102>::move(args.queue_, t102);
05954         MoveFromDevice<T103>::move(args.queue_, t103);
05955         MoveFromDevice<T104>::move(args.queue_, t104);
05956         MoveFromDevice<T105>::move(args.queue_, t105);
05957         MoveFromDevice<T106>::move(args.queue_, t106);
05958         MoveFromDevice<T107>::move(args.queue_, t107);
05959         MoveFromDevice<T108>::move(args.queue_, t108);
05960         MoveFromDevice<T109>::move(args.queue_, t109);
05961         MoveFromDevice<T110>::move(args.queue_, t110);
05962         MoveFromDevice<T111>::move(args.queue_, t111);
05963         MoveFromDevice<T112>::move(args.queue_, t112);
05964         MoveFromDevice<T113>::move(args.queue_, t113);
05965         MoveFromDevice<T114>::move(args.queue_, t114);
05966         MoveFromDevice<T115>::move(args.queue_, t115);
05967         MoveFromDevice<T116>::move(args.queue_, t116);
05968         MoveFromDevice<T117>::move(args.queue_, t117);
05969         MoveFromDevice<T118>::move(args.queue_, t118);
05970         MoveFromDevice<T119>::move(args.queue_, t119);
05971         MoveFromDevice<T120>::move(args.queue_, t120);
05972         MoveFromDevice<T121>::move(args.queue_, t121);
05973         MoveFromDevice<T122>::move(args.queue_, t122);
05974         MoveFromDevice<T123>::move(args.queue_, t123);
05975         MoveFromDevice<T124>::move(args.queue_, t124);
05976         MoveFromDevice<T125>::move(args.queue_, t125);
05977         MoveFromDevice<T126>::move(args.queue_, t126);
05978         MoveFromDevice<T127>::move(args.queue_, t127);
05979 
05980         return event;
05981     }
05982 };
05983 
05984 //------------------------------------------------------------------------------------------------------
05985 
05986 
05987 template<
05988     typename T0,
05989     typename T1,
05990     typename T2,
05991     typename T3,
05992     typename T4,
05993     typename T5,
05994     typename T6,
05995     typename T7,
05996     typename T8,
05997     typename T9,
05998     typename T10,
05999     typename T11,
06000     typename T12,
06001     typename T13,
06002     typename T14,
06003     typename T15,
06004     typename T16,
06005     typename T17,
06006     typename T18,
06007     typename T19,
06008     typename T20,
06009     typename T21,
06010     typename T22,
06011     typename T23,
06012     typename T24,
06013     typename T25,
06014     typename T26,
06015     typename T27,
06016     typename T28,
06017     typename T29,
06018     typename T30,
06019     typename T31,
06020     typename T32,
06021     typename T33,
06022     typename T34,
06023     typename T35,
06024     typename T36,
06025     typename T37,
06026     typename T38,
06027     typename T39,
06028     typename T40,
06029     typename T41,
06030     typename T42,
06031     typename T43,
06032     typename T44,
06033     typename T45,
06034     typename T46,
06035     typename T47,
06036     typename T48,
06037     typename T49,
06038     typename T50,
06039     typename T51,
06040     typename T52,
06041     typename T53,
06042     typename T54,
06043     typename T55,
06044     typename T56,
06045     typename T57,
06046     typename T58,
06047     typename T59,
06048     typename T60,
06049     typename T61,
06050     typename T62,
06051     typename T63,
06052     typename T64,
06053     typename T65,
06054     typename T66,
06055     typename T67,
06056     typename T68,
06057     typename T69,
06058     typename T70,
06059     typename T71,
06060     typename T72,
06061     typename T73,
06062     typename T74,
06063     typename T75,
06064     typename T76,
06065     typename T77,
06066     typename T78,
06067     typename T79,
06068     typename T80,
06069     typename T81,
06070     typename T82,
06071     typename T83,
06072     typename T84,
06073     typename T85,
06074     typename T86,
06075     typename T87,
06076     typename T88,
06077     typename T89,
06078     typename T90,
06079     typename T91,
06080     typename T92,
06081     typename T93,
06082     typename T94,
06083     typename T95,
06084     typename T96,
06085     typename T97,
06086     typename T98,
06087     typename T99,
06088     typename T100,
06089     typename T101,
06090     typename T102,
06091     typename T103,
06092     typename T104,
06093     typename T105,
06094     typename T106,
06095     typename T107,
06096     typename T108,
06097     typename T109,
06098     typename T110,
06099     typename T111,
06100     typename T112,
06101     typename T113,
06102     typename T114,
06103     typename T115,
06104     typename T116,
06105     typename T117,
06106     typename T118,
06107     typename T119,
06108     typename T120,
06109     typename T121,
06110     typename T122,
06111     typename T123,
06112     typename T124,
06113     typename T125,
06114     typename T126,
06115     typename T127>
06116 struct functionImplementation_
06117 {
06118 };
06119 
06120 template<
06121     typename T0>
06122 struct functionImplementation_<
06123     T0,
06124     NullType,
06125     NullType,
06126     NullType,
06127     NullType,
06128     NullType,
06129     NullType,
06130     NullType,
06131     NullType,
06132     NullType,
06133     NullType,
06134     NullType,
06135     NullType,
06136     NullType,
06137     NullType,
06138     NullType,
06139     NullType,
06140     NullType,
06141     NullType,
06142     NullType,
06143     NullType,
06144     NullType,
06145     NullType,
06146     NullType,
06147     NullType,
06148     NullType,
06149     NullType,
06150     NullType,
06151     NullType,
06152     NullType,
06153     NullType,
06154     NullType,
06155     NullType,
06156     NullType,
06157     NullType,
06158     NullType,
06159     NullType,
06160     NullType,
06161     NullType,
06162     NullType,
06163     NullType,
06164     NullType,
06165     NullType,
06166     NullType,
06167     NullType,
06168     NullType,
06169     NullType,
06170     NullType,
06171     NullType,
06172     NullType,
06173     NullType,
06174     NullType,
06175     NullType,
06176     NullType,
06177     NullType,
06178     NullType,
06179     NullType,
06180     NullType,
06181     NullType,
06182     NullType,
06183     NullType,
06184     NullType,
06185     NullType,
06186     NullType,
06187     NullType,
06188     NullType,
06189     NullType,
06190     NullType,
06191     NullType,
06192     NullType,
06193     NullType,
06194     NullType,
06195     NullType,
06196     NullType,
06197     NullType,
06198     NullType,
06199     NullType,
06200     NullType,
06201     NullType,
06202     NullType,
06203     NullType,
06204     NullType,
06205     NullType,
06206     NullType,
06207     NullType,
06208     NullType,
06209     NullType,
06210     NullType,
06211     NullType,
06212     NullType,
06213     NullType,
06214     NullType,
06215     NullType,
06216     NullType,
06217     NullType,
06218     NullType,
06219     NullType,
06220     NullType,
06221     NullType,
06222     NullType,
06223     NullType,
06224     NullType,
06225     NullType,
06226     NullType,
06227     NullType,
06228     NullType,
06229     NullType,
06230     NullType,
06231     NullType,
06232     NullType,
06233     NullType,
06234     NullType,
06235     NullType,
06236     NullType,
06237     NullType,
06238     NullType,
06239     NullType,
06240     NullType,
06241     NullType,
06242     NullType,
06243     NullType,
06244     NullType,
06245     NullType,
06246     NullType,
06247     NullType,
06248     NullType,
06249     NullType,
06250     NullType>
06251 {
06252     typedef detail::KernelFunctorGlobal<
06253         T0,
06254         NullType,
06255         NullType,
06256         NullType,
06257         NullType,
06258         NullType,
06259         NullType,
06260         NullType,
06261         NullType,
06262         NullType,
06263         NullType,
06264         NullType,
06265         NullType,
06266         NullType,
06267         NullType,
06268         NullType,
06269         NullType,
06270         NullType,
06271         NullType,
06272         NullType,
06273         NullType,
06274         NullType,
06275         NullType,
06276         NullType,
06277         NullType,
06278         NullType,
06279         NullType,
06280         NullType,
06281         NullType,
06282         NullType,
06283         NullType,
06284         NullType,
06285         NullType,
06286         NullType,
06287         NullType,
06288         NullType,
06289         NullType,
06290         NullType,
06291         NullType,
06292         NullType,
06293         NullType,
06294         NullType,
06295         NullType,
06296         NullType,
06297         NullType,
06298         NullType,
06299         NullType,
06300         NullType,
06301         NullType,
06302         NullType,
06303         NullType,
06304         NullType,
06305         NullType,
06306         NullType,
06307         NullType,
06308         NullType,
06309         NullType,
06310         NullType,
06311         NullType,
06312         NullType,
06313         NullType,
06314         NullType,
06315         NullType,
06316         NullType,
06317         NullType,
06318         NullType,
06319         NullType,
06320         NullType,
06321         NullType,
06322         NullType,
06323         NullType,
06324         NullType,
06325         NullType,
06326         NullType,
06327         NullType,
06328         NullType,
06329         NullType,
06330         NullType,
06331         NullType,
06332         NullType,
06333         NullType,
06334         NullType,
06335         NullType,
06336         NullType,
06337         NullType,
06338         NullType,
06339         NullType,
06340         NullType,
06341         NullType,
06342         NullType,
06343         NullType,
06344         NullType,
06345         NullType,
06346         NullType,
06347         NullType,
06348         NullType,
06349         NullType,
06350         NullType,
06351         NullType,
06352         NullType,
06353         NullType,
06354         NullType,
06355         NullType,
06356         NullType,
06357         NullType,
06358         NullType,
06359         NullType,
06360         NullType,
06361         NullType,
06362         NullType,
06363         NullType,
06364         NullType,
06365         NullType,
06366         NullType,
06367         NullType,
06368         NullType,
06369         NullType,
06370         NullType,
06371         NullType,
06372         NullType,
06373         NullType,
06374         NullType,
06375         NullType,
06376         NullType,
06377         NullType,
06378         NullType,
06379         NullType,
06380         NullType> FunctorType;
06381 
06382     FunctorType functor_;
06383 
06384     functionImplementation_(const FunctorType &functor) :
06385         functor_(functor)
06386     {
06387     }
06388         
06389     typedef std::tr1::function<Event (
06390         const EnqueueArgs&,
06391         T0)> type_;
06392 
06393     Event operator()(const EnqueueArgs& enqueueArgs,
06394         T0 arg0)
06395     {
06396         return functor_(
06397             enqueueArgs,
06398             arg0);
06399     }
06400 
06401     operator type_ ()    
06402     {
06403         return type_(*this);
06404     }
06405 
06406 };
06407 
06408 template<
06409     typename T0,
06410     typename T1>
06411 struct functionImplementation_<
06412     T0,
06413     T1,
06414     NullType,
06415     NullType,
06416     NullType,
06417     NullType,
06418     NullType,
06419     NullType,
06420     NullType,
06421     NullType,
06422     NullType,
06423     NullType,
06424     NullType,
06425     NullType,
06426     NullType,
06427     NullType,
06428     NullType,
06429     NullType,
06430     NullType,
06431     NullType,
06432     NullType,
06433     NullType,
06434     NullType,
06435     NullType,
06436     NullType,
06437     NullType,
06438     NullType,
06439     NullType,
06440     NullType,
06441     NullType,
06442     NullType,
06443     NullType,
06444     NullType,
06445     NullType,
06446     NullType,
06447     NullType,
06448     NullType,
06449     NullType,
06450     NullType,
06451     NullType,
06452     NullType,
06453     NullType,
06454     NullType,
06455     NullType,
06456     NullType,
06457     NullType,
06458     NullType,
06459     NullType,
06460     NullType,
06461     NullType,
06462     NullType,
06463     NullType,
06464     NullType,
06465     NullType,
06466     NullType,
06467     NullType,
06468     NullType,
06469     NullType,
06470     NullType,
06471     NullType,
06472     NullType,
06473     NullType,
06474     NullType,
06475     NullType,
06476     NullType,
06477     NullType,
06478     NullType,
06479     NullType,
06480     NullType,
06481     NullType,
06482     NullType,
06483     NullType,
06484     NullType,
06485     NullType,
06486     NullType,
06487     NullType,
06488     NullType,
06489     NullType,
06490     NullType,
06491     NullType,
06492     NullType,
06493     NullType,
06494     NullType,
06495     NullType,
06496     NullType,
06497     NullType,
06498     NullType,
06499     NullType,
06500     NullType,
06501     NullType,
06502     NullType,
06503     NullType,
06504     NullType,
06505     NullType,
06506     NullType,
06507     NullType,
06508     NullType,
06509     NullType,
06510     NullType,
06511     NullType,
06512     NullType,
06513     NullType,
06514     NullType,
06515     NullType,
06516     NullType,
06517     NullType,
06518     NullType,
06519     NullType,
06520     NullType,
06521     NullType,
06522     NullType,
06523     NullType,
06524     NullType,
06525     NullType,
06526     NullType,
06527     NullType,
06528     NullType,
06529     NullType,
06530     NullType,
06531     NullType,
06532     NullType,
06533     NullType,
06534     NullType,
06535     NullType,
06536     NullType,
06537     NullType,
06538     NullType,
06539     NullType>
06540 {
06541     typedef detail::KernelFunctorGlobal<
06542         T0,
06543         T1,
06544         NullType,
06545         NullType,
06546         NullType,
06547         NullType,
06548         NullType,
06549         NullType,
06550         NullType,
06551         NullType,
06552         NullType,
06553         NullType,
06554         NullType,
06555         NullType,
06556         NullType,
06557         NullType,
06558         NullType,
06559         NullType,
06560         NullType,
06561         NullType,
06562         NullType,
06563         NullType,
06564         NullType,
06565         NullType,
06566         NullType,
06567         NullType,
06568         NullType,
06569         NullType,
06570         NullType,
06571         NullType,
06572         NullType,
06573         NullType,
06574         NullType,
06575         NullType,
06576         NullType,
06577         NullType,
06578         NullType,
06579         NullType,
06580         NullType,
06581         NullType,
06582         NullType,
06583         NullType,
06584         NullType,
06585         NullType,
06586         NullType,
06587         NullType,
06588         NullType,
06589         NullType,
06590         NullType,
06591         NullType,
06592         NullType,
06593         NullType,
06594         NullType,
06595         NullType,
06596         NullType,
06597         NullType,
06598         NullType,
06599         NullType,
06600         NullType,
06601         NullType,
06602         NullType,
06603         NullType,
06604         NullType,
06605         NullType,
06606         NullType,
06607         NullType,
06608         NullType,
06609         NullType,
06610         NullType,
06611         NullType,
06612         NullType,
06613         NullType,
06614         NullType,
06615         NullType,
06616         NullType,
06617         NullType,
06618         NullType,
06619         NullType,
06620         NullType,
06621         NullType,
06622         NullType,
06623         NullType,
06624         NullType,
06625         NullType,
06626         NullType,
06627         NullType,
06628         NullType,
06629         NullType,
06630         NullType,
06631         NullType,
06632         NullType,
06633         NullType,
06634         NullType,
06635         NullType,
06636         NullType,
06637         NullType,
06638         NullType,
06639         NullType,
06640         NullType,
06641         NullType,
06642         NullType,
06643         NullType,
06644         NullType,
06645         NullType,
06646         NullType,
06647         NullType,
06648         NullType,
06649         NullType,
06650         NullType,
06651         NullType,
06652         NullType,
06653         NullType,
06654         NullType,
06655         NullType,
06656         NullType,
06657         NullType,
06658         NullType,
06659         NullType,
06660         NullType,
06661         NullType,
06662         NullType,
06663         NullType,
06664         NullType,
06665         NullType,
06666         NullType,
06667         NullType,
06668         NullType,
06669         NullType> FunctorType;
06670 
06671     FunctorType functor_;
06672 
06673     functionImplementation_(const FunctorType &functor) :
06674         functor_(functor)
06675     {
06676     }
06677         
06678     typedef std::tr1::function<Event (
06679         const EnqueueArgs&,
06680         T0,
06681         T1)> type_;
06682 
06683     Event operator()(const EnqueueArgs& enqueueArgs,
06684         T0 arg0,
06685         T1 arg1)
06686     {
06687         return functor_(
06688             enqueueArgs,
06689             arg0,
06690             arg1);
06691     }
06692 
06693     operator type_ ()    
06694     {
06695         return type_(*this);
06696     }
06697 
06698 };
06699 
06700 template<
06701     typename T0,
06702     typename T1,
06703     typename T2>
06704 struct functionImplementation_<
06705     T0,
06706     T1,
06707     T2,
06708     NullType,
06709     NullType,
06710     NullType,
06711     NullType,
06712     NullType,
06713     NullType,
06714     NullType,
06715     NullType,
06716     NullType,
06717     NullType,
06718     NullType,
06719     NullType,
06720     NullType,
06721     NullType,
06722     NullType,
06723     NullType,
06724     NullType,
06725     NullType,
06726     NullType,
06727     NullType,
06728     NullType,
06729     NullType,
06730     NullType,
06731     NullType,
06732     NullType,
06733     NullType,
06734     NullType,
06735     NullType,
06736     NullType,
06737     NullType,
06738     NullType,
06739     NullType,
06740     NullType,
06741     NullType,
06742     NullType,
06743     NullType,
06744     NullType,
06745     NullType,
06746     NullType,
06747     NullType,
06748     NullType,
06749     NullType,
06750     NullType,
06751     NullType,
06752     NullType,
06753     NullType,
06754     NullType,
06755     NullType,
06756     NullType,
06757     NullType,
06758     NullType,
06759     NullType,
06760     NullType,
06761     NullType,
06762     NullType,
06763     NullType,
06764     NullType,
06765     NullType,
06766     NullType,
06767     NullType,
06768     NullType,
06769     NullType,
06770     NullType,
06771     NullType,
06772     NullType,
06773     NullType,
06774     NullType,
06775     NullType,
06776     NullType,
06777     NullType,
06778     NullType,
06779     NullType,
06780     NullType,
06781     NullType,
06782     NullType,
06783     NullType,
06784     NullType,
06785     NullType,
06786     NullType,
06787     NullType,
06788     NullType,
06789     NullType,
06790     NullType,
06791     NullType,
06792     NullType,
06793     NullType,
06794     NullType,
06795     NullType,
06796     NullType,
06797     NullType,
06798     NullType,
06799     NullType,
06800     NullType,
06801     NullType,
06802     NullType,
06803     NullType,
06804     NullType,
06805     NullType,
06806     NullType,
06807     NullType,
06808     NullType,
06809     NullType,
06810     NullType,
06811     NullType,
06812     NullType,
06813     NullType,
06814     NullType,
06815     NullType,
06816     NullType,
06817     NullType,
06818     NullType,
06819     NullType,
06820     NullType,
06821     NullType,
06822     NullType,
06823     NullType,
06824     NullType,
06825     NullType,
06826     NullType,
06827     NullType,
06828     NullType,
06829     NullType,
06830     NullType,
06831     NullType,
06832     NullType>
06833 {
06834     typedef detail::KernelFunctorGlobal<
06835         T0,
06836         T1,
06837         T2,
06838         NullType,
06839         NullType,
06840         NullType,
06841         NullType,
06842         NullType,
06843         NullType,
06844         NullType,
06845         NullType,
06846         NullType,
06847         NullType,
06848         NullType,
06849         NullType,
06850         NullType,
06851         NullType,
06852         NullType,
06853         NullType,
06854         NullType,
06855         NullType,
06856         NullType,
06857         NullType,
06858         NullType,
06859         NullType,
06860         NullType,
06861         NullType,
06862         NullType,
06863         NullType,
06864         NullType,
06865         NullType,
06866         NullType,
06867         NullType,
06868         NullType,
06869         NullType,
06870         NullType,
06871         NullType,
06872         NullType,
06873         NullType,
06874         NullType,
06875         NullType,
06876         NullType,
06877         NullType,
06878         NullType,
06879         NullType,
06880         NullType,
06881         NullType,
06882         NullType,
06883         NullType,
06884         NullType,
06885         NullType,
06886         NullType,
06887         NullType,
06888         NullType,
06889         NullType,
06890         NullType,
06891         NullType,
06892         NullType,
06893         NullType,
06894         NullType,
06895         NullType,
06896         NullType,
06897         NullType,
06898         NullType,
06899         NullType,
06900         NullType,
06901         NullType,
06902         NullType,
06903         NullType,
06904         NullType,
06905         NullType,
06906         NullType,
06907         NullType,
06908         NullType,
06909         NullType,
06910         NullType,
06911         NullType,
06912         NullType,
06913         NullType,
06914         NullType,
06915         NullType,
06916         NullType,
06917         NullType,
06918         NullType,
06919         NullType,
06920         NullType,
06921         NullType,
06922         NullType,
06923         NullType,
06924         NullType,
06925         NullType,
06926         NullType,
06927         NullType,
06928         NullType,
06929         NullType,
06930         NullType,
06931         NullType,
06932         NullType,
06933         NullType,
06934         NullType,
06935         NullType,
06936         NullType,
06937         NullType,
06938         NullType,
06939         NullType,
06940         NullType,
06941         NullType,
06942         NullType,
06943         NullType,
06944         NullType,
06945         NullType,
06946         NullType,
06947         NullType,
06948         NullType,
06949         NullType,
06950         NullType,
06951         NullType,
06952         NullType,
06953         NullType,
06954         NullType,
06955         NullType,
06956         NullType,
06957         NullType,
06958         NullType,
06959         NullType,
06960         NullType,
06961         NullType,
06962         NullType> FunctorType;
06963 
06964     FunctorType functor_;
06965 
06966     functionImplementation_(const FunctorType &functor) :
06967         functor_(functor)
06968     {
06969     }
06970         
06971     typedef std::tr1::function<Event (
06972         const EnqueueArgs&,
06973         T0,
06974         T1,
06975         T2)> type_;
06976 
06977     Event operator()(const EnqueueArgs& enqueueArgs,
06978         T0 arg0,
06979         T1 arg1,
06980         T2 arg2)
06981     {
06982         return functor_(
06983             enqueueArgs,
06984             arg0,
06985             arg1,
06986             arg2);
06987     }
06988 
06989     operator type_ ()    
06990     {
06991         return type_(*this);
06992     }
06993 
06994 };
06995 
06996 template<
06997     typename T0,
06998     typename T1,
06999     typename T2,
07000     typename T3>
07001 struct functionImplementation_<
07002     T0,
07003     T1,
07004     T2,
07005     T3,
07006     NullType,
07007     NullType,
07008     NullType,
07009     NullType,
07010     NullType,
07011     NullType,
07012     NullType,
07013     NullType,
07014     NullType,
07015     NullType,
07016     NullType,
07017     NullType,
07018     NullType,
07019     NullType,
07020     NullType,
07021     NullType,
07022     NullType,
07023     NullType,
07024     NullType,
07025     NullType,
07026     NullType,
07027     NullType,
07028     NullType,
07029     NullType,
07030     NullType,
07031     NullType,
07032     NullType,
07033     NullType,
07034     NullType,
07035     NullType,
07036     NullType,
07037     NullType,
07038     NullType,
07039     NullType,
07040     NullType,
07041     NullType,
07042     NullType,
07043     NullType,
07044     NullType,
07045     NullType,
07046     NullType,
07047     NullType,
07048     NullType,
07049     NullType,
07050     NullType,
07051     NullType,
07052     NullType,
07053     NullType,
07054     NullType,
07055     NullType,
07056     NullType,
07057     NullType,
07058     NullType,
07059     NullType,
07060     NullType,
07061     NullType,
07062     NullType,
07063     NullType,
07064     NullType,
07065     NullType,
07066     NullType,
07067     NullType,
07068     NullType,
07069     NullType,
07070     NullType,
07071     NullType,
07072     NullType,
07073     NullType,
07074     NullType,
07075     NullType,
07076     NullType,
07077     NullType,
07078     NullType,
07079     NullType,
07080     NullType,
07081     NullType,
07082     NullType,
07083     NullType,
07084     NullType,
07085     NullType,
07086     NullType,
07087     NullType,
07088     NullType,
07089     NullType,
07090     NullType,
07091     NullType,
07092     NullType,
07093     NullType,
07094     NullType,
07095     NullType,
07096     NullType,
07097     NullType,
07098     NullType,
07099     NullType,
07100     NullType,
07101     NullType,
07102     NullType,
07103     NullType,
07104     NullType,
07105     NullType,
07106     NullType,
07107     NullType,
07108     NullType,
07109     NullType,
07110     NullType,
07111     NullType,
07112     NullType,
07113     NullType,
07114     NullType,
07115     NullType,
07116     NullType,
07117     NullType,
07118     NullType,
07119     NullType,
07120     NullType,
07121     NullType,
07122     NullType,
07123     NullType,
07124     NullType,
07125     NullType,
07126     NullType,
07127     NullType,
07128     NullType,
07129     NullType>
07130 {
07131     typedef detail::KernelFunctorGlobal<
07132         T0,
07133         T1,
07134         T2,
07135         T3,
07136         NullType,
07137         NullType,
07138         NullType,
07139         NullType,
07140         NullType,
07141         NullType,
07142         NullType,
07143         NullType,
07144         NullType,
07145         NullType,
07146         NullType,
07147         NullType,
07148         NullType,
07149         NullType,
07150         NullType,
07151         NullType,
07152         NullType,
07153         NullType,
07154         NullType,
07155         NullType,
07156         NullType,
07157         NullType,
07158         NullType,
07159         NullType,
07160         NullType,
07161         NullType,
07162         NullType,
07163         NullType,
07164         NullType,
07165         NullType,
07166         NullType,
07167         NullType,
07168         NullType,
07169         NullType,
07170         NullType,
07171         NullType,
07172         NullType,
07173         NullType,
07174         NullType,
07175         NullType,
07176         NullType,
07177         NullType,
07178         NullType,
07179         NullType,
07180         NullType,
07181         NullType,
07182         NullType,
07183         NullType,
07184         NullType,
07185         NullType,
07186         NullType,
07187         NullType,
07188         NullType,
07189         NullType,
07190         NullType,
07191         NullType,
07192         NullType,
07193         NullType,
07194         NullType,
07195         NullType,
07196         NullType,
07197         NullType,
07198         NullType,
07199         NullType,
07200         NullType,
07201         NullType,
07202         NullType,
07203         NullType,
07204         NullType,
07205         NullType,
07206         NullType,
07207         NullType,
07208         NullType,
07209         NullType,
07210         NullType,
07211         NullType,
07212         NullType,
07213         NullType,
07214         NullType,
07215         NullType,
07216         NullType,
07217         NullType,
07218         NullType,
07219         NullType,
07220         NullType,
07221         NullType,
07222         NullType,
07223         NullType,
07224         NullType,
07225         NullType,
07226         NullType,
07227         NullType,
07228         NullType,
07229         NullType,
07230         NullType,
07231         NullType,
07232         NullType,
07233         NullType,
07234         NullType,
07235         NullType,
07236         NullType,
07237         NullType,
07238         NullType,
07239         NullType,
07240         NullType,
07241         NullType,
07242         NullType,
07243         NullType,
07244         NullType,
07245         NullType,
07246         NullType,
07247         NullType,
07248         NullType,
07249         NullType,
07250         NullType,
07251         NullType,
07252         NullType,
07253         NullType,
07254         NullType,
07255         NullType,
07256         NullType,
07257         NullType,
07258         NullType,
07259         NullType> FunctorType;
07260 
07261     FunctorType functor_;
07262 
07263     functionImplementation_(const FunctorType &functor) :
07264         functor_(functor)
07265     {
07266     }
07267         
07268     typedef std::tr1::function<Event (
07269         const EnqueueArgs&,
07270         T0,
07271         T1,
07272         T2,
07273         T3)> type_;
07274 
07275     Event operator()(const EnqueueArgs& enqueueArgs,
07276         T0 arg0,
07277         T1 arg1,
07278         T2 arg2,
07279         T3 arg3)
07280     {
07281         return functor_(
07282             enqueueArgs,
07283             arg0,
07284             arg1,
07285             arg2,
07286             arg3);
07287     }
07288 
07289     operator type_ ()    
07290     {
07291         return type_(*this);
07292     }
07293 
07294 };
07295 
07296 template<
07297     typename T0,
07298     typename T1,
07299     typename T2,
07300     typename T3,
07301     typename T4>
07302 struct functionImplementation_<
07303     T0,
07304     T1,
07305     T2,
07306     T3,
07307     T4,
07308     NullType,
07309     NullType,
07310     NullType,
07311     NullType,
07312     NullType,
07313     NullType,
07314     NullType,
07315     NullType,
07316     NullType,
07317     NullType,
07318     NullType,
07319     NullType,
07320     NullType,
07321     NullType,
07322     NullType,
07323     NullType,
07324     NullType,
07325     NullType,
07326     NullType,
07327     NullType,
07328     NullType,
07329     NullType,
07330     NullType,
07331     NullType,
07332     NullType,
07333     NullType,
07334     NullType,
07335     NullType,
07336     NullType,
07337     NullType,
07338     NullType,
07339     NullType,
07340     NullType,
07341     NullType,
07342     NullType,
07343     NullType,
07344     NullType,
07345     NullType,
07346     NullType,
07347     NullType,
07348     NullType,
07349     NullType,
07350     NullType,
07351     NullType,
07352     NullType,
07353     NullType,
07354     NullType,
07355     NullType,
07356     NullType,
07357     NullType,
07358     NullType,
07359     NullType,
07360     NullType,
07361     NullType,
07362     NullType,
07363     NullType,
07364     NullType,
07365     NullType,
07366     NullType,
07367     NullType,
07368     NullType,
07369     NullType,
07370     NullType,
07371     NullType,
07372     NullType,
07373     NullType,
07374     NullType,
07375     NullType,
07376     NullType,
07377     NullType,
07378     NullType,
07379     NullType,
07380     NullType,
07381     NullType,
07382     NullType,
07383     NullType,
07384     NullType,
07385     NullType,
07386     NullType,
07387     NullType,
07388     NullType,
07389     NullType,
07390     NullType,
07391     NullType,
07392     NullType,
07393     NullType,
07394     NullType,
07395     NullType,
07396     NullType,
07397     NullType,
07398     NullType,
07399     NullType,
07400     NullType,
07401     NullType,
07402     NullType,
07403     NullType,
07404     NullType,
07405     NullType,
07406     NullType,
07407     NullType,
07408     NullType,
07409     NullType,
07410     NullType,
07411     NullType,
07412     NullType,
07413     NullType,
07414     NullType,
07415     NullType,
07416     NullType,
07417     NullType,
07418     NullType,
07419     NullType,
07420     NullType,
07421     NullType,
07422     NullType,
07423     NullType,
07424     NullType,
07425     NullType,
07426     NullType,
07427     NullType,
07428     NullType,
07429     NullType,
07430     NullType>
07431 {
07432     typedef detail::KernelFunctorGlobal<
07433         T0,
07434         T1,
07435         T2,
07436         T3,
07437         T4,
07438         NullType,
07439         NullType,
07440         NullType,
07441         NullType,
07442         NullType,
07443         NullType,
07444         NullType,
07445         NullType,
07446         NullType,
07447         NullType,
07448         NullType,
07449         NullType,
07450         NullType,
07451         NullType,
07452         NullType,
07453         NullType,
07454         NullType,
07455         NullType,
07456         NullType,
07457         NullType,
07458         NullType,
07459         NullType,
07460         NullType,
07461         NullType,
07462         NullType,
07463         NullType,
07464         NullType,
07465         NullType,
07466         NullType,
07467         NullType,
07468         NullType,
07469         NullType,
07470         NullType,
07471         NullType,
07472         NullType,
07473         NullType,
07474         NullType,
07475         NullType,
07476         NullType,
07477         NullType,
07478         NullType,
07479         NullType,
07480         NullType,
07481         NullType,
07482         NullType,
07483         NullType,
07484         NullType,
07485         NullType,
07486         NullType,
07487         NullType,
07488         NullType,
07489         NullType,
07490         NullType,
07491         NullType,
07492         NullType,
07493         NullType,
07494         NullType,
07495         NullType,
07496         NullType,
07497         NullType,
07498         NullType,
07499         NullType,
07500         NullType,
07501         NullType,
07502         NullType,
07503         NullType,
07504         NullType,
07505         NullType,
07506         NullType,
07507         NullType,
07508         NullType,
07509         NullType,
07510         NullType,
07511         NullType,
07512         NullType,
07513         NullType,
07514         NullType,
07515         NullType,
07516         NullType,
07517         NullType,
07518         NullType,
07519         NullType,
07520         NullType,
07521         NullType,
07522         NullType,
07523         NullType,
07524         NullType,
07525         NullType,
07526         NullType,
07527         NullType,
07528         NullType,
07529         NullType,
07530         NullType,
07531         NullType,
07532         NullType,
07533         NullType,
07534         NullType,
07535         NullType,
07536         NullType,
07537         NullType,
07538         NullType,
07539         NullType,
07540         NullType,
07541         NullType,
07542         NullType,
07543         NullType,
07544         NullType,
07545         NullType,
07546         NullType,
07547         NullType,
07548         NullType,
07549         NullType,
07550         NullType,
07551         NullType,
07552         NullType,
07553         NullType,
07554         NullType,
07555         NullType,
07556         NullType,
07557         NullType,
07558         NullType,
07559         NullType,
07560         NullType> FunctorType;
07561 
07562     FunctorType functor_;
07563 
07564     functionImplementation_(const FunctorType &functor) :
07565         functor_(functor)
07566     {
07567     }
07568         
07569     typedef std::tr1::function<Event (
07570         const EnqueueArgs&,
07571         T0,
07572         T1,
07573         T2,
07574         T3,
07575         T4)> type_;
07576 
07577     Event operator()(const EnqueueArgs& enqueueArgs,
07578         T0 arg0,
07579         T1 arg1,
07580         T2 arg2,
07581         T3 arg3,
07582         T4 arg4)
07583     {
07584         return functor_(
07585             enqueueArgs,
07586             arg0,
07587             arg1,
07588             arg2,
07589             arg3,
07590             arg4);
07591     }
07592 
07593     operator type_ ()    
07594     {
07595         return type_(*this);
07596     }
07597 
07598 };
07599 
07600 template<
07601     typename T0,
07602     typename T1,
07603     typename T2,
07604     typename T3,
07605     typename T4,
07606     typename T5>
07607 struct functionImplementation_<
07608     T0,
07609     T1,
07610     T2,
07611     T3,
07612     T4,
07613     T5,
07614     NullType,
07615     NullType,
07616     NullType,
07617     NullType,
07618     NullType,
07619     NullType,
07620     NullType,
07621     NullType,
07622     NullType,
07623     NullType,
07624     NullType,
07625     NullType,
07626     NullType,
07627     NullType,
07628     NullType,
07629     NullType,
07630     NullType,
07631     NullType,
07632     NullType,
07633     NullType,
07634     NullType,
07635     NullType,
07636     NullType,
07637     NullType,
07638     NullType,
07639     NullType,
07640     NullType,
07641     NullType,
07642     NullType,
07643     NullType,
07644     NullType,
07645     NullType,
07646     NullType,
07647     NullType,
07648     NullType,
07649     NullType,
07650     NullType,
07651     NullType,
07652     NullType,
07653     NullType,
07654     NullType,
07655     NullType,
07656     NullType,
07657     NullType,
07658     NullType,
07659     NullType,
07660     NullType,
07661     NullType,
07662     NullType,
07663     NullType,
07664     NullType,
07665     NullType,
07666     NullType,
07667     NullType,
07668     NullType,
07669     NullType,
07670     NullType,
07671     NullType,
07672     NullType,
07673     NullType,
07674     NullType,
07675     NullType,
07676     NullType,
07677     NullType,
07678     NullType,
07679     NullType,
07680     NullType,
07681     NullType,
07682     NullType,
07683     NullType,
07684     NullType,
07685     NullType,
07686     NullType,
07687     NullType,
07688     NullType,
07689     NullType,
07690     NullType,
07691     NullType,
07692     NullType,
07693     NullType,
07694     NullType,
07695     NullType,
07696     NullType,
07697     NullType,
07698     NullType,
07699     NullType,
07700     NullType,
07701     NullType,
07702     NullType,
07703     NullType,
07704     NullType,
07705     NullType,
07706     NullType,
07707     NullType,
07708     NullType,
07709     NullType,
07710     NullType,
07711     NullType,
07712     NullType,
07713     NullType,
07714     NullType,
07715     NullType,
07716     NullType,
07717     NullType,
07718     NullType,
07719     NullType,
07720     NullType,
07721     NullType,
07722     NullType,
07723     NullType,
07724     NullType,
07725     NullType,
07726     NullType,
07727     NullType,
07728     NullType,
07729     NullType,
07730     NullType,
07731     NullType,
07732     NullType,
07733     NullType,
07734     NullType,
07735     NullType>
07736 {
07737     typedef detail::KernelFunctorGlobal<
07738         T0,
07739         T1,
07740         T2,
07741         T3,
07742         T4,
07743         T5,
07744         NullType,
07745         NullType,
07746         NullType,
07747         NullType,
07748         NullType,
07749         NullType,
07750         NullType,
07751         NullType,
07752         NullType,
07753         NullType,
07754         NullType,
07755         NullType,
07756         NullType,
07757         NullType,
07758         NullType,
07759         NullType,
07760         NullType,
07761         NullType,
07762         NullType,
07763         NullType,
07764         NullType,
07765         NullType,
07766         NullType,
07767         NullType,
07768         NullType,
07769         NullType,
07770         NullType,
07771         NullType,
07772         NullType,
07773         NullType,
07774         NullType,
07775         NullType,
07776         NullType,
07777         NullType,
07778         NullType,
07779         NullType,
07780         NullType,
07781         NullType,
07782         NullType,
07783         NullType,
07784         NullType,
07785         NullType,
07786         NullType,
07787         NullType,
07788         NullType,
07789         NullType,
07790         NullType,
07791         NullType,
07792         NullType,
07793         NullType,
07794         NullType,
07795         NullType,
07796         NullType,
07797         NullType,
07798         NullType,
07799         NullType,
07800         NullType,
07801         NullType,
07802         NullType,
07803         NullType,
07804         NullType,
07805         NullType,
07806         NullType,
07807         NullType,
07808         NullType,
07809         NullType,
07810         NullType,
07811         NullType,
07812         NullType,
07813         NullType,
07814         NullType,
07815         NullType,
07816         NullType,
07817         NullType,
07818         NullType,
07819         NullType,
07820         NullType,
07821         NullType,
07822         NullType,
07823         NullType,
07824         NullType,
07825         NullType,
07826         NullType,
07827         NullType,
07828         NullType,
07829         NullType,
07830         NullType,
07831         NullType,
07832         NullType,
07833         NullType,
07834         NullType,
07835         NullType,
07836         NullType,
07837         NullType,
07838         NullType,
07839         NullType,
07840         NullType,
07841         NullType,
07842         NullType,
07843         NullType,
07844         NullType,
07845         NullType,
07846         NullType,
07847         NullType,
07848         NullType,
07849         NullType,
07850         NullType,
07851         NullType,
07852         NullType,
07853         NullType,
07854         NullType,
07855         NullType,
07856         NullType,
07857         NullType,
07858         NullType,
07859         NullType,
07860         NullType,
07861         NullType,
07862         NullType,
07863         NullType,
07864         NullType,
07865         NullType> FunctorType;
07866 
07867     FunctorType functor_;
07868 
07869     functionImplementation_(const FunctorType &functor) :
07870         functor_(functor)
07871     {
07872     }
07873         
07874     typedef std::tr1::function<Event (
07875         const EnqueueArgs&,
07876         T0,
07877         T1,
07878         T2,
07879         T3,
07880         T4,
07881         T5)> type_;
07882 
07883     Event operator()(const EnqueueArgs& enqueueArgs,
07884         T0 arg0,
07885         T1 arg1,
07886         T2 arg2,
07887         T3 arg3,
07888         T4 arg4,
07889         T5 arg5)
07890     {
07891         return functor_(
07892             enqueueArgs,
07893             arg0,
07894             arg1,
07895             arg2,
07896             arg3,
07897             arg4,
07898             arg5);
07899     }
07900 
07901     operator type_ ()    
07902     {
07903         return type_(*this);
07904     }
07905 
07906 };
07907 
07908 template<
07909     typename T0,
07910     typename T1,
07911     typename T2,
07912     typename T3,
07913     typename T4,
07914     typename T5,
07915     typename T6>
07916 struct functionImplementation_<
07917     T0,
07918     T1,
07919     T2,
07920     T3,
07921     T4,
07922     T5,
07923     T6,
07924     NullType,
07925     NullType,
07926     NullType,
07927     NullType,
07928     NullType,
07929     NullType,
07930     NullType,
07931     NullType,
07932     NullType,
07933     NullType,
07934     NullType,
07935     NullType,
07936     NullType,
07937     NullType,
07938     NullType,
07939     NullType,
07940     NullType,
07941     NullType,
07942     NullType,
07943     NullType,
07944     NullType,
07945     NullType,
07946     NullType,
07947     NullType,
07948     NullType,
07949     NullType,
07950     NullType,
07951     NullType,
07952     NullType,
07953     NullType,
07954     NullType,
07955     NullType,
07956     NullType,
07957     NullType,
07958     NullType,
07959     NullType,
07960     NullType,
07961     NullType,
07962     NullType,
07963     NullType,
07964     NullType,
07965     NullType,
07966     NullType,
07967     NullType,
07968     NullType,
07969     NullType,
07970     NullType,
07971     NullType,
07972     NullType,
07973     NullType,
07974     NullType,
07975     NullType,
07976     NullType,
07977     NullType,
07978     NullType,
07979     NullType,
07980     NullType,
07981     NullType,
07982     NullType,
07983     NullType,
07984     NullType,
07985     NullType,
07986     NullType,
07987     NullType,
07988     NullType,
07989     NullType,
07990     NullType,
07991     NullType,
07992     NullType,
07993     NullType,
07994     NullType,
07995     NullType,
07996     NullType,
07997     NullType,
07998     NullType,
07999     NullType,
08000     NullType,
08001     NullType,
08002     NullType,
08003     NullType,
08004     NullType,
08005     NullType,
08006     NullType,
08007     NullType,
08008     NullType,
08009     NullType,
08010     NullType,
08011     NullType,
08012     NullType,
08013     NullType,
08014     NullType,
08015     NullType,
08016     NullType,
08017     NullType,
08018     NullType,
08019     NullType,
08020     NullType,
08021     NullType,
08022     NullType,
08023     NullType,
08024     NullType,
08025     NullType,
08026     NullType,
08027     NullType,
08028     NullType,
08029     NullType,
08030     NullType,
08031     NullType,
08032     NullType,
08033     NullType,
08034     NullType,
08035     NullType,
08036     NullType,
08037     NullType,
08038     NullType,
08039     NullType,
08040     NullType,
08041     NullType,
08042     NullType,
08043     NullType,
08044     NullType>
08045 {
08046     typedef detail::KernelFunctorGlobal<
08047         T0,
08048         T1,
08049         T2,
08050         T3,
08051         T4,
08052         T5,
08053         T6,
08054         NullType,
08055         NullType,
08056         NullType,
08057         NullType,
08058         NullType,
08059         NullType,
08060         NullType,
08061         NullType,
08062         NullType,
08063         NullType,
08064         NullType,
08065         NullType,
08066         NullType,
08067         NullType,
08068         NullType,
08069         NullType,
08070         NullType,
08071         NullType,
08072         NullType,
08073         NullType,
08074         NullType,
08075         NullType,
08076         NullType,
08077         NullType,
08078         NullType,
08079         NullType,
08080         NullType,
08081         NullType,
08082         NullType,
08083         NullType,
08084         NullType,
08085         NullType,
08086         NullType,
08087         NullType,
08088         NullType,
08089         NullType,
08090         NullType,
08091         NullType,
08092         NullType,
08093         NullType,
08094         NullType,
08095         NullType,
08096         NullType,
08097         NullType,
08098         NullType,
08099         NullType,
08100         NullType,
08101         NullType,
08102         NullType,
08103         NullType,
08104         NullType,
08105         NullType,
08106         NullType,
08107         NullType,
08108         NullType,
08109         NullType,
08110         NullType,
08111         NullType,
08112         NullType,
08113         NullType,
08114         NullType,
08115         NullType,
08116         NullType,
08117         NullType,
08118         NullType,
08119         NullType,
08120         NullType,
08121         NullType,
08122         NullType,
08123         NullType,
08124         NullType,
08125         NullType,
08126         NullType,
08127         NullType,
08128         NullType,
08129         NullType,
08130         NullType,
08131         NullType,
08132         NullType,
08133         NullType,
08134         NullType,
08135         NullType,
08136         NullType,
08137         NullType,
08138         NullType,
08139         NullType,
08140         NullType,
08141         NullType,
08142         NullType,
08143         NullType,
08144         NullType,
08145         NullType,
08146         NullType,
08147         NullType,
08148         NullType,
08149         NullType,
08150         NullType,
08151         NullType,
08152         NullType,
08153         NullType,
08154         NullType,
08155         NullType,
08156         NullType,
08157         NullType,
08158         NullType,
08159         NullType,
08160         NullType,
08161         NullType,
08162         NullType,
08163         NullType,
08164         NullType,
08165         NullType,
08166         NullType,
08167         NullType,
08168         NullType,
08169         NullType,
08170         NullType,
08171         NullType,
08172         NullType,
08173         NullType,
08174         NullType> FunctorType;
08175 
08176     FunctorType functor_;
08177 
08178     functionImplementation_(const FunctorType &functor) :
08179         functor_(functor)
08180     {
08181     }
08182         
08183     typedef std::tr1::function<Event (
08184         const EnqueueArgs&,
08185         T0,
08186         T1,
08187         T2,
08188         T3,
08189         T4,
08190         T5,
08191         T6)> type_;
08192 
08193     Event operator()(const EnqueueArgs& enqueueArgs,
08194         T0 arg0,
08195         T1 arg1,
08196         T2 arg2,
08197         T3 arg3,
08198         T4 arg4,
08199         T5 arg5,
08200         T6 arg6)
08201     {
08202         return functor_(
08203             enqueueArgs,
08204             arg0,
08205             arg1,
08206             arg2,
08207             arg3,
08208             arg4,
08209             arg5,
08210             arg6);
08211     }
08212 
08213     operator type_ ()    
08214     {
08215         return type_(*this);
08216     }
08217 
08218 };
08219 
08220 template<
08221     typename T0,
08222     typename T1,
08223     typename T2,
08224     typename T3,
08225     typename T4,
08226     typename T5,
08227     typename T6,
08228     typename T7>
08229 struct functionImplementation_<
08230     T0,
08231     T1,
08232     T2,
08233     T3,
08234     T4,
08235     T5,
08236     T6,
08237     T7,
08238     NullType,
08239     NullType,
08240     NullType,
08241     NullType,
08242     NullType,
08243     NullType,
08244     NullType,
08245     NullType,
08246     NullType,
08247     NullType,
08248     NullType,
08249     NullType,
08250     NullType,
08251     NullType,
08252     NullType,
08253     NullType,
08254     NullType,
08255     NullType,
08256     NullType,
08257     NullType,
08258     NullType,
08259     NullType,
08260     NullType,
08261     NullType,
08262     NullType,
08263     NullType,
08264     NullType,
08265     NullType,
08266     NullType,
08267     NullType,
08268     NullType,
08269     NullType,
08270     NullType,
08271     NullType,
08272     NullType,
08273     NullType,
08274     NullType,
08275     NullType,
08276     NullType,
08277     NullType,
08278     NullType,
08279     NullType,
08280     NullType,
08281     NullType,
08282     NullType,
08283     NullType,
08284     NullType,
08285     NullType,
08286     NullType,
08287     NullType,
08288     NullType,
08289     NullType,
08290     NullType,
08291     NullType,
08292     NullType,
08293     NullType,
08294     NullType,
08295     NullType,
08296     NullType,
08297     NullType,
08298     NullType,
08299     NullType,
08300     NullType,
08301     NullType,
08302     NullType,
08303     NullType,
08304     NullType,
08305     NullType,
08306     NullType,
08307     NullType,
08308     NullType,
08309     NullType,
08310     NullType,
08311     NullType,
08312     NullType,
08313     NullType,
08314     NullType,
08315     NullType,
08316     NullType,
08317     NullType,
08318     NullType,
08319     NullType,
08320     NullType,
08321     NullType,
08322     NullType,
08323     NullType,
08324     NullType,
08325     NullType,
08326     NullType,
08327     NullType,
08328     NullType,
08329     NullType,
08330     NullType,
08331     NullType,
08332     NullType,
08333     NullType,
08334     NullType,
08335     NullType,
08336     NullType,
08337     NullType,
08338     NullType,
08339     NullType,
08340     NullType,
08341     NullType,
08342     NullType,
08343     NullType,
08344     NullType,
08345     NullType,
08346     NullType,
08347     NullType,
08348     NullType,
08349     NullType,
08350     NullType,
08351     NullType,
08352     NullType,
08353     NullType,
08354     NullType,
08355     NullType,
08356     NullType,
08357     NullType>
08358 {
08359     typedef detail::KernelFunctorGlobal<
08360         T0,
08361         T1,
08362         T2,
08363         T3,
08364         T4,
08365         T5,
08366         T6,
08367         T7,
08368         NullType,
08369         NullType,
08370         NullType,
08371         NullType,
08372         NullType,
08373         NullType,
08374         NullType,
08375         NullType,
08376         NullType,
08377         NullType,
08378         NullType,
08379         NullType,
08380         NullType,
08381         NullType,
08382         NullType,
08383         NullType,
08384         NullType,
08385         NullType,
08386         NullType,
08387         NullType,
08388         NullType,
08389         NullType,
08390         NullType,
08391         NullType,
08392         NullType,
08393         NullType,
08394         NullType,
08395         NullType,
08396         NullType,
08397         NullType,
08398         NullType,
08399         NullType,
08400         NullType,
08401         NullType,
08402         NullType,
08403         NullType,
08404         NullType,
08405         NullType,
08406         NullType,
08407         NullType,
08408         NullType,
08409         NullType,
08410         NullType,
08411         NullType,
08412         NullType,
08413         NullType,
08414         NullType,
08415         NullType,
08416         NullType,
08417         NullType,
08418         NullType,
08419         NullType,
08420         NullType,
08421         NullType,
08422         NullType,
08423         NullType,
08424         NullType,
08425         NullType,
08426         NullType,
08427         NullType,
08428         NullType,
08429         NullType,
08430         NullType,
08431         NullType,
08432         NullType,
08433         NullType,
08434         NullType,
08435         NullType,
08436         NullType,
08437         NullType,
08438         NullType,
08439         NullType,
08440         NullType,
08441         NullType,
08442         NullType,
08443         NullType,
08444         NullType,
08445         NullType,
08446         NullType,
08447         NullType,
08448         NullType,
08449         NullType,
08450         NullType,
08451         NullType,
08452         NullType,
08453         NullType,
08454         NullType,
08455         NullType,
08456         NullType,
08457         NullType,
08458         NullType,
08459         NullType,
08460         NullType,
08461         NullType,
08462         NullType,
08463         NullType,
08464         NullType,
08465         NullType,
08466         NullType,
08467         NullType,
08468         NullType,
08469         NullType,
08470         NullType,
08471         NullType,
08472         NullType,
08473         NullType,
08474         NullType,
08475         NullType,
08476         NullType,
08477         NullType,
08478         NullType,
08479         NullType,
08480         NullType,
08481         NullType,
08482         NullType,
08483         NullType,
08484         NullType,
08485         NullType,
08486         NullType,
08487         NullType> FunctorType;
08488 
08489     FunctorType functor_;
08490 
08491     functionImplementation_(const FunctorType &functor) :
08492         functor_(functor)
08493     {
08494     }
08495         
08496     typedef std::tr1::function<Event (
08497         const EnqueueArgs&,
08498         T0,
08499         T1,
08500         T2,
08501         T3,
08502         T4,
08503         T5,
08504         T6,
08505         T7)> type_;
08506 
08507     Event operator()(const EnqueueArgs& enqueueArgs,
08508         T0 arg0,
08509         T1 arg1,
08510         T2 arg2,
08511         T3 arg3,
08512         T4 arg4,
08513         T5 arg5,
08514         T6 arg6,
08515         T7 arg7)
08516     {
08517         return functor_(
08518             enqueueArgs,
08519             arg0,
08520             arg1,
08521             arg2,
08522             arg3,
08523             arg4,
08524             arg5,
08525             arg6,
08526             arg7);
08527     }
08528 
08529     operator type_ ()    
08530     {
08531         return type_(*this);
08532     }
08533 
08534 };
08535 
08536 template<
08537     typename T0,
08538     typename T1,
08539     typename T2,
08540     typename T3,
08541     typename T4,
08542     typename T5,
08543     typename T6,
08544     typename T7,
08545     typename T8>
08546 struct functionImplementation_<
08547     T0,
08548     T1,
08549     T2,
08550     T3,
08551     T4,
08552     T5,
08553     T6,
08554     T7,
08555     T8,
08556     NullType,
08557     NullType,
08558     NullType,
08559     NullType,
08560     NullType,
08561     NullType,
08562     NullType,
08563     NullType,
08564     NullType,
08565     NullType,
08566     NullType,
08567     NullType,
08568     NullType,
08569     NullType,
08570     NullType,
08571     NullType,
08572     NullType,
08573     NullType,
08574     NullType,
08575     NullType,
08576     NullType,
08577     NullType,
08578     NullType,
08579     NullType,
08580     NullType,
08581     NullType,
08582     NullType,
08583     NullType,
08584     NullType,
08585     NullType,
08586     NullType,
08587     NullType,
08588     NullType,
08589     NullType,
08590     NullType,
08591     NullType,
08592     NullType,
08593     NullType,
08594     NullType,
08595     NullType,
08596     NullType,
08597     NullType,
08598     NullType,
08599     NullType,
08600     NullType,
08601     NullType,
08602     NullType,
08603     NullType,
08604     NullType,
08605     NullType,
08606     NullType,
08607     NullType,
08608     NullType,
08609     NullType,
08610     NullType,
08611     NullType,
08612     NullType,
08613     NullType,
08614     NullType,
08615     NullType,
08616     NullType,
08617     NullType,
08618     NullType,
08619     NullType,
08620     NullType,
08621     NullType,
08622     NullType,
08623     NullType,
08624     NullType,
08625     NullType,
08626     NullType,
08627     NullType,
08628     NullType,
08629     NullType,
08630     NullType,
08631     NullType,
08632     NullType,
08633     NullType,
08634     NullType,
08635     NullType,
08636     NullType,
08637     NullType,
08638     NullType,
08639     NullType,
08640     NullType,
08641     NullType,
08642     NullType,
08643     NullType,
08644     NullType,
08645     NullType,
08646     NullType,
08647     NullType,
08648     NullType,
08649     NullType,
08650     NullType,
08651     NullType,
08652     NullType,
08653     NullType,
08654     NullType,
08655     NullType,
08656     NullType,
08657     NullType,
08658     NullType,
08659     NullType,
08660     NullType,
08661     NullType,
08662     NullType,
08663     NullType,
08664     NullType,
08665     NullType,
08666     NullType,
08667     NullType,
08668     NullType,
08669     NullType,
08670     NullType,
08671     NullType,
08672     NullType,
08673     NullType,
08674     NullType>
08675 {
08676     typedef detail::KernelFunctorGlobal<
08677         T0,
08678         T1,
08679         T2,
08680         T3,
08681         T4,
08682         T5,
08683         T6,
08684         T7,
08685         T8,
08686         NullType,
08687         NullType,
08688         NullType,
08689         NullType,
08690         NullType,
08691         NullType,
08692         NullType,
08693         NullType,
08694         NullType,
08695         NullType,
08696         NullType,
08697         NullType,
08698         NullType,
08699         NullType,
08700         NullType,
08701         NullType,
08702         NullType,
08703         NullType,
08704         NullType,
08705         NullType,
08706         NullType,
08707         NullType,
08708         NullType,
08709         NullType,
08710         NullType,
08711         NullType,
08712         NullType,
08713         NullType,
08714         NullType,
08715         NullType,
08716         NullType,
08717         NullType,
08718         NullType,
08719         NullType,
08720         NullType,
08721         NullType,
08722         NullType,
08723         NullType,
08724         NullType,
08725         NullType,
08726         NullType,
08727         NullType,
08728         NullType,
08729         NullType,
08730         NullType,
08731         NullType,
08732         NullType,
08733         NullType,
08734         NullType,
08735         NullType,
08736         NullType,
08737         NullType,
08738         NullType,
08739         NullType,
08740         NullType,
08741         NullType,
08742         NullType,
08743         NullType,
08744         NullType,
08745         NullType,
08746         NullType,
08747         NullType,
08748         NullType,
08749         NullType,
08750         NullType,
08751         NullType,
08752         NullType,
08753         NullType,
08754         NullType,
08755         NullType,
08756         NullType,
08757         NullType,
08758         NullType,
08759         NullType,
08760         NullType,
08761         NullType,
08762         NullType,
08763         NullType,
08764         NullType,
08765         NullType,
08766         NullType,
08767         NullType,
08768         NullType,
08769         NullType,
08770         NullType,
08771         NullType,
08772         NullType,
08773         NullType,
08774         NullType,
08775         NullType,
08776         NullType,
08777         NullType,
08778         NullType,
08779         NullType,
08780         NullType,
08781         NullType,
08782         NullType,
08783         NullType,
08784         NullType,
08785         NullType,
08786         NullType,
08787         NullType,
08788         NullType,
08789         NullType,
08790         NullType,
08791         NullType,
08792         NullType,
08793         NullType,
08794         NullType,
08795         NullType,
08796         NullType,
08797         NullType,
08798         NullType,
08799         NullType,
08800         NullType,
08801         NullType,
08802         NullType,
08803         NullType,
08804         NullType> FunctorType;
08805 
08806     FunctorType functor_;
08807 
08808     functionImplementation_(const FunctorType &functor) :
08809         functor_(functor)
08810     {
08811     }
08812         
08813     typedef std::tr1::function<Event (
08814         const EnqueueArgs&,
08815         T0,
08816         T1,
08817         T2,
08818         T3,
08819         T4,
08820         T5,
08821         T6,
08822         T7,
08823         T8)> type_;
08824 
08825     Event operator()(const EnqueueArgs& enqueueArgs,
08826         T0 arg0,
08827         T1 arg1,
08828         T2 arg2,
08829         T3 arg3,
08830         T4 arg4,
08831         T5 arg5,
08832         T6 arg6,
08833         T7 arg7,
08834         T8 arg8)
08835     {
08836         return functor_(
08837             enqueueArgs,
08838             arg0,
08839             arg1,
08840             arg2,
08841             arg3,
08842             arg4,
08843             arg5,
08844             arg6,
08845             arg7,
08846             arg8);
08847     }
08848 
08849     operator type_ ()    
08850     {
08851         return type_(*this);
08852     }
08853 
08854 };
08855 
08856 template<
08857     typename T0,
08858     typename T1,
08859     typename T2,
08860     typename T3,
08861     typename T4,
08862     typename T5,
08863     typename T6,
08864     typename T7,
08865     typename T8,
08866     typename T9>
08867 struct functionImplementation_<
08868     T0,
08869     T1,
08870     T2,
08871     T3,
08872     T4,
08873     T5,
08874     T6,
08875     T7,
08876     T8,
08877     T9,
08878     NullType,
08879     NullType,
08880     NullType,
08881     NullType,
08882     NullType,
08883     NullType,
08884     NullType,
08885     NullType,
08886     NullType,
08887     NullType,
08888     NullType,
08889     NullType,
08890     NullType,
08891     NullType,
08892     NullType,
08893     NullType,
08894     NullType,
08895     NullType,
08896     NullType,
08897     NullType,
08898     NullType,
08899     NullType,
08900     NullType,
08901     NullType,
08902     NullType,
08903     NullType,
08904     NullType,
08905     NullType,
08906     NullType,
08907     NullType,
08908     NullType,
08909     NullType,
08910     NullType,
08911     NullType,
08912     NullType,
08913     NullType,
08914     NullType,
08915     NullType,
08916     NullType,
08917     NullType,
08918     NullType,
08919     NullType,
08920     NullType,
08921     NullType,
08922     NullType,
08923     NullType,
08924     NullType,
08925     NullType,
08926     NullType,
08927     NullType,
08928     NullType,
08929     NullType,
08930     NullType,
08931     NullType,
08932     NullType,
08933     NullType,
08934     NullType,
08935     NullType,
08936     NullType,
08937     NullType,
08938     NullType,
08939     NullType,
08940     NullType,
08941     NullType,
08942     NullType,
08943     NullType,
08944     NullType,
08945     NullType,
08946     NullType,
08947     NullType,
08948     NullType,
08949     NullType,
08950     NullType,
08951     NullType,
08952     NullType,
08953     NullType,
08954     NullType,
08955     NullType,
08956     NullType,
08957     NullType,
08958     NullType,
08959     NullType,
08960     NullType,
08961     NullType,
08962     NullType,
08963     NullType,
08964     NullType,
08965     NullType,
08966     NullType,
08967     NullType,
08968     NullType,
08969     NullType,
08970     NullType,
08971     NullType,
08972     NullType,
08973     NullType,
08974     NullType,
08975     NullType,
08976     NullType,
08977     NullType,
08978     NullType,
08979     NullType,
08980     NullType,
08981     NullType,
08982     NullType,
08983     NullType,
08984     NullType,
08985     NullType,
08986     NullType,
08987     NullType,
08988     NullType,
08989     NullType,
08990     NullType,
08991     NullType,
08992     NullType,
08993     NullType,
08994     NullType,
08995     NullType>
08996 {
08997     typedef detail::KernelFunctorGlobal<
08998         T0,
08999         T1,
09000         T2,
09001         T3,
09002         T4,
09003         T5,
09004         T6,
09005         T7,
09006         T8,
09007         T9,
09008         NullType,
09009         NullType,
09010         NullType,
09011         NullType,
09012         NullType,
09013         NullType,
09014         NullType,
09015         NullType,
09016         NullType,
09017         NullType,
09018         NullType,
09019         NullType,
09020         NullType,
09021         NullType,
09022         NullType,
09023         NullType,
09024         NullType,
09025         NullType,
09026         NullType,
09027         NullType,
09028         NullType,
09029         NullType,
09030         NullType,
09031         NullType,
09032         NullType,
09033         NullType,
09034         NullType,
09035         NullType,
09036         NullType,
09037         NullType,
09038         NullType,
09039         NullType,
09040         NullType,
09041         NullType,
09042         NullType,
09043         NullType,
09044         NullType,
09045         NullType,
09046         NullType,
09047         NullType,
09048         NullType,
09049         NullType,
09050         NullType,
09051         NullType,
09052         NullType,
09053         NullType,
09054         NullType,
09055         NullType,
09056         NullType,
09057         NullType,
09058         NullType,
09059         NullType,
09060         NullType,
09061         NullType,
09062         NullType,
09063         NullType,
09064         NullType,
09065         NullType,
09066         NullType,
09067         NullType,
09068         NullType,
09069         NullType,
09070         NullType,
09071         NullType,
09072         NullType,
09073         NullType,
09074         NullType,
09075         NullType,
09076         NullType,
09077         NullType,
09078         NullType,
09079         NullType,
09080         NullType,
09081         NullType,
09082         NullType,
09083         NullType,
09084         NullType,
09085         NullType,
09086         NullType,
09087         NullType,
09088         NullType,
09089         NullType,
09090         NullType,
09091         NullType,
09092         NullType,
09093         NullType,
09094         NullType,
09095         NullType,
09096         NullType,
09097         NullType,
09098         NullType,
09099         NullType,
09100         NullType,
09101         NullType,
09102         NullType,
09103         NullType,
09104         NullType,
09105         NullType,
09106         NullType,
09107         NullType,
09108         NullType,
09109         NullType,
09110         NullType,
09111         NullType,
09112         NullType,
09113         NullType,
09114         NullType,
09115         NullType,
09116         NullType,
09117         NullType,
09118         NullType,
09119         NullType,
09120         NullType,
09121         NullType,
09122         NullType,
09123         NullType,
09124         NullType,
09125         NullType> FunctorType;
09126 
09127     FunctorType functor_;
09128 
09129     functionImplementation_(const FunctorType &functor) :
09130         functor_(functor)
09131     {
09132     }
09133         
09134     typedef std::tr1::function<Event (
09135         const EnqueueArgs&,
09136         T0,
09137         T1,
09138         T2,
09139         T3,
09140         T4,
09141         T5,
09142         T6,
09143         T7,
09144         T8,
09145         T9)> type_;
09146 
09147     Event operator()(const EnqueueArgs& enqueueArgs,
09148         T0 arg0,
09149         T1 arg1,
09150         T2 arg2,
09151         T3 arg3,
09152         T4 arg4,
09153         T5 arg5,
09154         T6 arg6,
09155         T7 arg7,
09156         T8 arg8,
09157         T9 arg9)
09158     {
09159         return functor_(
09160             enqueueArgs,
09161             arg0,
09162             arg1,
09163             arg2,
09164             arg3,
09165             arg4,
09166             arg5,
09167             arg6,
09168             arg7,
09169             arg8,
09170             arg9);
09171     }
09172 
09173     operator type_ ()    
09174     {
09175         return type_(*this);
09176     }
09177 
09178 };
09179 
09180 template<
09181     typename T0,
09182     typename T1,
09183     typename T2,
09184     typename T3,
09185     typename T4,
09186     typename T5,
09187     typename T6,
09188     typename T7,
09189     typename T8,
09190     typename T9,
09191     typename T10>
09192 struct functionImplementation_<
09193     T0,
09194     T1,
09195     T2,
09196     T3,
09197     T4,
09198     T5,
09199     T6,
09200     T7,
09201     T8,
09202     T9,
09203     T10,
09204     NullType,
09205     NullType,
09206     NullType,
09207     NullType,
09208     NullType,
09209     NullType,
09210     NullType,
09211     NullType,
09212     NullType,
09213     NullType,
09214     NullType,
09215     NullType,
09216     NullType,
09217     NullType,
09218     NullType,
09219     NullType,
09220     NullType,
09221     NullType,
09222     NullType,
09223     NullType,
09224     NullType,
09225     NullType,
09226     NullType,
09227     NullType,
09228     NullType,
09229     NullType,
09230     NullType,
09231     NullType,
09232     NullType,
09233     NullType,
09234     NullType,
09235     NullType,
09236     NullType,
09237     NullType,
09238     NullType,
09239     NullType,
09240     NullType,
09241     NullType,
09242     NullType,
09243     NullType,
09244     NullType,
09245     NullType,
09246     NullType,
09247     NullType,
09248     NullType,
09249     NullType,
09250     NullType,
09251     NullType,
09252     NullType,
09253     NullType,
09254     NullType,
09255     NullType,
09256     NullType,
09257     NullType,
09258     NullType,
09259     NullType,
09260     NullType,
09261     NullType,
09262     NullType,
09263     NullType,
09264     NullType,
09265     NullType,
09266     NullType,
09267     NullType,
09268     NullType,
09269     NullType,
09270     NullType,
09271     NullType,
09272     NullType,
09273     NullType,
09274     NullType,
09275     NullType,
09276     NullType,
09277     NullType,
09278     NullType,
09279     NullType,
09280     NullType,
09281     NullType,
09282     NullType,
09283     NullType,
09284     NullType,
09285     NullType,
09286     NullType,
09287     NullType,
09288     NullType,
09289     NullType,
09290     NullType,
09291     NullType,
09292     NullType,
09293     NullType,
09294     NullType,
09295     NullType,
09296     NullType,
09297     NullType,
09298     NullType,
09299     NullType,
09300     NullType,
09301     NullType,
09302     NullType,
09303     NullType,
09304     NullType,
09305     NullType,
09306     NullType,
09307     NullType,
09308     NullType,
09309     NullType,
09310     NullType,
09311     NullType,
09312     NullType,
09313     NullType,
09314     NullType,
09315     NullType,
09316     NullType,
09317     NullType,
09318     NullType,
09319     NullType,
09320     NullType>
09321 {
09322     typedef detail::KernelFunctorGlobal<
09323         T0,
09324         T1,
09325         T2,
09326         T3,
09327         T4,
09328         T5,
09329         T6,
09330         T7,
09331         T8,
09332         T9,
09333         T10,
09334         NullType,
09335         NullType,
09336         NullType,
09337         NullType,
09338         NullType,
09339         NullType,
09340         NullType,
09341         NullType,
09342         NullType,
09343         NullType,
09344         NullType,
09345         NullType,
09346         NullType,
09347         NullType,
09348         NullType,
09349         NullType,
09350         NullType,
09351         NullType,
09352         NullType,
09353         NullType,
09354         NullType,
09355         NullType,
09356         NullType,
09357         NullType,
09358         NullType,
09359         NullType,
09360         NullType,
09361         NullType,
09362         NullType,
09363         NullType,
09364         NullType,
09365         NullType,
09366         NullType,
09367         NullType,
09368         NullType,
09369         NullType,
09370         NullType,
09371         NullType,
09372         NullType,
09373         NullType,
09374         NullType,
09375         NullType,
09376         NullType,
09377         NullType,
09378         NullType,
09379         NullType,
09380         NullType,
09381         NullType,
09382         NullType,
09383         NullType,
09384         NullType,
09385         NullType,
09386         NullType,
09387         NullType,
09388         NullType,
09389         NullType,
09390         NullType,
09391         NullType,
09392         NullType,
09393         NullType,
09394         NullType,
09395         NullType,
09396         NullType,
09397         NullType,
09398         NullType,
09399         NullType,
09400         NullType,
09401         NullType,
09402         NullType,
09403         NullType,
09404         NullType,
09405         NullType,
09406         NullType,
09407         NullType,
09408         NullType,
09409         NullType,
09410         NullType,
09411         NullType,
09412         NullType,
09413         NullType,
09414         NullType,
09415         NullType,
09416         NullType,
09417         NullType,
09418         NullType,
09419         NullType,
09420         NullType,
09421         NullType,
09422         NullType,
09423         NullType,
09424         NullType,
09425         NullType,
09426         NullType,
09427         NullType,
09428         NullType,
09429         NullType,
09430         NullType,
09431         NullType,
09432         NullType,
09433         NullType,
09434         NullType,
09435         NullType,
09436         NullType,
09437         NullType,
09438         NullType,
09439         NullType,
09440         NullType,
09441         NullType,
09442         NullType,
09443         NullType,
09444         NullType,
09445         NullType,
09446         NullType,
09447         NullType,
09448         NullType,
09449         NullType,
09450         NullType> FunctorType;
09451 
09452     FunctorType functor_;
09453 
09454     functionImplementation_(const FunctorType &functor) :
09455         functor_(functor)
09456     {
09457     }
09458         
09459     typedef std::tr1::function<Event (
09460         const EnqueueArgs&,
09461         T0,
09462         T1,
09463         T2,
09464         T3,
09465         T4,
09466         T5,
09467         T6,
09468         T7,
09469         T8,
09470         T9,
09471         T10)> type_;
09472 
09473     Event operator()(const EnqueueArgs& enqueueArgs,
09474         T0 arg0,
09475         T1 arg1,
09476         T2 arg2,
09477         T3 arg3,
09478         T4 arg4,
09479         T5 arg5,
09480         T6 arg6,
09481         T7 arg7,
09482         T8 arg8,
09483         T9 arg9,
09484         T10 arg10)
09485     {
09486         return functor_(
09487             enqueueArgs,
09488             arg0,
09489             arg1,
09490             arg2,
09491             arg3,
09492             arg4,
09493             arg5,
09494             arg6,
09495             arg7,
09496             arg8,
09497             arg9,
09498             arg10);
09499     }
09500 
09501     operator type_ ()    
09502     {
09503         return type_(*this);
09504     }
09505 
09506 };
09507 
09508 template<
09509     typename T0,
09510     typename T1,
09511     typename T2,
09512     typename T3,
09513     typename T4,
09514     typename T5,
09515     typename T6,
09516     typename T7,
09517     typename T8,
09518     typename T9,
09519     typename T10,
09520     typename T11>
09521 struct functionImplementation_<
09522     T0,
09523     T1,
09524     T2,
09525     T3,
09526     T4,
09527     T5,
09528     T6,
09529     T7,
09530     T8,
09531     T9,
09532     T10,
09533     T11,
09534     NullType,
09535     NullType,
09536     NullType,
09537     NullType,
09538     NullType,
09539     NullType,
09540     NullType,
09541     NullType,
09542     NullType,
09543     NullType,
09544     NullType,
09545     NullType,
09546     NullType,
09547     NullType,
09548     NullType,
09549     NullType,
09550     NullType,
09551     NullType,
09552     NullType,
09553     NullType,
09554     NullType,
09555     NullType,
09556     NullType,
09557     NullType,
09558     NullType,
09559     NullType,
09560     NullType,
09561     NullType,
09562     NullType,
09563     NullType,
09564     NullType,
09565     NullType,
09566     NullType,
09567     NullType,
09568     NullType,
09569     NullType,
09570     NullType,
09571     NullType,
09572     NullType,
09573     NullType,
09574     NullType,
09575     NullType,
09576     NullType,
09577     NullType,
09578     NullType,
09579     NullType,
09580     NullType,
09581     NullType,
09582     NullType,
09583     NullType,
09584     NullType,
09585     NullType,
09586     NullType,
09587     NullType,
09588     NullType,
09589     NullType,
09590     NullType,
09591     NullType,
09592     NullType,
09593     NullType,
09594     NullType,
09595     NullType,
09596     NullType,
09597     NullType,
09598     NullType,
09599     NullType,
09600     NullType,
09601     NullType,
09602     NullType,
09603     NullType,
09604     NullType,
09605     NullType,
09606     NullType,
09607     NullType,
09608     NullType,
09609     NullType,
09610     NullType,
09611     NullType,
09612     NullType,
09613     NullType,
09614     NullType,
09615     NullType,
09616     NullType,
09617     NullType,
09618     NullType,
09619     NullType,
09620     NullType,
09621     NullType,
09622     NullType,
09623     NullType,
09624     NullType,
09625     NullType,
09626     NullType,
09627     NullType,
09628     NullType,
09629     NullType,
09630     NullType,
09631     NullType,
09632     NullType,
09633     NullType,
09634     NullType,
09635     NullType,
09636     NullType,
09637     NullType,
09638     NullType,
09639     NullType,
09640     NullType,
09641     NullType,
09642     NullType,
09643     NullType,
09644     NullType,
09645     NullType,
09646     NullType,
09647     NullType,
09648     NullType,
09649     NullType>
09650 {
09651     typedef detail::KernelFunctorGlobal<
09652         T0,
09653         T1,
09654         T2,
09655         T3,
09656         T4,
09657         T5,
09658         T6,
09659         T7,
09660         T8,
09661         T9,
09662         T10,
09663         T11,
09664         NullType,
09665         NullType,
09666         NullType,
09667         NullType,
09668         NullType,
09669         NullType,
09670         NullType,
09671         NullType,
09672         NullType,
09673         NullType,
09674         NullType,
09675         NullType,
09676         NullType,
09677         NullType,
09678         NullType,
09679         NullType,
09680         NullType,
09681         NullType,
09682         NullType,
09683         NullType,
09684         NullType,
09685         NullType,
09686         NullType,
09687         NullType,
09688         NullType,
09689         NullType,
09690         NullType,
09691         NullType,
09692         NullType,
09693         NullType,
09694         NullType,
09695         NullType,
09696         NullType,
09697         NullType,
09698         NullType,
09699         NullType,
09700         NullType,
09701         NullType,
09702         NullType,
09703         NullType,
09704         NullType,
09705         NullType,
09706         NullType,
09707         NullType,
09708         NullType,
09709         NullType,
09710         NullType,
09711         NullType,
09712         NullType,
09713         NullType,
09714         NullType,
09715         NullType,
09716         NullType,
09717         NullType,
09718         NullType,
09719         NullType,
09720         NullType,
09721         NullType,
09722         NullType,
09723         NullType,
09724         NullType,
09725         NullType,
09726         NullType,
09727         NullType,
09728         NullType,
09729         NullType,
09730         NullType,
09731         NullType,
09732         NullType,
09733         NullType,
09734         NullType,
09735         NullType,
09736         NullType,
09737         NullType,
09738         NullType,
09739         NullType,
09740         NullType,
09741         NullType,
09742         NullType,
09743         NullType,
09744         NullType,
09745         NullType,
09746         NullType,
09747         NullType,
09748         NullType,
09749         NullType,
09750         NullType,
09751         NullType,
09752         NullType,
09753         NullType,
09754         NullType,
09755         NullType,
09756         NullType,
09757         NullType,
09758         NullType,
09759         NullType,
09760         NullType,
09761         NullType,
09762         NullType,
09763         NullType,
09764         NullType,
09765         NullType,
09766         NullType,
09767         NullType,
09768         NullType,
09769         NullType,
09770         NullType,
09771         NullType,
09772         NullType,
09773         NullType,
09774         NullType,
09775         NullType,
09776         NullType,
09777         NullType,
09778         NullType,
09779         NullType> FunctorType;
09780 
09781     FunctorType functor_;
09782 
09783     functionImplementation_(const FunctorType &functor) :
09784         functor_(functor)
09785     {
09786     }
09787         
09788     typedef std::tr1::function<Event (
09789         const EnqueueArgs&,
09790         T0,
09791         T1,
09792         T2,
09793         T3,
09794         T4,
09795         T5,
09796         T6,
09797         T7,
09798         T8,
09799         T9,
09800         T10,
09801         T11)> type_;
09802 
09803     Event operator()(const EnqueueArgs& enqueueArgs,
09804         T0 arg0,
09805         T1 arg1,
09806         T2 arg2,
09807         T3 arg3,
09808         T4 arg4,
09809         T5 arg5,
09810         T6 arg6,
09811         T7 arg7,
09812         T8 arg8,
09813         T9 arg9,
09814         T10 arg10,
09815         T11 arg11)
09816     {
09817         return functor_(
09818             enqueueArgs,
09819             arg0,
09820             arg1,
09821             arg2,
09822             arg3,
09823             arg4,
09824             arg5,
09825             arg6,
09826             arg7,
09827             arg8,
09828             arg9,
09829             arg10,
09830             arg11);
09831     }
09832 
09833     operator type_ ()    
09834     {
09835         return type_(*this);
09836     }
09837 
09838 };
09839 
09840 template<
09841     typename T0,
09842     typename T1,
09843     typename T2,
09844     typename T3,
09845     typename T4,
09846     typename T5,
09847     typename T6,
09848     typename T7,
09849     typename T8,
09850     typename T9,
09851     typename T10,
09852     typename T11,
09853     typename T12>
09854 struct functionImplementation_<
09855     T0,
09856     T1,
09857     T2,
09858     T3,
09859     T4,
09860     T5,
09861     T6,
09862     T7,
09863     T8,
09864     T9,
09865     T10,
09866     T11,
09867     T12,
09868     NullType,
09869     NullType,
09870     NullType,
09871     NullType,
09872     NullType,
09873     NullType,
09874     NullType,
09875     NullType,
09876     NullType,
09877     NullType,
09878     NullType,
09879     NullType,
09880     NullType,
09881     NullType,
09882     NullType,
09883     NullType,
09884     NullType,
09885     NullType,
09886     NullType,
09887     NullType,
09888     NullType,
09889     NullType,
09890     NullType,
09891     NullType,
09892     NullType,
09893     NullType,
09894     NullType,
09895     NullType,
09896     NullType,
09897     NullType,
09898     NullType,
09899     NullType,
09900     NullType,
09901     NullType,
09902     NullType,
09903     NullType,
09904     NullType,
09905     NullType,
09906     NullType,
09907     NullType,
09908     NullType,
09909     NullType,
09910     NullType,
09911     NullType,
09912     NullType,
09913     NullType,
09914     NullType,
09915     NullType,
09916     NullType,
09917     NullType,
09918     NullType,
09919     NullType,
09920     NullType,
09921     NullType,
09922     NullType,
09923     NullType,
09924     NullType,
09925     NullType,
09926     NullType,
09927     NullType,
09928     NullType,
09929     NullType,
09930     NullType,
09931     NullType,
09932     NullType,
09933     NullType,
09934     NullType,
09935     NullType,
09936     NullType,
09937     NullType,
09938     NullType,
09939     NullType,
09940     NullType,
09941     NullType,
09942     NullType,
09943     NullType,
09944     NullType,
09945     NullType,
09946     NullType,
09947     NullType,
09948     NullType,
09949     NullType,
09950     NullType,
09951     NullType,
09952     NullType,
09953     NullType,
09954     NullType,
09955     NullType,
09956     NullType,
09957     NullType,
09958     NullType,
09959     NullType,
09960     NullType,
09961     NullType,
09962     NullType,
09963     NullType,
09964     NullType,
09965     NullType,
09966     NullType,
09967     NullType,
09968     NullType,
09969     NullType,
09970     NullType,
09971     NullType,
09972     NullType,
09973     NullType,
09974     NullType,
09975     NullType,
09976     NullType,
09977     NullType,
09978     NullType,
09979     NullType,
09980     NullType,
09981     NullType,
09982     NullType>
09983 {
09984     typedef detail::KernelFunctorGlobal<
09985         T0,
09986         T1,
09987         T2,
09988         T3,
09989         T4,
09990         T5,
09991         T6,
09992         T7,
09993         T8,
09994         T9,
09995         T10,
09996         T11,
09997         T12,
09998         NullType,
09999         NullType,
10000         NullType,
10001         NullType,
10002         NullType,
10003         NullType,
10004         NullType,
10005         NullType,
10006         NullType,
10007         NullType,
10008         NullType,
10009         NullType,
10010         NullType,
10011         NullType,
10012         NullType,
10013         NullType,
10014         NullType,
10015         NullType,
10016         NullType,
10017         NullType,
10018         NullType,
10019         NullType,
10020         NullType,
10021         NullType,
10022         NullType,
10023         NullType,
10024         NullType,
10025         NullType,
10026         NullType,
10027         NullType,
10028         NullType,
10029         NullType,
10030         NullType,
10031         NullType,
10032         NullType,
10033         NullType,
10034         NullType,
10035         NullType,
10036         NullType,
10037         NullType,
10038         NullType,
10039         NullType,
10040         NullType,
10041         NullType,
10042         NullType,
10043         NullType,
10044         NullType,
10045         NullType,
10046         NullType,
10047         NullType,
10048         NullType,
10049         NullType,
10050         NullType,
10051         NullType,
10052         NullType,
10053         NullType,
10054         NullType,
10055         NullType,
10056         NullType,
10057         NullType,
10058         NullType,
10059         NullType,
10060         NullType,
10061         NullType,
10062         NullType,
10063         NullType,
10064         NullType,
10065         NullType,
10066         NullType,
10067         NullType,
10068         NullType,
10069         NullType,
10070         NullType,
10071         NullType,
10072         NullType,
10073         NullType,
10074         NullType,
10075         NullType,
10076         NullType,
10077         NullType,
10078         NullType,
10079         NullType,
10080         NullType,
10081         NullType,
10082         NullType,
10083         NullType,
10084         NullType,
10085         NullType,
10086         NullType,
10087         NullType,
10088         NullType,
10089         NullType,
10090         NullType,
10091         NullType,
10092         NullType,
10093         NullType,
10094         NullType,
10095         NullType,
10096         NullType,
10097         NullType,
10098         NullType,
10099         NullType,
10100         NullType,
10101         NullType,
10102         NullType,
10103         NullType,
10104         NullType,
10105         NullType,
10106         NullType,
10107         NullType,
10108         NullType,
10109         NullType,
10110         NullType,
10111         NullType,
10112         NullType> FunctorType;
10113 
10114     FunctorType functor_;
10115 
10116     functionImplementation_(const FunctorType &functor) :
10117         functor_(functor)
10118     {
10119     }
10120         
10121     typedef std::tr1::function<Event (
10122         const EnqueueArgs&,
10123         T0,
10124         T1,
10125         T2,
10126         T3,
10127         T4,
10128         T5,
10129         T6,
10130         T7,
10131         T8,
10132         T9,
10133         T10,
10134         T11,
10135         T12)> type_;
10136 
10137     Event operator()(const EnqueueArgs& enqueueArgs,
10138         T0 arg0,
10139         T1 arg1,
10140         T2 arg2,
10141         T3 arg3,
10142         T4 arg4,
10143         T5 arg5,
10144         T6 arg6,
10145         T7 arg7,
10146         T8 arg8,
10147         T9 arg9,
10148         T10 arg10,
10149         T11 arg11,
10150         T12 arg12)
10151     {
10152         return functor_(
10153             enqueueArgs,
10154             arg0,
10155             arg1,
10156             arg2,
10157             arg3,
10158             arg4,
10159             arg5,
10160             arg6,
10161             arg7,
10162             arg8,
10163             arg9,
10164             arg10,
10165             arg11,
10166             arg12);
10167     }
10168 
10169     operator type_ ()    
10170     {
10171         return type_(*this);
10172     }
10173 
10174 };
10175 
10176 template<
10177     typename T0,
10178     typename T1,
10179     typename T2,
10180     typename T3,
10181     typename T4,
10182     typename T5,
10183     typename T6,
10184     typename T7,
10185     typename T8,
10186     typename T9,
10187     typename T10,
10188     typename T11,
10189     typename T12,
10190     typename T13>
10191 struct functionImplementation_<
10192     T0,
10193     T1,
10194     T2,
10195     T3,
10196     T4,
10197     T5,
10198     T6,
10199     T7,
10200     T8,
10201     T9,
10202     T10,
10203     T11,
10204     T12,
10205     T13,
10206     NullType,
10207     NullType,
10208     NullType,
10209     NullType,
10210     NullType,
10211     NullType,
10212     NullType,
10213     NullType,
10214     NullType,
10215     NullType,
10216     NullType,
10217     NullType,
10218     NullType,
10219     NullType,
10220     NullType,
10221     NullType,
10222     NullType,
10223     NullType,
10224     NullType,
10225     NullType,
10226     NullType,
10227     NullType,
10228     NullType,
10229     NullType,
10230     NullType,
10231     NullType,
10232     NullType,
10233     NullType,
10234     NullType,
10235     NullType,
10236     NullType,
10237     NullType,
10238     NullType,
10239     NullType,
10240     NullType,
10241     NullType,
10242     NullType,
10243     NullType,
10244     NullType,
10245     NullType,
10246     NullType,
10247     NullType,
10248     NullType,
10249     NullType,
10250     NullType,
10251     NullType,
10252     NullType,
10253     NullType,
10254     NullType,
10255     NullType,
10256     NullType,
10257     NullType,
10258     NullType,
10259     NullType,
10260     NullType,
10261     NullType,
10262     NullType,
10263     NullType,
10264     NullType,
10265     NullType,
10266     NullType,
10267     NullType,
10268     NullType,
10269     NullType,
10270     NullType,
10271     NullType,
10272     NullType,
10273     NullType,
10274     NullType,
10275     NullType,
10276     NullType,
10277     NullType,
10278     NullType,
10279     NullType,
10280     NullType,
10281     NullType,
10282     NullType,
10283     NullType,
10284     NullType,
10285     NullType,
10286     NullType,
10287     NullType,
10288     NullType,
10289     NullType,
10290     NullType,
10291     NullType,
10292     NullType,
10293     NullType,
10294     NullType,
10295     NullType,
10296     NullType,
10297     NullType,
10298     NullType,
10299     NullType,
10300     NullType,
10301     NullType,
10302     NullType,
10303     NullType,
10304     NullType,
10305     NullType,
10306     NullType,
10307     NullType,
10308     NullType,
10309     NullType,
10310     NullType,
10311     NullType,
10312     NullType,
10313     NullType,
10314     NullType,
10315     NullType,
10316     NullType,
10317     NullType,
10318     NullType,
10319     NullType>
10320 {
10321     typedef detail::KernelFunctorGlobal<
10322         T0,
10323         T1,
10324         T2,
10325         T3,
10326         T4,
10327         T5,
10328         T6,
10329         T7,
10330         T8,
10331         T9,
10332         T10,
10333         T11,
10334         T12,
10335         T13,
10336         NullType,
10337         NullType,
10338         NullType,
10339         NullType,
10340         NullType,
10341         NullType,
10342         NullType,
10343         NullType,
10344         NullType,
10345         NullType,
10346         NullType,
10347         NullType,
10348         NullType,
10349         NullType,
10350         NullType,
10351         NullType,
10352         NullType,
10353         NullType,
10354         NullType,
10355         NullType,
10356         NullType,
10357         NullType,
10358         NullType,
10359         NullType,
10360         NullType,
10361         NullType,
10362         NullType,
10363         NullType,
10364         NullType,
10365         NullType,
10366         NullType,
10367         NullType,
10368         NullType,
10369         NullType,
10370         NullType,
10371         NullType,
10372         NullType,
10373         NullType,
10374         NullType,
10375         NullType,
10376         NullType,
10377         NullType,
10378         NullType,
10379         NullType,
10380         NullType,
10381         NullType,
10382         NullType,
10383         NullType,
10384         NullType,
10385         NullType,
10386         NullType,
10387         NullType,
10388         NullType,
10389         NullType,
10390         NullType,
10391         NullType,
10392         NullType,
10393         NullType,
10394         NullType,
10395         NullType,
10396         NullType,
10397         NullType,
10398         NullType,
10399         NullType,
10400         NullType,
10401         NullType,
10402         NullType,
10403         NullType,
10404         NullType,
10405         NullType,
10406         NullType,
10407         NullType,
10408         NullType,
10409         NullType,
10410         NullType,
10411         NullType,
10412         NullType,
10413         NullType,
10414         NullType,
10415         NullType,
10416         NullType,
10417         NullType,
10418         NullType,
10419         NullType,
10420         NullType,
10421         NullType,
10422         NullType,
10423         NullType,
10424         NullType,
10425         NullType,
10426         NullType,
10427         NullType,
10428         NullType,
10429         NullType,
10430         NullType,
10431         NullType,
10432         NullType,
10433         NullType,
10434         NullType,
10435         NullType,
10436         NullType,
10437         NullType,
10438         NullType,
10439         NullType,
10440         NullType,
10441         NullType,
10442         NullType,
10443         NullType,
10444         NullType,
10445         NullType,
10446         NullType,
10447         NullType,
10448         NullType,
10449         NullType> FunctorType;
10450 
10451     FunctorType functor_;
10452 
10453     functionImplementation_(const FunctorType &functor) :
10454         functor_(functor)
10455     {
10456     }
10457         
10458     typedef std::tr1::function<Event (
10459         const EnqueueArgs&,
10460         T0,
10461         T1,
10462         T2,
10463         T3,
10464         T4,
10465         T5,
10466         T6,
10467         T7,
10468         T8,
10469         T9,
10470         T10,
10471         T11,
10472         T12,
10473         T13)> type_;
10474 
10475     Event operator()(const EnqueueArgs& enqueueArgs,
10476         T0 arg0,
10477         T1 arg1,
10478         T2 arg2,
10479         T3 arg3,
10480         T4 arg4,
10481         T5 arg5,
10482         T6 arg6,
10483         T7 arg7,
10484         T8 arg8,
10485         T9 arg9,
10486         T10 arg10,
10487         T11 arg11,
10488         T12 arg12,
10489         T13 arg13)
10490     {
10491         return functor_(
10492             enqueueArgs,
10493             arg0,
10494             arg1,
10495             arg2,
10496             arg3,
10497             arg4,
10498             arg5,
10499             arg6,
10500             arg7,
10501             arg8,
10502             arg9,
10503             arg10,
10504             arg11,
10505             arg12,
10506             arg13);
10507     }
10508 
10509     operator type_ ()    
10510     {
10511         return type_(*this);
10512     }
10513 
10514 };
10515 
10516 template<
10517     typename T0,
10518     typename T1,
10519     typename T2,
10520     typename T3,
10521     typename T4,
10522     typename T5,
10523     typename T6,
10524     typename T7,
10525     typename T8,
10526     typename T9,
10527     typename T10,
10528     typename T11,
10529     typename T12,
10530     typename T13,
10531     typename T14>
10532 struct functionImplementation_<
10533     T0,
10534     T1,
10535     T2,
10536     T3,
10537     T4,
10538     T5,
10539     T6,
10540     T7,
10541     T8,
10542     T9,
10543     T10,
10544     T11,
10545     T12,
10546     T13,
10547     T14,
10548     NullType,
10549     NullType,
10550     NullType,
10551     NullType,
10552     NullType,
10553     NullType,
10554     NullType,
10555     NullType,
10556     NullType,
10557     NullType,
10558     NullType,
10559     NullType,
10560     NullType,
10561     NullType,
10562     NullType,
10563     NullType,
10564     NullType,
10565     NullType,
10566     NullType,
10567     NullType,
10568     NullType,
10569     NullType,
10570     NullType,
10571     NullType,
10572     NullType,
10573     NullType,
10574     NullType,
10575     NullType,
10576     NullType,
10577     NullType,
10578     NullType,
10579     NullType,
10580     NullType,
10581     NullType,
10582     NullType,
10583     NullType,
10584     NullType,
10585     NullType,
10586     NullType,
10587     NullType,
10588     NullType,
10589     NullType,
10590     NullType,
10591     NullType,
10592     NullType,
10593     NullType,
10594     NullType,
10595     NullType,
10596     NullType,
10597     NullType,
10598     NullType,
10599     NullType,
10600     NullType,
10601     NullType,
10602     NullType,
10603     NullType,
10604     NullType,
10605     NullType,
10606     NullType,
10607     NullType,
10608     NullType,
10609     NullType,
10610     NullType,
10611     NullType,
10612     NullType,
10613     NullType,
10614     NullType,
10615     NullType,
10616     NullType,
10617     NullType,
10618     NullType,
10619     NullType,
10620     NullType,
10621     NullType,
10622     NullType,
10623     NullType,
10624     NullType,
10625     NullType,
10626     NullType,
10627     NullType,
10628     NullType,
10629     NullType,
10630     NullType,
10631     NullType,
10632     NullType,
10633     NullType,
10634     NullType,
10635     NullType,
10636     NullType,
10637     NullType,
10638     NullType,
10639     NullType,
10640     NullType,
10641     NullType,
10642     NullType,
10643     NullType,
10644     NullType,
10645     NullType,
10646     NullType,
10647     NullType,
10648     NullType,
10649     NullType,
10650     NullType,
10651     NullType,
10652     NullType,
10653     NullType,
10654     NullType,
10655     NullType,
10656     NullType,
10657     NullType,
10658     NullType,
10659     NullType,
10660     NullType>
10661 {
10662     typedef detail::KernelFunctorGlobal<
10663         T0,
10664         T1,
10665         T2,
10666         T3,
10667         T4,
10668         T5,
10669         T6,
10670         T7,
10671         T8,
10672         T9,
10673         T10,
10674         T11,
10675         T12,
10676         T13,
10677         T14,
10678         NullType,
10679         NullType,
10680         NullType,
10681         NullType,
10682         NullType,
10683         NullType,
10684         NullType,
10685         NullType,
10686         NullType,
10687         NullType,
10688         NullType,
10689         NullType,
10690         NullType,
10691         NullType,
10692         NullType,
10693         NullType,
10694         NullType,
10695         NullType,
10696         NullType,
10697         NullType,
10698         NullType,
10699         NullType,
10700         NullType,
10701         NullType,
10702         NullType,
10703         NullType,
10704         NullType,
10705         NullType,
10706         NullType,
10707         NullType,
10708         NullType,
10709         NullType,
10710         NullType,
10711         NullType,
10712         NullType,
10713         NullType,
10714         NullType,
10715         NullType,
10716         NullType,
10717         NullType,
10718         NullType,
10719         NullType,
10720         NullType,
10721         NullType,
10722         NullType,
10723         NullType,
10724         NullType,
10725         NullType,
10726         NullType,
10727         NullType,
10728         NullType,
10729         NullType,
10730         NullType,
10731         NullType,
10732         NullType,
10733         NullType,
10734         NullType,
10735         NullType,
10736         NullType,
10737         NullType,
10738         NullType,
10739         NullType,
10740         NullType,
10741         NullType,
10742         NullType,
10743         NullType,
10744         NullType,
10745         NullType,
10746         NullType,
10747         NullType,
10748         NullType,
10749         NullType,
10750         NullType,
10751         NullType,
10752         NullType,
10753         NullType,
10754         NullType,
10755         NullType,
10756         NullType,
10757         NullType,
10758         NullType,
10759         NullType,
10760         NullType,
10761         NullType,
10762         NullType,
10763         NullType,
10764         NullType,
10765         NullType,
10766         NullType,
10767         NullType,
10768         NullType,
10769         NullType,
10770         NullType,
10771         NullType,
10772         NullType,
10773         NullType,
10774         NullType,
10775         NullType,
10776         NullType,
10777         NullType,
10778         NullType,
10779         NullType,
10780         NullType,
10781         NullType,
10782         NullType,
10783         NullType,
10784         NullType,
10785         NullType,
10786         NullType,
10787         NullType,
10788         NullType,
10789         NullType,
10790         NullType> FunctorType;
10791 
10792     FunctorType functor_;
10793 
10794     functionImplementation_(const FunctorType &functor) :
10795         functor_(functor)
10796     {
10797     }
10798         
10799     typedef std::tr1::function<Event (
10800         const EnqueueArgs&,
10801         T0,
10802         T1,
10803         T2,
10804         T3,
10805         T4,
10806         T5,
10807         T6,
10808         T7,
10809         T8,
10810         T9,
10811         T10,
10812         T11,
10813         T12,
10814         T13,
10815         T14)> type_;
10816 
10817     Event operator()(const EnqueueArgs& enqueueArgs,
10818         T0 arg0,
10819         T1 arg1,
10820         T2 arg2,
10821         T3 arg3,
10822         T4 arg4,
10823         T5 arg5,
10824         T6 arg6,
10825         T7 arg7,
10826         T8 arg8,
10827         T9 arg9,
10828         T10 arg10,
10829         T11 arg11,
10830         T12 arg12,
10831         T13 arg13,
10832         T14 arg14)
10833     {
10834         return functor_(
10835             enqueueArgs,
10836             arg0,
10837             arg1,
10838             arg2,
10839             arg3,
10840             arg4,
10841             arg5,
10842             arg6,
10843             arg7,
10844             arg8,
10845             arg9,
10846             arg10,
10847             arg11,
10848             arg12,
10849             arg13,
10850             arg14);
10851     }
10852 
10853     operator type_ ()    
10854     {
10855         return type_(*this);
10856     }
10857 
10858 };
10859 
10860 template<
10861     typename T0,
10862     typename T1,
10863     typename T2,
10864     typename T3,
10865     typename T4,
10866     typename T5,
10867     typename T6,
10868     typename T7,
10869     typename T8,
10870     typename T9,
10871     typename T10,
10872     typename T11,
10873     typename T12,
10874     typename T13,
10875     typename T14,
10876     typename T15>
10877 struct functionImplementation_<
10878     T0,
10879     T1,
10880     T2,
10881     T3,
10882     T4,
10883     T5,
10884     T6,
10885     T7,
10886     T8,
10887     T9,
10888     T10,
10889     T11,
10890     T12,
10891     T13,
10892     T14,
10893     T15,
10894     NullType,
10895     NullType,
10896     NullType,
10897     NullType,
10898     NullType,
10899     NullType,
10900     NullType,
10901     NullType,
10902     NullType,
10903     NullType,
10904     NullType,
10905     NullType,
10906     NullType,
10907     NullType,
10908     NullType,
10909     NullType,
10910     NullType,
10911     NullType,
10912     NullType,
10913     NullType,
10914     NullType,
10915     NullType,
10916     NullType,
10917     NullType,
10918     NullType,
10919     NullType,
10920     NullType,
10921     NullType,
10922     NullType,
10923     NullType,
10924     NullType,
10925     NullType,
10926     NullType,
10927     NullType,
10928     NullType,
10929     NullType,
10930     NullType,
10931     NullType,
10932     NullType,
10933     NullType,
10934     NullType,
10935     NullType,
10936     NullType,
10937     NullType,
10938     NullType,
10939     NullType,
10940     NullType,
10941     NullType,
10942     NullType,
10943     NullType,
10944     NullType,
10945     NullType,
10946     NullType,
10947     NullType,
10948     NullType,
10949     NullType,
10950     NullType,
10951     NullType,
10952     NullType,
10953     NullType,
10954     NullType,
10955     NullType,
10956     NullType,
10957     NullType,
10958     NullType,
10959     NullType,
10960     NullType,
10961     NullType,
10962     NullType,
10963     NullType,
10964     NullType,
10965     NullType,
10966     NullType,
10967     NullType,
10968     NullType,
10969     NullType,
10970     NullType,
10971     NullType,
10972     NullType,
10973     NullType,
10974     NullType,
10975     NullType,
10976     NullType,
10977     NullType,
10978     NullType,
10979     NullType,
10980     NullType,
10981     NullType,
10982     NullType,
10983     NullType,
10984     NullType,
10985     NullType,
10986     NullType,
10987     NullType,
10988     NullType,
10989     NullType,
10990     NullType,
10991     NullType,
10992     NullType,
10993     NullType,
10994     NullType,
10995     NullType,
10996     NullType,
10997     NullType,
10998     NullType,
10999     NullType,
11000     NullType,
11001     NullType,
11002     NullType,
11003     NullType,
11004     NullType,
11005     NullType>
11006 {
11007     typedef detail::KernelFunctorGlobal<
11008         T0,
11009         T1,
11010         T2,
11011         T3,
11012         T4,
11013         T5,
11014         T6,
11015         T7,
11016         T8,
11017         T9,
11018         T10,
11019         T11,
11020         T12,
11021         T13,
11022         T14,
11023         T15,
11024         NullType,
11025         NullType,
11026         NullType,
11027         NullType,
11028         NullType,
11029         NullType,
11030         NullType,
11031         NullType,
11032         NullType,
11033         NullType,
11034         NullType,
11035         NullType,
11036         NullType,
11037         NullType,
11038         NullType,
11039         NullType,
11040         NullType,
11041         NullType,
11042         NullType,
11043         NullType,
11044         NullType,
11045         NullType,
11046         NullType,
11047         NullType,
11048         NullType,
11049         NullType,
11050         NullType,
11051         NullType,
11052         NullType,
11053         NullType,
11054         NullType,
11055         NullType,
11056         NullType,
11057         NullType,
11058         NullType,
11059         NullType,
11060         NullType,
11061         NullType,
11062         NullType,
11063         NullType,
11064         NullType,
11065         NullType,
11066         NullType,
11067         NullType,
11068         NullType,
11069         NullType,
11070         NullType,
11071         NullType,
11072         NullType,
11073         NullType,
11074         NullType,
11075         NullType,
11076         NullType,
11077         NullType,
11078         NullType,
11079         NullType,
11080         NullType,
11081         NullType,
11082         NullType,
11083         NullType,
11084         NullType,
11085         NullType,
11086         NullType,
11087         NullType,
11088         NullType,
11089         NullType,
11090         NullType,
11091         NullType,
11092         NullType,
11093         NullType,
11094         NullType,
11095         NullType,
11096         NullType,
11097         NullType,
11098         NullType,
11099         NullType,
11100         NullType,
11101         NullType,
11102         NullType,
11103         NullType,
11104         NullType,
11105         NullType,
11106         NullType,
11107         NullType,
11108         NullType,
11109         NullType,
11110         NullType,
11111         NullType,
11112         NullType,
11113         NullType,
11114         NullType,
11115         NullType,
11116         NullType,
11117         NullType,
11118         NullType,
11119         NullType,
11120         NullType,
11121         NullType,
11122         NullType,
11123         NullType,
11124         NullType,
11125         NullType,
11126         NullType,
11127         NullType,
11128         NullType,
11129         NullType,
11130         NullType,
11131         NullType,
11132         NullType,
11133         NullType,
11134         NullType,
11135         NullType> FunctorType;
11136 
11137     FunctorType functor_;
11138 
11139     functionImplementation_(const FunctorType &functor) :
11140         functor_(functor)
11141     {
11142     }
11143         
11144     typedef std::tr1::function<Event (
11145         const EnqueueArgs&,
11146         T0,
11147         T1,
11148         T2,
11149         T3,
11150         T4,
11151         T5,
11152         T6,
11153         T7,
11154         T8,
11155         T9,
11156         T10,
11157         T11,
11158         T12,
11159         T13,
11160         T14,
11161         T15)> type_;
11162 
11163     Event operator()(const EnqueueArgs& enqueueArgs,
11164         T0 arg0,
11165         T1 arg1,
11166         T2 arg2,
11167         T3 arg3,
11168         T4 arg4,
11169         T5 arg5,
11170         T6 arg6,
11171         T7 arg7,
11172         T8 arg8,
11173         T9 arg9,
11174         T10 arg10,
11175         T11 arg11,
11176         T12 arg12,
11177         T13 arg13,
11178         T14 arg14,
11179         T15 arg15)
11180     {
11181         return functor_(
11182             enqueueArgs,
11183             arg0,
11184             arg1,
11185             arg2,
11186             arg3,
11187             arg4,
11188             arg5,
11189             arg6,
11190             arg7,
11191             arg8,
11192             arg9,
11193             arg10,
11194             arg11,
11195             arg12,
11196             arg13,
11197             arg14,
11198             arg15);
11199     }
11200 
11201     operator type_ ()    
11202     {
11203         return type_(*this);
11204     }
11205 
11206 };
11207 
11208 template<
11209     typename T0,
11210     typename T1,
11211     typename T2,
11212     typename T3,
11213     typename T4,
11214     typename T5,
11215     typename T6,
11216     typename T7,
11217     typename T8,
11218     typename T9,
11219     typename T10,
11220     typename T11,
11221     typename T12,
11222     typename T13,
11223     typename T14,
11224     typename T15,
11225     typename T16>
11226 struct functionImplementation_<
11227     T0,
11228     T1,
11229     T2,
11230     T3,
11231     T4,
11232     T5,
11233     T6,
11234     T7,
11235     T8,
11236     T9,
11237     T10,
11238     T11,
11239     T12,
11240     T13,
11241     T14,
11242     T15,
11243     T16,
11244     NullType,
11245     NullType,
11246     NullType,
11247     NullType,
11248     NullType,
11249     NullType,
11250     NullType,
11251     NullType,
11252     NullType,
11253     NullType,
11254     NullType,
11255     NullType,
11256     NullType,
11257     NullType,
11258     NullType,
11259     NullType,
11260     NullType,
11261     NullType,
11262     NullType,
11263     NullType,
11264     NullType,
11265     NullType,
11266     NullType,
11267     NullType,
11268     NullType,
11269     NullType,
11270     NullType,
11271     NullType,
11272     NullType,
11273     NullType,
11274     NullType,
11275     NullType,
11276     NullType,
11277     NullType,
11278     NullType,
11279     NullType,
11280     NullType,
11281     NullType,
11282     NullType,
11283     NullType,
11284     NullType,
11285     NullType,
11286     NullType,
11287     NullType,
11288     NullType,
11289     NullType,
11290     NullType,
11291     NullType,
11292     NullType,
11293     NullType,
11294     NullType,
11295     NullType,
11296     NullType,
11297     NullType,
11298     NullType,
11299     NullType,
11300     NullType,
11301     NullType,
11302     NullType,
11303     NullType,
11304     NullType,
11305     NullType,
11306     NullType,
11307     NullType,
11308     NullType,
11309     NullType,
11310     NullType,
11311     NullType,
11312     NullType,
11313     NullType,
11314     NullType,
11315     NullType,
11316     NullType,
11317     NullType,
11318     NullType,
11319     NullType,
11320     NullType,
11321     NullType,
11322     NullType,
11323     NullType,
11324     NullType,
11325     NullType,
11326     NullType,
11327     NullType,
11328     NullType,
11329     NullType,
11330     NullType,
11331     NullType,
11332     NullType,
11333     NullType,
11334     NullType,
11335     NullType,
11336     NullType,
11337     NullType,
11338     NullType,
11339     NullType,
11340     NullType,
11341     NullType,
11342     NullType,
11343     NullType,
11344     NullType,
11345     NullType,
11346     NullType,
11347     NullType,
11348     NullType,
11349     NullType,
11350     NullType,
11351     NullType,
11352     NullType,
11353     NullType,
11354     NullType>
11355 {
11356     typedef detail::KernelFunctorGlobal<
11357         T0,
11358         T1,
11359         T2,
11360         T3,
11361         T4,
11362         T5,
11363         T6,
11364         T7,
11365         T8,
11366         T9,
11367         T10,
11368         T11,
11369         T12,
11370         T13,
11371         T14,
11372         T15,
11373         T16,
11374         NullType,
11375         NullType,
11376         NullType,
11377         NullType,
11378         NullType,
11379         NullType,
11380         NullType,
11381         NullType,
11382         NullType,
11383         NullType,
11384         NullType,
11385         NullType,
11386         NullType,
11387         NullType,
11388         NullType,
11389         NullType,
11390         NullType,
11391         NullType,
11392         NullType,
11393         NullType,
11394         NullType,
11395         NullType,
11396         NullType,
11397         NullType,
11398         NullType,
11399         NullType,
11400         NullType,
11401         NullType,
11402         NullType,
11403         NullType,
11404         NullType,
11405         NullType,
11406         NullType,
11407         NullType,
11408         NullType,
11409         NullType,
11410         NullType,
11411         NullType,
11412         NullType,
11413         NullType,
11414         NullType,
11415         NullType,
11416         NullType,
11417         NullType,
11418         NullType,
11419         NullType,
11420         NullType,
11421         NullType,
11422         NullType,
11423         NullType,
11424         NullType,
11425         NullType,
11426         NullType,
11427         NullType,
11428         NullType,
11429         NullType,
11430         NullType,
11431         NullType,
11432         NullType,
11433         NullType,
11434         NullType,
11435         NullType,
11436         NullType,
11437         NullType,
11438         NullType,
11439         NullType,
11440         NullType,
11441         NullType,
11442         NullType,
11443         NullType,
11444         NullType,
11445         NullType,
11446         NullType,
11447         NullType,
11448         NullType,
11449         NullType,
11450         NullType,
11451         NullType,
11452         NullType,
11453         NullType,
11454         NullType,
11455         NullType,
11456         NullType,
11457         NullType,
11458         NullType,
11459         NullType,
11460         NullType,
11461         NullType,
11462         NullType,
11463         NullType,
11464         NullType,
11465         NullType,
11466         NullType,
11467         NullType,
11468         NullType,
11469         NullType,
11470         NullType,
11471         NullType,
11472         NullType,
11473         NullType,
11474         NullType,
11475         NullType,
11476         NullType,
11477         NullType,
11478         NullType,
11479         NullType,
11480         NullType,
11481         NullType,
11482         NullType,
11483         NullType,
11484         NullType> FunctorType;
11485 
11486     FunctorType functor_;
11487 
11488     functionImplementation_(const FunctorType &functor) :
11489         functor_(functor)
11490     {
11491     }
11492         
11493     typedef std::tr1::function<Event (
11494         const EnqueueArgs&,
11495         T0,
11496         T1,
11497         T2,
11498         T3,
11499         T4,
11500         T5,
11501         T6,
11502         T7,
11503         T8,
11504         T9,
11505         T10,
11506         T11,
11507         T12,
11508         T13,
11509         T14,
11510         T15,
11511         T16)> type_;
11512 
11513     Event operator()(const EnqueueArgs& enqueueArgs,
11514         T0 arg0,
11515         T1 arg1,
11516         T2 arg2,
11517         T3 arg3,
11518         T4 arg4,
11519         T5 arg5,
11520         T6 arg6,
11521         T7 arg7,
11522         T8 arg8,
11523         T9 arg9,
11524         T10 arg10,
11525         T11 arg11,
11526         T12 arg12,
11527         T13 arg13,
11528         T14 arg14,
11529         T15 arg15,
11530         T16 arg16)
11531     {
11532         return functor_(
11533             enqueueArgs,
11534             arg0,
11535             arg1,
11536             arg2,
11537             arg3,
11538             arg4,
11539             arg5,
11540             arg6,
11541             arg7,
11542             arg8,
11543             arg9,
11544             arg10,
11545             arg11,
11546             arg12,
11547             arg13,
11548             arg14,
11549             arg15,
11550             arg16);
11551     }
11552 
11553     operator type_ ()    
11554     {
11555         return type_(*this);
11556     }
11557 
11558 };
11559 
11560 template<
11561     typename T0,
11562     typename T1,
11563     typename T2,
11564     typename T3,
11565     typename T4,
11566     typename T5,
11567     typename T6,
11568     typename T7,
11569     typename T8,
11570     typename T9,
11571     typename T10,
11572     typename T11,
11573     typename T12,
11574     typename T13,
11575     typename T14,
11576     typename T15,
11577     typename T16,
11578     typename T17>
11579 struct functionImplementation_<
11580     T0,
11581     T1,
11582     T2,
11583     T3,
11584     T4,
11585     T5,
11586     T6,
11587     T7,
11588     T8,
11589     T9,
11590     T10,
11591     T11,
11592     T12,
11593     T13,
11594     T14,
11595     T15,
11596     T16,
11597     T17,
11598     NullType,
11599     NullType,
11600     NullType,
11601     NullType,
11602     NullType,
11603     NullType,
11604     NullType,
11605     NullType,
11606     NullType,
11607     NullType,
11608     NullType,
11609     NullType,
11610     NullType,
11611     NullType,
11612     NullType,
11613     NullType,
11614     NullType,
11615     NullType,
11616     NullType,
11617     NullType,
11618     NullType,
11619     NullType,
11620     NullType,
11621     NullType,
11622     NullType,
11623     NullType,
11624     NullType,
11625     NullType,
11626     NullType,
11627     NullType,
11628     NullType,
11629     NullType,
11630     NullType,
11631     NullType,
11632     NullType,
11633     NullType,
11634     NullType,
11635     NullType,
11636     NullType,
11637     NullType,
11638     NullType,
11639     NullType,
11640     NullType,
11641     NullType,
11642     NullType,
11643     NullType,
11644     NullType,
11645     NullType,
11646     NullType,
11647     NullType,
11648     NullType,
11649     NullType,
11650     NullType,
11651     NullType,
11652     NullType,
11653     NullType,
11654     NullType,
11655     NullType,
11656     NullType,
11657     NullType,
11658     NullType,
11659     NullType,
11660     NullType,
11661     NullType,
11662     NullType,
11663     NullType,
11664     NullType,
11665     NullType,
11666     NullType,
11667     NullType,
11668     NullType,
11669     NullType,
11670     NullType,
11671     NullType,
11672     NullType,
11673     NullType,
11674     NullType,
11675     NullType,
11676     NullType,
11677     NullType,
11678     NullType,
11679     NullType,
11680     NullType,
11681     NullType,
11682     NullType,
11683     NullType,
11684     NullType,
11685     NullType,
11686     NullType,
11687     NullType,
11688     NullType,
11689     NullType,
11690     NullType,
11691     NullType,
11692     NullType,
11693     NullType,
11694     NullType,
11695     NullType,
11696     NullType,
11697     NullType,
11698     NullType,
11699     NullType,
11700     NullType,
11701     NullType,
11702     NullType,
11703     NullType,
11704     NullType,
11705     NullType,
11706     NullType,
11707     NullType>
11708 {
11709     typedef detail::KernelFunctorGlobal<
11710         T0,
11711         T1,
11712         T2,
11713         T3,
11714         T4,
11715         T5,
11716         T6,
11717         T7,
11718         T8,
11719         T9,
11720         T10,
11721         T11,
11722         T12,
11723         T13,
11724         T14,
11725         T15,
11726         T16,
11727         T17,
11728         NullType,
11729         NullType,
11730         NullType,
11731         NullType,
11732         NullType,
11733         NullType,
11734         NullType,
11735         NullType,
11736         NullType,
11737         NullType,
11738         NullType,
11739         NullType,
11740         NullType,
11741         NullType,
11742         NullType,
11743         NullType,
11744         NullType,
11745         NullType,
11746         NullType,
11747         NullType,
11748         NullType,
11749         NullType,
11750         NullType,
11751         NullType,
11752         NullType,
11753         NullType,
11754         NullType,
11755         NullType,
11756         NullType,
11757         NullType,
11758         NullType,
11759         NullType,
11760         NullType,
11761         NullType,
11762         NullType,
11763         NullType,
11764         NullType,
11765         NullType,
11766         NullType,
11767         NullType,
11768         NullType,
11769         NullType,
11770         NullType,
11771         NullType,
11772         NullType,
11773         NullType,
11774         NullType,
11775         NullType,
11776         NullType,
11777         NullType,
11778         NullType,
11779         NullType,
11780         NullType,
11781         NullType,
11782         NullType,
11783         NullType,
11784         NullType,
11785         NullType,
11786         NullType,
11787         NullType,
11788         NullType,
11789         NullType,
11790         NullType,
11791         NullType,
11792         NullType,
11793         NullType,
11794         NullType,
11795         NullType,
11796         NullType,
11797         NullType,
11798         NullType,
11799         NullType,
11800         NullType,
11801         NullType,
11802         NullType,
11803         NullType,
11804         NullType,
11805         NullType,
11806         NullType,
11807         NullType,
11808         NullType,
11809         NullType,
11810         NullType,
11811         NullType,
11812         NullType,
11813         NullType,
11814         NullType,
11815         NullType,
11816         NullType,
11817         NullType,
11818         NullType,
11819         NullType,
11820         NullType,
11821         NullType,
11822         NullType,
11823         NullType,
11824         NullType,
11825         NullType,
11826         NullType,
11827         NullType,
11828         NullType,
11829         NullType,
11830         NullType,
11831         NullType,
11832         NullType,
11833         NullType,
11834         NullType,
11835         NullType,
11836         NullType,
11837         NullType> FunctorType;
11838 
11839     FunctorType functor_;
11840 
11841     functionImplementation_(const FunctorType &functor) :
11842         functor_(functor)
11843     {
11844     }
11845         
11846     typedef std::tr1::function<Event (
11847         const EnqueueArgs&,
11848         T0,
11849         T1,
11850         T2,
11851         T3,
11852         T4,
11853         T5,
11854         T6,
11855         T7,
11856         T8,
11857         T9,
11858         T10,
11859         T11,
11860         T12,
11861         T13,
11862         T14,
11863         T15,
11864         T16,
11865         T17)> type_;
11866 
11867     Event operator()(const EnqueueArgs& enqueueArgs,
11868         T0 arg0,
11869         T1 arg1,
11870         T2 arg2,
11871         T3 arg3,
11872         T4 arg4,
11873         T5 arg5,
11874         T6 arg6,
11875         T7 arg7,
11876         T8 arg8,
11877         T9 arg9,
11878         T10 arg10,
11879         T11 arg11,
11880         T12 arg12,
11881         T13 arg13,
11882         T14 arg14,
11883         T15 arg15,
11884         T16 arg16,
11885         T17 arg17)
11886     {
11887         return functor_(
11888             enqueueArgs,
11889             arg0,
11890             arg1,
11891             arg2,
11892             arg3,
11893             arg4,
11894             arg5,
11895             arg6,
11896             arg7,
11897             arg8,
11898             arg9,
11899             arg10,
11900             arg11,
11901             arg12,
11902             arg13,
11903             arg14,
11904             arg15,
11905             arg16,
11906             arg17);
11907     }
11908 
11909     operator type_ ()    
11910     {
11911         return type_(*this);
11912     }
11913 
11914 };
11915 
11916 template<
11917     typename T0,
11918     typename T1,
11919     typename T2,
11920     typename T3,
11921     typename T4,
11922     typename T5,
11923     typename T6,
11924     typename T7,
11925     typename T8,
11926     typename T9,
11927     typename T10,
11928     typename T11,
11929     typename T12,
11930     typename T13,
11931     typename T14,
11932     typename T15,
11933     typename T16,
11934     typename T17,
11935     typename T18>
11936 struct functionImplementation_<
11937     T0,
11938     T1,
11939     T2,
11940     T3,
11941     T4,
11942     T5,
11943     T6,
11944     T7,
11945     T8,
11946     T9,
11947     T10,
11948     T11,
11949     T12,
11950     T13,
11951     T14,
11952     T15,
11953     T16,
11954     T17,
11955     T18,
11956     NullType,
11957     NullType,
11958     NullType,
11959     NullType,
11960     NullType,
11961     NullType,
11962     NullType,
11963     NullType,
11964     NullType,
11965     NullType,
11966     NullType,
11967     NullType,
11968     NullType,
11969     NullType,
11970     NullType,
11971     NullType,
11972     NullType,
11973     NullType,
11974     NullType,
11975     NullType,
11976     NullType,
11977     NullType,
11978     NullType,
11979     NullType,
11980     NullType,
11981     NullType,
11982     NullType,
11983     NullType,
11984     NullType,
11985     NullType,
11986     NullType,
11987     NullType,
11988     NullType,
11989     NullType,
11990     NullType,
11991     NullType,
11992     NullType,
11993     NullType,
11994     NullType,
11995     NullType,
11996     NullType,
11997     NullType,
11998     NullType,
11999     NullType,
12000     NullType,
12001     NullType,
12002     NullType,
12003     NullType,
12004     NullType,
12005     NullType,
12006     NullType,
12007     NullType,
12008     NullType,
12009     NullType,
12010     NullType,
12011     NullType,
12012     NullType,
12013     NullType,
12014     NullType,
12015     NullType,
12016     NullType,
12017     NullType,
12018     NullType,
12019     NullType,
12020     NullType,
12021     NullType,
12022     NullType,
12023     NullType,
12024     NullType,
12025     NullType,
12026     NullType,
12027     NullType,
12028     NullType,
12029     NullType,
12030     NullType,
12031     NullType,
12032     NullType,
12033     NullType,
12034     NullType,
12035     NullType,
12036     NullType,
12037     NullType,
12038     NullType,
12039     NullType,
12040     NullType,
12041     NullType,
12042     NullType,
12043     NullType,
12044     NullType,
12045     NullType,
12046     NullType,
12047     NullType,
12048     NullType,
12049     NullType,
12050     NullType,
12051     NullType,
12052     NullType,
12053     NullType,
12054     NullType,
12055     NullType,
12056     NullType,
12057     NullType,
12058     NullType,
12059     NullType,
12060     NullType,
12061     NullType,
12062     NullType,
12063     NullType,
12064     NullType>
12065 {
12066     typedef detail::KernelFunctorGlobal<
12067         T0,
12068         T1,
12069         T2,
12070         T3,
12071         T4,
12072         T5,
12073         T6,
12074         T7,
12075         T8,
12076         T9,
12077         T10,
12078         T11,
12079         T12,
12080         T13,
12081         T14,
12082         T15,
12083         T16,
12084         T17,
12085         T18,
12086         NullType,
12087         NullType,
12088         NullType,
12089         NullType,
12090         NullType,
12091         NullType,
12092         NullType,
12093         NullType,
12094         NullType,
12095         NullType,
12096         NullType,
12097         NullType,
12098         NullType,
12099         NullType,
12100         NullType,
12101         NullType,
12102         NullType,
12103         NullType,
12104         NullType,
12105         NullType,
12106         NullType,
12107         NullType,
12108         NullType,
12109         NullType,
12110         NullType,
12111         NullType,
12112         NullType,
12113         NullType,
12114         NullType,
12115         NullType,
12116         NullType,
12117         NullType,
12118         NullType,
12119         NullType,
12120         NullType,
12121         NullType,
12122         NullType,
12123         NullType,
12124         NullType,
12125         NullType,
12126         NullType,
12127         NullType,
12128         NullType,
12129         NullType,
12130         NullType,
12131         NullType,
12132         NullType,
12133         NullType,
12134         NullType,
12135         NullType,
12136         NullType,
12137         NullType,
12138         NullType,
12139         NullType,
12140         NullType,
12141         NullType,
12142         NullType,
12143         NullType,
12144         NullType,
12145         NullType,
12146         NullType,
12147         NullType,
12148         NullType,
12149         NullType,
12150         NullType,
12151         NullType,
12152         NullType,
12153         NullType,
12154         NullType,
12155         NullType,
12156         NullType,
12157         NullType,
12158         NullType,
12159         NullType,
12160         NullType,
12161         NullType,
12162         NullType,
12163         NullType,
12164         NullType,
12165         NullType,
12166         NullType,
12167         NullType,
12168         NullType,
12169         NullType,
12170         NullType,
12171         NullType,
12172         NullType,
12173         NullType,
12174         NullType,
12175         NullType,
12176         NullType,
12177         NullType,
12178         NullType,
12179         NullType,
12180         NullType,
12181         NullType,
12182         NullType,
12183         NullType,
12184         NullType,
12185         NullType,
12186         NullType,
12187         NullType,
12188         NullType,
12189         NullType,
12190         NullType,
12191         NullType,
12192         NullType,
12193         NullType,
12194         NullType> FunctorType;
12195 
12196     FunctorType functor_;
12197 
12198     functionImplementation_(const FunctorType &functor) :
12199         functor_(functor)
12200     {
12201     }
12202         
12203     typedef std::tr1::function<Event (
12204         const EnqueueArgs&,
12205         T0,
12206         T1,
12207         T2,
12208         T3,
12209         T4,
12210         T5,
12211         T6,
12212         T7,
12213         T8,
12214         T9,
12215         T10,
12216         T11,
12217         T12,
12218         T13,
12219         T14,
12220         T15,
12221         T16,
12222         T17,
12223         T18)> type_;
12224 
12225     Event operator()(const EnqueueArgs& enqueueArgs,
12226         T0 arg0,
12227         T1 arg1,
12228         T2 arg2,
12229         T3 arg3,
12230         T4 arg4,
12231         T5 arg5,
12232         T6 arg6,
12233         T7 arg7,
12234         T8 arg8,
12235         T9 arg9,
12236         T10 arg10,
12237         T11 arg11,
12238         T12 arg12,
12239         T13 arg13,
12240         T14 arg14,
12241         T15 arg15,
12242         T16 arg16,
12243         T17 arg17,
12244         T18 arg18)
12245     {
12246         return functor_(
12247             enqueueArgs,
12248             arg0,
12249             arg1,
12250             arg2,
12251             arg3,
12252             arg4,
12253             arg5,
12254             arg6,
12255             arg7,
12256             arg8,
12257             arg9,
12258             arg10,
12259             arg11,
12260             arg12,
12261             arg13,
12262             arg14,
12263             arg15,
12264             arg16,
12265             arg17,
12266             arg18);
12267     }
12268 
12269     operator type_ ()    
12270     {
12271         return type_(*this);
12272     }
12273 
12274 };
12275 
12276 template<
12277     typename T0,
12278     typename T1,
12279     typename T2,
12280     typename T3,
12281     typename T4,
12282     typename T5,
12283     typename T6,
12284     typename T7,
12285     typename T8,
12286     typename T9,
12287     typename T10,
12288     typename T11,
12289     typename T12,
12290     typename T13,
12291     typename T14,
12292     typename T15,
12293     typename T16,
12294     typename T17,
12295     typename T18,
12296     typename T19>
12297 struct functionImplementation_<
12298     T0,
12299     T1,
12300     T2,
12301     T3,
12302     T4,
12303     T5,
12304     T6,
12305     T7,
12306     T8,
12307     T9,
12308     T10,
12309     T11,
12310     T12,
12311     T13,
12312     T14,
12313     T15,
12314     T16,
12315     T17,
12316     T18,
12317     T19,
12318     NullType,
12319     NullType,
12320     NullType,
12321     NullType,
12322     NullType,
12323     NullType,
12324     NullType,
12325     NullType,
12326     NullType,
12327     NullType,
12328     NullType,
12329     NullType,
12330     NullType,
12331     NullType,
12332     NullType,
12333     NullType,
12334     NullType,
12335     NullType,
12336     NullType,
12337     NullType,
12338     NullType,
12339     NullType,
12340     NullType,
12341     NullType,
12342     NullType,
12343     NullType,
12344     NullType,
12345     NullType,
12346     NullType,
12347     NullType,
12348     NullType,
12349     NullType,
12350     NullType,
12351     NullType,
12352     NullType,
12353     NullType,
12354     NullType,
12355     NullType,
12356     NullType,
12357     NullType,
12358     NullType,
12359     NullType,
12360     NullType,
12361     NullType,
12362     NullType,
12363     NullType,
12364     NullType,
12365     NullType,
12366     NullType,
12367     NullType,
12368     NullType,
12369     NullType,
12370     NullType,
12371     NullType,
12372     NullType,
12373     NullType,
12374     NullType,
12375     NullType,
12376     NullType,
12377     NullType,
12378     NullType,
12379     NullType,
12380     NullType,
12381     NullType,
12382     NullType,
12383     NullType,
12384     NullType,
12385     NullType,
12386     NullType,
12387     NullType,
12388     NullType,
12389     NullType,
12390     NullType,
12391     NullType,
12392     NullType,
12393     NullType,
12394     NullType,
12395     NullType,
12396     NullType,
12397     NullType,
12398     NullType,
12399     NullType,
12400     NullType,
12401     NullType,
12402     NullType,
12403     NullType,
12404     NullType,
12405     NullType,
12406     NullType,
12407     NullType,
12408     NullType,
12409     NullType,
12410     NullType,
12411     NullType,
12412     NullType,
12413     NullType,
12414     NullType,
12415     NullType,
12416     NullType,
12417     NullType,
12418     NullType,
12419     NullType,
12420     NullType,
12421     NullType,
12422     NullType,
12423     NullType,
12424     NullType,
12425     NullType>
12426 {
12427     typedef detail::KernelFunctorGlobal<
12428         T0,
12429         T1,
12430         T2,
12431         T3,
12432         T4,
12433         T5,
12434         T6,
12435         T7,
12436         T8,
12437         T9,
12438         T10,
12439         T11,
12440         T12,
12441         T13,
12442         T14,
12443         T15,
12444         T16,
12445         T17,
12446         T18,
12447         T19,
12448         NullType,
12449         NullType,
12450         NullType,
12451         NullType,
12452         NullType,
12453         NullType,
12454         NullType,
12455         NullType,
12456         NullType,
12457         NullType,
12458         NullType,
12459         NullType,
12460         NullType,
12461         NullType,
12462         NullType,
12463         NullType,
12464         NullType,
12465         NullType,
12466         NullType,
12467         NullType,
12468         NullType,
12469         NullType,
12470         NullType,
12471         NullType,
12472         NullType,
12473         NullType,
12474         NullType,
12475         NullType,
12476         NullType,
12477         NullType,
12478         NullType,
12479         NullType,
12480         NullType,
12481         NullType,
12482         NullType,
12483         NullType,
12484         NullType,
12485         NullType,
12486         NullType,
12487         NullType,
12488         NullType,
12489         NullType,
12490         NullType,
12491         NullType,
12492         NullType,
12493         NullType,
12494         NullType,
12495         NullType,
12496         NullType,
12497         NullType,
12498         NullType,
12499         NullType,
12500         NullType,
12501         NullType,
12502         NullType,
12503         NullType,
12504         NullType,
12505         NullType,
12506         NullType,
12507         NullType,
12508         NullType,
12509         NullType,
12510         NullType,
12511         NullType,
12512         NullType,
12513         NullType,
12514         NullType,
12515         NullType,
12516         NullType,
12517         NullType,
12518         NullType,
12519         NullType,
12520         NullType,
12521         NullType,
12522         NullType,
12523         NullType,
12524         NullType,
12525         NullType,
12526         NullType,
12527         NullType,
12528         NullType,
12529         NullType,
12530         NullType,
12531         NullType,
12532         NullType,
12533         NullType,
12534         NullType,
12535         NullType,
12536         NullType,
12537         NullType,
12538         NullType,
12539         NullType,
12540         NullType,
12541         NullType,
12542         NullType,
12543         NullType,
12544         NullType,
12545         NullType,
12546         NullType,
12547         NullType,
12548         NullType,
12549         NullType,
12550         NullType,
12551         NullType,
12552         NullType,
12553         NullType,
12554         NullType,
12555         NullType> FunctorType;
12556 
12557     FunctorType functor_;
12558 
12559     functionImplementation_(const FunctorType &functor) :
12560         functor_(functor)
12561     {
12562     }
12563         
12564     typedef std::tr1::function<Event (
12565         const EnqueueArgs&,
12566         T0,
12567         T1,
12568         T2,
12569         T3,
12570         T4,
12571         T5,
12572         T6,
12573         T7,
12574         T8,
12575         T9,
12576         T10,
12577         T11,
12578         T12,
12579         T13,
12580         T14,
12581         T15,
12582         T16,
12583         T17,
12584         T18,
12585         T19)> type_;
12586 
12587     Event operator()(const EnqueueArgs& enqueueArgs,
12588         T0 arg0,
12589         T1 arg1,
12590         T2 arg2,
12591         T3 arg3,
12592         T4 arg4,
12593         T5 arg5,
12594         T6 arg6,
12595         T7 arg7,
12596         T8 arg8,
12597         T9 arg9,
12598         T10 arg10,
12599         T11 arg11,
12600         T12 arg12,
12601         T13 arg13,
12602         T14 arg14,
12603         T15 arg15,
12604         T16 arg16,
12605         T17 arg17,
12606         T18 arg18,
12607         T19 arg19)
12608     {
12609         return functor_(
12610             enqueueArgs,
12611             arg0,
12612             arg1,
12613             arg2,
12614             arg3,
12615             arg4,
12616             arg5,
12617             arg6,
12618             arg7,
12619             arg8,
12620             arg9,
12621             arg10,
12622             arg11,
12623             arg12,
12624             arg13,
12625             arg14,
12626             arg15,
12627             arg16,
12628             arg17,
12629             arg18,
12630             arg19);
12631     }
12632 
12633     operator type_ ()    
12634     {
12635         return type_(*this);
12636     }
12637 
12638 };
12639 
12640 template<
12641     typename T0,
12642     typename T1,
12643     typename T2,
12644     typename T3,
12645     typename T4,
12646     typename T5,
12647     typename T6,
12648     typename T7,
12649     typename T8,
12650     typename T9,
12651     typename T10,
12652     typename T11,
12653     typename T12,
12654     typename T13,
12655     typename T14,
12656     typename T15,
12657     typename T16,
12658     typename T17,
12659     typename T18,
12660     typename T19,
12661     typename T20>
12662 struct functionImplementation_<
12663     T0,
12664     T1,
12665     T2,
12666     T3,
12667     T4,
12668     T5,
12669     T6,
12670     T7,
12671     T8,
12672     T9,
12673     T10,
12674     T11,
12675     T12,
12676     T13,
12677     T14,
12678     T15,
12679     T16,
12680     T17,
12681     T18,
12682     T19,
12683     T20,
12684     NullType,
12685     NullType,
12686     NullType,
12687     NullType,
12688     NullType,
12689     NullType,
12690     NullType,
12691     NullType,
12692     NullType,
12693     NullType,
12694     NullType,
12695     NullType,
12696     NullType,
12697     NullType,
12698     NullType,
12699     NullType,
12700     NullType,
12701     NullType,
12702     NullType,
12703     NullType,
12704     NullType,
12705     NullType,
12706     NullType,
12707     NullType,
12708     NullType,
12709     NullType,
12710     NullType,
12711     NullType,
12712     NullType,
12713     NullType,
12714     NullType,
12715     NullType,
12716     NullType,
12717     NullType,
12718     NullType,
12719     NullType,
12720     NullType,
12721     NullType,
12722     NullType,
12723     NullType,
12724     NullType,
12725     NullType,
12726     NullType,
12727     NullType,
12728     NullType,
12729     NullType,
12730     NullType,
12731     NullType,
12732     NullType,
12733     NullType,
12734     NullType,
12735     NullType,
12736     NullType,
12737     NullType,
12738     NullType,
12739     NullType,
12740     NullType,
12741     NullType,
12742     NullType,
12743     NullType,
12744     NullType,
12745     NullType,
12746     NullType,
12747     NullType,
12748     NullType,
12749     NullType,
12750     NullType,
12751     NullType,
12752     NullType,
12753     NullType,
12754     NullType,
12755     NullType,
12756     NullType,
12757     NullType,
12758     NullType,
12759     NullType,
12760     NullType,
12761     NullType,
12762     NullType,
12763     NullType,
12764     NullType,
12765     NullType,
12766     NullType,
12767     NullType,
12768     NullType,
12769     NullType,
12770     NullType,
12771     NullType,
12772     NullType,
12773     NullType,
12774     NullType,
12775     NullType,
12776     NullType,
12777     NullType,
12778     NullType,
12779     NullType,
12780     NullType,
12781     NullType,
12782     NullType,
12783     NullType,
12784     NullType,
12785     NullType,
12786     NullType,
12787     NullType,
12788     NullType,
12789     NullType,
12790     NullType>
12791 {
12792     typedef detail::KernelFunctorGlobal<
12793         T0,
12794         T1,
12795         T2,
12796         T3,
12797         T4,
12798         T5,
12799         T6,
12800         T7,
12801         T8,
12802         T9,
12803         T10,
12804         T11,
12805         T12,
12806         T13,
12807         T14,
12808         T15,
12809         T16,
12810         T17,
12811         T18,
12812         T19,
12813         T20,
12814         NullType,
12815         NullType,
12816         NullType,
12817         NullType,
12818         NullType,
12819         NullType,
12820         NullType,
12821         NullType,
12822         NullType,
12823         NullType,
12824         NullType,
12825         NullType,
12826         NullType,
12827         NullType,
12828         NullType,
12829         NullType,
12830         NullType,
12831         NullType,
12832         NullType,
12833         NullType,
12834         NullType,
12835         NullType,
12836         NullType,
12837         NullType,
12838         NullType,
12839         NullType,
12840         NullType,
12841         NullType,
12842         NullType,
12843         NullType,
12844         NullType,
12845         NullType,
12846         NullType,
12847         NullType,
12848         NullType,
12849         NullType,
12850         NullType,
12851         NullType,
12852         NullType,
12853         NullType,
12854         NullType,
12855         NullType,
12856         NullType,
12857         NullType,
12858         NullType,
12859         NullType,
12860         NullType,
12861         NullType,
12862         NullType,
12863         NullType,
12864         NullType,
12865         NullType,
12866         NullType,
12867         NullType,
12868         NullType,
12869         NullType,
12870         NullType,
12871         NullType,
12872         NullType,
12873         NullType,
12874         NullType,
12875         NullType,
12876         NullType,
12877         NullType,
12878         NullType,
12879         NullType,
12880         NullType,
12881         NullType,
12882         NullType,
12883         NullType,
12884         NullType,
12885         NullType,
12886         NullType,
12887         NullType,
12888         NullType,
12889         NullType,
12890         NullType,
12891         NullType,
12892         NullType,
12893         NullType,
12894         NullType,
12895         NullType,
12896         NullType,
12897         NullType,
12898         NullType,
12899         NullType,
12900         NullType,
12901         NullType,
12902         NullType,
12903         NullType,
12904         NullType,
12905         NullType,
12906         NullType,
12907         NullType,
12908         NullType,
12909         NullType,
12910         NullType,
12911         NullType,
12912         NullType,
12913         NullType,
12914         NullType,
12915         NullType,
12916         NullType,
12917         NullType,
12918         NullType,
12919         NullType,
12920         NullType> FunctorType;
12921 
12922     FunctorType functor_;
12923 
12924     functionImplementation_(const FunctorType &functor) :
12925         functor_(functor)
12926     {
12927     }
12928         
12929     typedef std::tr1::function<Event (
12930         const EnqueueArgs&,
12931         T0,
12932         T1,
12933         T2,
12934         T3,
12935         T4,
12936         T5,
12937         T6,
12938         T7,
12939         T8,
12940         T9,
12941         T10,
12942         T11,
12943         T12,
12944         T13,
12945         T14,
12946         T15,
12947         T16,
12948         T17,
12949         T18,
12950         T19,
12951         T20)> type_;
12952 
12953     Event operator()(const EnqueueArgs& enqueueArgs,
12954         T0 arg0,
12955         T1 arg1,
12956         T2 arg2,
12957         T3 arg3,
12958         T4 arg4,
12959         T5 arg5,
12960         T6 arg6,
12961         T7 arg7,
12962         T8 arg8,
12963         T9 arg9,
12964         T10 arg10,
12965         T11 arg11,
12966         T12 arg12,
12967         T13 arg13,
12968         T14 arg14,
12969         T15 arg15,
12970         T16 arg16,
12971         T17 arg17,
12972         T18 arg18,
12973         T19 arg19,
12974         T20 arg20)
12975     {
12976         return functor_(
12977             enqueueArgs,
12978             arg0,
12979             arg1,
12980             arg2,
12981             arg3,
12982             arg4,
12983             arg5,
12984             arg6,
12985             arg7,
12986             arg8,
12987             arg9,
12988             arg10,
12989             arg11,
12990             arg12,
12991             arg13,
12992             arg14,
12993             arg15,
12994             arg16,
12995             arg17,
12996             arg18,
12997             arg19,
12998             arg20);
12999     }
13000 
13001     operator type_ ()    
13002     {
13003         return type_(*this);
13004     }
13005 
13006 };
13007 
13008 template<
13009     typename T0,
13010     typename T1,
13011     typename T2,
13012     typename T3,
13013     typename T4,
13014     typename T5,
13015     typename T6,
13016     typename T7,
13017     typename T8,
13018     typename T9,
13019     typename T10,
13020     typename T11,
13021     typename T12,
13022     typename T13,
13023     typename T14,
13024     typename T15,
13025     typename T16,
13026     typename T17,
13027     typename T18,
13028     typename T19,
13029     typename T20,
13030     typename T21>
13031 struct functionImplementation_<
13032     T0,
13033     T1,
13034     T2,
13035     T3,
13036     T4,
13037     T5,
13038     T6,
13039     T7,
13040     T8,
13041     T9,
13042     T10,
13043     T11,
13044     T12,
13045     T13,
13046     T14,
13047     T15,
13048     T16,
13049     T17,
13050     T18,
13051     T19,
13052     T20,
13053     T21,
13054     NullType,
13055     NullType,
13056     NullType,
13057     NullType,
13058     NullType,
13059     NullType,
13060     NullType,
13061     NullType,
13062     NullType,
13063     NullType,
13064     NullType,
13065     NullType,
13066     NullType,
13067     NullType,
13068     NullType,
13069     NullType,
13070     NullType,
13071     NullType,
13072     NullType,
13073     NullType,
13074     NullType,
13075     NullType,
13076     NullType,
13077     NullType,
13078     NullType,
13079     NullType,
13080     NullType,
13081     NullType,
13082     NullType,
13083     NullType,
13084     NullType,
13085     NullType,
13086     NullType,
13087     NullType,
13088     NullType,
13089     NullType,
13090     NullType,
13091     NullType,
13092     NullType,
13093     NullType,
13094     NullType,
13095     NullType,
13096     NullType,
13097     NullType,
13098     NullType,
13099     NullType,
13100     NullType,
13101     NullType,
13102     NullType,
13103     NullType,
13104     NullType,
13105     NullType,
13106     NullType,
13107     NullType,
13108     NullType,
13109     NullType,
13110     NullType,
13111     NullType,
13112     NullType,
13113     NullType,
13114     NullType,
13115     NullType,
13116     NullType,
13117     NullType,
13118     NullType,
13119     NullType,
13120     NullType,
13121     NullType,
13122     NullType,
13123     NullType,
13124     NullType,
13125     NullType,
13126     NullType,
13127     NullType,
13128     NullType,
13129     NullType,
13130     NullType,
13131     NullType,
13132     NullType,
13133     NullType,
13134     NullType,
13135     NullType,
13136     NullType,
13137     NullType,
13138     NullType,
13139     NullType,
13140     NullType,
13141     NullType,
13142     NullType,
13143     NullType,
13144     NullType,
13145     NullType,
13146     NullType,
13147     NullType,
13148     NullType,
13149     NullType,
13150     NullType,
13151     NullType,
13152     NullType,
13153     NullType,
13154     NullType,
13155     NullType,
13156     NullType,
13157     NullType,
13158     NullType,
13159     NullType>
13160 {
13161     typedef detail::KernelFunctorGlobal<
13162         T0,
13163         T1,
13164         T2,
13165         T3,
13166         T4,
13167         T5,
13168         T6,
13169         T7,
13170         T8,
13171         T9,
13172         T10,
13173         T11,
13174         T12,
13175         T13,
13176         T14,
13177         T15,
13178         T16,
13179         T17,
13180         T18,
13181         T19,
13182         T20,
13183         T21,
13184         NullType,
13185         NullType,
13186         NullType,
13187         NullType,
13188         NullType,
13189         NullType,
13190         NullType,
13191         NullType,
13192         NullType,
13193         NullType,
13194         NullType,
13195         NullType,
13196         NullType,
13197         NullType,
13198         NullType,
13199         NullType,
13200         NullType,
13201         NullType,
13202         NullType,
13203         NullType,
13204         NullType,
13205         NullType,
13206         NullType,
13207         NullType,
13208         NullType,
13209         NullType,
13210         NullType,
13211         NullType,
13212         NullType,
13213         NullType,
13214         NullType,
13215         NullType,
13216         NullType,
13217         NullType,
13218         NullType,
13219         NullType,
13220         NullType,
13221         NullType,
13222         NullType,
13223         NullType,
13224         NullType,
13225         NullType,
13226         NullType,
13227         NullType,
13228         NullType,
13229         NullType,
13230         NullType,
13231         NullType,
13232         NullType,
13233         NullType,
13234         NullType,
13235         NullType,
13236         NullType,
13237         NullType,
13238         NullType,
13239         NullType,
13240         NullType,
13241         NullType,
13242         NullType,
13243         NullType,
13244         NullType,
13245         NullType,
13246         NullType,
13247         NullType,
13248         NullType,
13249         NullType,
13250         NullType,
13251         NullType,
13252         NullType,
13253         NullType,
13254         NullType,
13255         NullType,
13256         NullType,
13257         NullType,
13258         NullType,
13259         NullType,
13260         NullType,
13261         NullType,
13262         NullType,
13263         NullType,
13264         NullType,
13265         NullType,
13266         NullType,
13267         NullType,
13268         NullType,
13269         NullType,
13270         NullType,
13271         NullType,
13272         NullType,
13273         NullType,
13274         NullType,
13275         NullType,
13276         NullType,
13277         NullType,
13278         NullType,
13279         NullType,
13280         NullType,
13281         NullType,
13282         NullType,
13283         NullType,
13284         NullType,
13285         NullType,
13286         NullType,
13287         NullType,
13288         NullType,
13289         NullType> FunctorType;
13290 
13291     FunctorType functor_;
13292 
13293     functionImplementation_(const FunctorType &functor) :
13294         functor_(functor)
13295     {
13296     }
13297         
13298     typedef std::tr1::function<Event (
13299         const EnqueueArgs&,
13300         T0,
13301         T1,
13302         T2,
13303         T3,
13304         T4,
13305         T5,
13306         T6,
13307         T7,
13308         T8,
13309         T9,
13310         T10,
13311         T11,
13312         T12,
13313         T13,
13314         T14,
13315         T15,
13316         T16,
13317         T17,
13318         T18,
13319         T19,
13320         T20,
13321         T21)> type_;
13322 
13323     Event operator()(const EnqueueArgs& enqueueArgs,
13324         T0 arg0,
13325         T1 arg1,
13326         T2 arg2,
13327         T3 arg3,
13328         T4 arg4,
13329         T5 arg5,
13330         T6 arg6,
13331         T7 arg7,
13332         T8 arg8,
13333         T9 arg9,
13334         T10 arg10,
13335         T11 arg11,
13336         T12 arg12,
13337         T13 arg13,
13338         T14 arg14,
13339         T15 arg15,
13340         T16 arg16,
13341         T17 arg17,
13342         T18 arg18,
13343         T19 arg19,
13344         T20 arg20,
13345         T21 arg21)
13346     {
13347         return functor_(
13348             enqueueArgs,
13349             arg0,
13350             arg1,
13351             arg2,
13352             arg3,
13353             arg4,
13354             arg5,
13355             arg6,
13356             arg7,
13357             arg8,
13358             arg9,
13359             arg10,
13360             arg11,
13361             arg12,
13362             arg13,
13363             arg14,
13364             arg15,
13365             arg16,
13366             arg17,
13367             arg18,
13368             arg19,
13369             arg20,
13370             arg21);
13371     }
13372 
13373     operator type_ ()    
13374     {
13375         return type_(*this);
13376     }
13377 
13378 };
13379 
13380 template<
13381     typename T0,
13382     typename T1,
13383     typename T2,
13384     typename T3,
13385     typename T4,
13386     typename T5,
13387     typename T6,
13388     typename T7,
13389     typename T8,
13390     typename T9,
13391     typename T10,
13392     typename T11,
13393     typename T12,
13394     typename T13,
13395     typename T14,
13396     typename T15,
13397     typename T16,
13398     typename T17,
13399     typename T18,
13400     typename T19,
13401     typename T20,
13402     typename T21,
13403     typename T22>
13404 struct functionImplementation_<
13405     T0,
13406     T1,
13407     T2,
13408     T3,
13409     T4,
13410     T5,
13411     T6,
13412     T7,
13413     T8,
13414     T9,
13415     T10,
13416     T11,
13417     T12,
13418     T13,
13419     T14,
13420     T15,
13421     T16,
13422     T17,
13423     T18,
13424     T19,
13425     T20,
13426     T21,
13427     T22,
13428     NullType,
13429     NullType,
13430     NullType,
13431     NullType,
13432     NullType,
13433     NullType,
13434     NullType,
13435     NullType,
13436     NullType,
13437     NullType,
13438     NullType,
13439     NullType,
13440     NullType,
13441     NullType,
13442     NullType,
13443     NullType,
13444     NullType,
13445     NullType,
13446     NullType,
13447     NullType,
13448     NullType,
13449     NullType,
13450     NullType,
13451     NullType,
13452     NullType,
13453     NullType,
13454     NullType,
13455     NullType,
13456     NullType,
13457     NullType,
13458     NullType,
13459     NullType,
13460     NullType,
13461     NullType,
13462     NullType,
13463     NullType,
13464     NullType,
13465     NullType,
13466     NullType,
13467     NullType,
13468     NullType,
13469     NullType,
13470     NullType,
13471     NullType,
13472     NullType,
13473     NullType,
13474     NullType,
13475     NullType,
13476     NullType,
13477     NullType,
13478     NullType,
13479     NullType,
13480     NullType,
13481     NullType,
13482     NullType,
13483     NullType,
13484     NullType,
13485     NullType,
13486     NullType,
13487     NullType,
13488     NullType,
13489     NullType,
13490     NullType,
13491     NullType,
13492     NullType,
13493     NullType,
13494     NullType,
13495     NullType,
13496     NullType,
13497     NullType,
13498     NullType,
13499     NullType,
13500     NullType,
13501     NullType,
13502     NullType,
13503     NullType,
13504     NullType,
13505     NullType,
13506     NullType,
13507     NullType,
13508     NullType,
13509     NullType,
13510     NullType,
13511     NullType,
13512     NullType,
13513     NullType,
13514     NullType,
13515     NullType,
13516     NullType,
13517     NullType,
13518     NullType,
13519     NullType,
13520     NullType,
13521     NullType,
13522     NullType,
13523     NullType,
13524     NullType,
13525     NullType,
13526     NullType,
13527     NullType,
13528     NullType,
13529     NullType,
13530     NullType,
13531     NullType,
13532     NullType>
13533 {
13534     typedef detail::KernelFunctorGlobal<
13535         T0,
13536         T1,
13537         T2,
13538         T3,
13539         T4,
13540         T5,
13541         T6,
13542         T7,
13543         T8,
13544         T9,
13545         T10,
13546         T11,
13547         T12,
13548         T13,
13549         T14,
13550         T15,
13551         T16,
13552         T17,
13553         T18,
13554         T19,
13555         T20,
13556         T21,
13557         T22,
13558         NullType,
13559         NullType,
13560         NullType,
13561         NullType,
13562         NullType,
13563         NullType,
13564         NullType,
13565         NullType,
13566         NullType,
13567         NullType,
13568         NullType,
13569         NullType,
13570         NullType,
13571         NullType,
13572         NullType,
13573         NullType,
13574         NullType,
13575         NullType,
13576         NullType,
13577         NullType,
13578         NullType,
13579         NullType,
13580         NullType,
13581         NullType,
13582         NullType,
13583         NullType,
13584         NullType,
13585         NullType,
13586         NullType,
13587         NullType,
13588         NullType,
13589         NullType,
13590         NullType,
13591         NullType,
13592         NullType,
13593         NullType,
13594         NullType,
13595         NullType,
13596         NullType,
13597         NullType,
13598         NullType,
13599         NullType,
13600         NullType,
13601         NullType,
13602         NullType,
13603         NullType,
13604         NullType,
13605         NullType,
13606         NullType,
13607         NullType,
13608         NullType,
13609         NullType,
13610         NullType,
13611         NullType,
13612         NullType,
13613         NullType,
13614         NullType,
13615         NullType,
13616         NullType,
13617         NullType,
13618         NullType,
13619         NullType,
13620         NullType,
13621         NullType,
13622         NullType,
13623         NullType,
13624         NullType,
13625         NullType,
13626         NullType,
13627         NullType,
13628         NullType,
13629         NullType,
13630         NullType,
13631         NullType,
13632         NullType,
13633         NullType,
13634         NullType,
13635         NullType,
13636         NullType,
13637         NullType,
13638         NullType,
13639         NullType,
13640         NullType,
13641         NullType,
13642         NullType,
13643         NullType,
13644         NullType,
13645         NullType,
13646         NullType,
13647         NullType,
13648         NullType,
13649         NullType,
13650         NullType,
13651         NullType,
13652         NullType,
13653         NullType,
13654         NullType,
13655         NullType,
13656         NullType,
13657         NullType,
13658         NullType,
13659         NullType,
13660         NullType,
13661         NullType,
13662         NullType> FunctorType;
13663 
13664     FunctorType functor_;
13665 
13666     functionImplementation_(const FunctorType &functor) :
13667         functor_(functor)
13668     {
13669     }
13670         
13671     typedef std::tr1::function<Event (
13672         const EnqueueArgs&,
13673         T0,
13674         T1,
13675         T2,
13676         T3,
13677         T4,
13678         T5,
13679         T6,
13680         T7,
13681         T8,
13682         T9,
13683         T10,
13684         T11,
13685         T12,
13686         T13,
13687         T14,
13688         T15,
13689         T16,
13690         T17,
13691         T18,
13692         T19,
13693         T20,
13694         T21,
13695         T22)> type_;
13696 
13697     Event operator()(const EnqueueArgs& enqueueArgs,
13698         T0 arg0,
13699         T1 arg1,
13700         T2 arg2,
13701         T3 arg3,
13702         T4 arg4,
13703         T5 arg5,
13704         T6 arg6,
13705         T7 arg7,
13706         T8 arg8,
13707         T9 arg9,
13708         T10 arg10,
13709         T11 arg11,
13710         T12 arg12,
13711         T13 arg13,
13712         T14 arg14,
13713         T15 arg15,
13714         T16 arg16,
13715         T17 arg17,
13716         T18 arg18,
13717         T19 arg19,
13718         T20 arg20,
13719         T21 arg21,
13720         T22 arg22)
13721     {
13722         return functor_(
13723             enqueueArgs,
13724             arg0,
13725             arg1,
13726             arg2,
13727             arg3,
13728             arg4,
13729             arg5,
13730             arg6,
13731             arg7,
13732             arg8,
13733             arg9,
13734             arg10,
13735             arg11,
13736             arg12,
13737             arg13,
13738             arg14,
13739             arg15,
13740             arg16,
13741             arg17,
13742             arg18,
13743             arg19,
13744             arg20,
13745             arg21,
13746             arg22);
13747     }
13748 
13749     operator type_ ()    
13750     {
13751         return type_(*this);
13752     }
13753 
13754 };
13755 
13756 template<
13757     typename T0,
13758     typename T1,
13759     typename T2,
13760     typename T3,
13761     typename T4,
13762     typename T5,
13763     typename T6,
13764     typename T7,
13765     typename T8,
13766     typename T9,
13767     typename T10,
13768     typename T11,
13769     typename T12,
13770     typename T13,
13771     typename T14,
13772     typename T15,
13773     typename T16,
13774     typename T17,
13775     typename T18,
13776     typename T19,
13777     typename T20,
13778     typename T21,
13779     typename T22,
13780     typename T23>
13781 struct functionImplementation_<
13782     T0,
13783     T1,
13784     T2,
13785     T3,
13786     T4,
13787     T5,
13788     T6,
13789     T7,
13790     T8,
13791     T9,
13792     T10,
13793     T11,
13794     T12,
13795     T13,
13796     T14,
13797     T15,
13798     T16,
13799     T17,
13800     T18,
13801     T19,
13802     T20,
13803     T21,
13804     T22,
13805     T23,
13806     NullType,
13807     NullType,
13808     NullType,
13809     NullType,
13810     NullType,
13811     NullType,
13812     NullType,
13813     NullType,
13814     NullType,
13815     NullType,
13816     NullType,
13817     NullType,
13818     NullType,
13819     NullType,
13820     NullType,
13821     NullType,
13822     NullType,
13823     NullType,
13824     NullType,
13825     NullType,
13826     NullType,
13827     NullType,
13828     NullType,
13829     NullType,
13830     NullType,
13831     NullType,
13832     NullType,
13833     NullType,
13834     NullType,
13835     NullType,
13836     NullType,
13837     NullType,
13838     NullType,
13839     NullType,
13840     NullType,
13841     NullType,
13842     NullType,
13843     NullType,
13844     NullType,
13845     NullType,
13846     NullType,
13847     NullType,
13848     NullType,
13849     NullType,
13850     NullType,
13851     NullType,
13852     NullType,
13853     NullType,
13854     NullType,
13855     NullType,
13856     NullType,
13857     NullType,
13858     NullType,
13859     NullType,
13860     NullType,
13861     NullType,
13862     NullType,
13863     NullType,
13864     NullType,
13865     NullType,
13866     NullType,
13867     NullType,
13868     NullType,
13869     NullType,
13870     NullType,
13871     NullType,
13872     NullType,
13873     NullType,
13874     NullType,
13875     NullType,
13876     NullType,
13877     NullType,
13878     NullType,
13879     NullType,
13880     NullType,
13881     NullType,
13882     NullType,
13883     NullType,
13884     NullType,
13885     NullType,
13886     NullType,
13887     NullType,
13888     NullType,
13889     NullType,
13890     NullType,
13891     NullType,
13892     NullType,
13893     NullType,
13894     NullType,
13895     NullType,
13896     NullType,
13897     NullType,
13898     NullType,
13899     NullType,
13900     NullType,
13901     NullType,
13902     NullType,
13903     NullType,
13904     NullType,
13905     NullType,
13906     NullType,
13907     NullType,
13908     NullType,
13909     NullType>
13910 {
13911     typedef detail::KernelFunctorGlobal<
13912         T0,
13913         T1,
13914         T2,
13915         T3,
13916         T4,
13917         T5,
13918         T6,
13919         T7,
13920         T8,
13921         T9,
13922         T10,
13923         T11,
13924         T12,
13925         T13,
13926         T14,
13927         T15,
13928         T16,
13929         T17,
13930         T18,
13931         T19,
13932         T20,
13933         T21,
13934         T22,
13935         T23,
13936         NullType,
13937         NullType,
13938         NullType,
13939         NullType,
13940         NullType,
13941         NullType,
13942         NullType,
13943         NullType,
13944         NullType,
13945         NullType,
13946         NullType,
13947         NullType,
13948         NullType,
13949         NullType,
13950         NullType,
13951         NullType,
13952         NullType,
13953         NullType,
13954         NullType,
13955         NullType,
13956         NullType,
13957         NullType,
13958         NullType,
13959         NullType,
13960         NullType,
13961         NullType,
13962         NullType,
13963         NullType,
13964         NullType,
13965         NullType,
13966         NullType,
13967         NullType,
13968         NullType,
13969         NullType,
13970         NullType,
13971         NullType,
13972         NullType,
13973         NullType,
13974         NullType,
13975         NullType,
13976         NullType,
13977         NullType,
13978         NullType,
13979         NullType,
13980         NullType,
13981         NullType,
13982         NullType,
13983         NullType,
13984         NullType,
13985         NullType,
13986         NullType,
13987         NullType,
13988         NullType,
13989         NullType,
13990         NullType,
13991         NullType,
13992         NullType,
13993         NullType,
13994         NullType,
13995         NullType,
13996         NullType,
13997         NullType,
13998         NullType,
13999         NullType,
14000         NullType,
14001         NullType,
14002         NullType,
14003         NullType,
14004         NullType,
14005         NullType,
14006         NullType,
14007         NullType,
14008         NullType,
14009         NullType,
14010         NullType,
14011         NullType,
14012         NullType,
14013         NullType,
14014         NullType,
14015         NullType,
14016         NullType,
14017         NullType,
14018         NullType,
14019         NullType,
14020         NullType,
14021         NullType,
14022         NullType,
14023         NullType,
14024         NullType,
14025         NullType,
14026         NullType,
14027         NullType,
14028         NullType,
14029         NullType,
14030         NullType,
14031         NullType,
14032         NullType,
14033         NullType,
14034         NullType,
14035         NullType,
14036         NullType,
14037         NullType,
14038         NullType,
14039         NullType> FunctorType;
14040 
14041     FunctorType functor_;
14042 
14043     functionImplementation_(const FunctorType &functor) :
14044         functor_(functor)
14045     {
14046     }
14047         
14048     typedef std::tr1::function<Event (
14049         const EnqueueArgs&,
14050         T0,
14051         T1,
14052         T2,
14053         T3,
14054         T4,
14055         T5,
14056         T6,
14057         T7,
14058         T8,
14059         T9,
14060         T10,
14061         T11,
14062         T12,
14063         T13,
14064         T14,
14065         T15,
14066         T16,
14067         T17,
14068         T18,
14069         T19,
14070         T20,
14071         T21,
14072         T22,
14073         T23)> type_;
14074 
14075     Event operator()(const EnqueueArgs& enqueueArgs,
14076         T0 arg0,
14077         T1 arg1,
14078         T2 arg2,
14079         T3 arg3,
14080         T4 arg4,
14081         T5 arg5,
14082         T6 arg6,
14083         T7 arg7,
14084         T8 arg8,
14085         T9 arg9,
14086         T10 arg10,
14087         T11 arg11,
14088         T12 arg12,
14089         T13 arg13,
14090         T14 arg14,
14091         T15 arg15,
14092         T16 arg16,
14093         T17 arg17,
14094         T18 arg18,
14095         T19 arg19,
14096         T20 arg20,
14097         T21 arg21,
14098         T22 arg22,
14099         T23 arg23)
14100     {
14101         return functor_(
14102             enqueueArgs,
14103             arg0,
14104             arg1,
14105             arg2,
14106             arg3,
14107             arg4,
14108             arg5,
14109             arg6,
14110             arg7,
14111             arg8,
14112             arg9,
14113             arg10,
14114             arg11,
14115             arg12,
14116             arg13,
14117             arg14,
14118             arg15,
14119             arg16,
14120             arg17,
14121             arg18,
14122             arg19,
14123             arg20,
14124             arg21,
14125             arg22,
14126             arg23);
14127     }
14128 
14129     operator type_ ()    
14130     {
14131         return type_(*this);
14132     }
14133 
14134 };
14135 
14136 template<
14137     typename T0,
14138     typename T1,
14139     typename T2,
14140     typename T3,
14141     typename T4,
14142     typename T5,
14143     typename T6,
14144     typename T7,
14145     typename T8,
14146     typename T9,
14147     typename T10,
14148     typename T11,
14149     typename T12,
14150     typename T13,
14151     typename T14,
14152     typename T15,
14153     typename T16,
14154     typename T17,
14155     typename T18,
14156     typename T19,
14157     typename T20,
14158     typename T21,
14159     typename T22,
14160     typename T23,
14161     typename T24>
14162 struct functionImplementation_<
14163     T0,
14164     T1,
14165     T2,
14166     T3,
14167     T4,
14168     T5,
14169     T6,
14170     T7,
14171     T8,
14172     T9,
14173     T10,
14174     T11,
14175     T12,
14176     T13,
14177     T14,
14178     T15,
14179     T16,
14180     T17,
14181     T18,
14182     T19,
14183     T20,
14184     T21,
14185     T22,
14186     T23,
14187     T24,
14188     NullType,
14189     NullType,
14190     NullType,
14191     NullType,
14192     NullType,
14193     NullType,
14194     NullType,
14195     NullType,
14196     NullType,
14197     NullType,
14198     NullType,
14199     NullType,
14200     NullType,
14201     NullType,
14202     NullType,
14203     NullType,
14204     NullType,
14205     NullType,
14206     NullType,
14207     NullType,
14208     NullType,
14209     NullType,
14210     NullType,
14211     NullType,
14212     NullType,
14213     NullType,
14214     NullType,
14215     NullType,
14216     NullType,
14217     NullType,
14218     NullType,
14219     NullType,
14220     NullType,
14221     NullType,
14222     NullType,
14223     NullType,
14224     NullType,
14225     NullType,
14226     NullType,
14227     NullType,
14228     NullType,
14229     NullType,
14230     NullType,
14231     NullType,
14232     NullType,
14233     NullType,
14234     NullType,
14235     NullType,
14236     NullType,
14237     NullType,
14238     NullType,
14239     NullType,
14240     NullType,
14241     NullType,
14242     NullType,
14243     NullType,
14244     NullType,
14245     NullType,
14246     NullType,
14247     NullType,
14248     NullType,
14249     NullType,
14250     NullType,
14251     NullType,
14252     NullType,
14253     NullType,
14254     NullType,
14255     NullType,
14256     NullType,
14257     NullType,
14258     NullType,
14259     NullType,
14260     NullType,
14261     NullType,
14262     NullType,
14263     NullType,
14264     NullType,
14265     NullType,
14266     NullType,
14267     NullType,
14268     NullType,
14269     NullType,
14270     NullType,
14271     NullType,
14272     NullType,
14273     NullType,
14274     NullType,
14275     NullType,
14276     NullType,
14277     NullType,
14278     NullType,
14279     NullType,
14280     NullType,
14281     NullType,
14282     NullType,
14283     NullType,
14284     NullType,
14285     NullType,
14286     NullType,
14287     NullType,
14288     NullType,
14289     NullType,
14290     NullType>
14291 {
14292     typedef detail::KernelFunctorGlobal<
14293         T0,
14294         T1,
14295         T2,
14296         T3,
14297         T4,
14298         T5,
14299         T6,
14300         T7,
14301         T8,
14302         T9,
14303         T10,
14304         T11,
14305         T12,
14306         T13,
14307         T14,
14308         T15,
14309         T16,
14310         T17,
14311         T18,
14312         T19,
14313         T20,
14314         T21,
14315         T22,
14316         T23,
14317         T24,
14318         NullType,
14319         NullType,
14320         NullType,
14321         NullType,
14322         NullType,
14323         NullType,
14324         NullType,
14325         NullType,
14326         NullType,
14327         NullType,
14328         NullType,
14329         NullType,
14330         NullType,
14331         NullType,
14332         NullType,
14333         NullType,
14334         NullType,
14335         NullType,
14336         NullType,
14337         NullType,
14338         NullType,
14339         NullType,
14340         NullType,
14341         NullType,
14342         NullType,
14343         NullType,
14344         NullType,
14345         NullType,
14346         NullType,
14347         NullType,
14348         NullType,
14349         NullType,
14350         NullType,
14351         NullType,
14352         NullType,
14353         NullType,
14354         NullType,
14355         NullType,
14356         NullType,
14357         NullType,
14358         NullType,
14359         NullType,
14360         NullType,
14361         NullType,
14362         NullType,
14363         NullType,
14364         NullType,
14365         NullType,
14366         NullType,
14367         NullType,
14368         NullType,
14369         NullType,
14370         NullType,
14371         NullType,
14372         NullType,
14373         NullType,
14374         NullType,
14375         NullType,
14376         NullType,
14377         NullType,
14378         NullType,
14379         NullType,
14380         NullType,
14381         NullType,
14382         NullType,
14383         NullType,
14384         NullType,
14385         NullType,
14386         NullType,
14387         NullType,
14388         NullType,
14389         NullType,
14390         NullType,
14391         NullType,
14392         NullType,
14393         NullType,
14394         NullType,
14395         NullType,
14396         NullType,
14397         NullType,
14398         NullType,
14399         NullType,
14400         NullType,
14401         NullType,
14402         NullType,
14403         NullType,
14404         NullType,
14405         NullType,
14406         NullType,
14407         NullType,
14408         NullType,
14409         NullType,
14410         NullType,
14411         NullType,
14412         NullType,
14413         NullType,
14414         NullType,
14415         NullType,
14416         NullType,
14417         NullType,
14418         NullType,
14419         NullType,
14420         NullType> FunctorType;
14421 
14422     FunctorType functor_;
14423 
14424     functionImplementation_(const FunctorType &functor) :
14425         functor_(functor)
14426     {
14427     }
14428         
14429     typedef std::tr1::function<Event (
14430         const EnqueueArgs&,
14431         T0,
14432         T1,
14433         T2,
14434         T3,
14435         T4,
14436         T5,
14437         T6,
14438         T7,
14439         T8,
14440         T9,
14441         T10,
14442         T11,
14443         T12,
14444         T13,
14445         T14,
14446         T15,
14447         T16,
14448         T17,
14449         T18,
14450         T19,
14451         T20,
14452         T21,
14453         T22,
14454         T23,
14455         T24)> type_;
14456 
14457     Event operator()(const EnqueueArgs& enqueueArgs,
14458         T0 arg0,
14459         T1 arg1,
14460         T2 arg2,
14461         T3 arg3,
14462         T4 arg4,
14463         T5 arg5,
14464         T6 arg6,
14465         T7 arg7,
14466         T8 arg8,
14467         T9 arg9,
14468         T10 arg10,
14469         T11 arg11,
14470         T12 arg12,
14471         T13 arg13,
14472         T14 arg14,
14473         T15 arg15,
14474         T16 arg16,
14475         T17 arg17,
14476         T18 arg18,
14477         T19 arg19,
14478         T20 arg20,
14479         T21 arg21,
14480         T22 arg22,
14481         T23 arg23,
14482         T24 arg24)
14483     {
14484         return functor_(
14485             enqueueArgs,
14486             arg0,
14487             arg1,
14488             arg2,
14489             arg3,
14490             arg4,
14491             arg5,
14492             arg6,
14493             arg7,
14494             arg8,
14495             arg9,
14496             arg10,
14497             arg11,
14498             arg12,
14499             arg13,
14500             arg14,
14501             arg15,
14502             arg16,
14503             arg17,
14504             arg18,
14505             arg19,
14506             arg20,
14507             arg21,
14508             arg22,
14509             arg23,
14510             arg24);
14511     }
14512 
14513     operator type_ ()    
14514     {
14515         return type_(*this);
14516     }
14517 
14518 };
14519 
14520 template<
14521     typename T0,
14522     typename T1,
14523     typename T2,
14524     typename T3,
14525     typename T4,
14526     typename T5,
14527     typename T6,
14528     typename T7,
14529     typename T8,
14530     typename T9,
14531     typename T10,
14532     typename T11,
14533     typename T12,
14534     typename T13,
14535     typename T14,
14536     typename T15,
14537     typename T16,
14538     typename T17,
14539     typename T18,
14540     typename T19,
14541     typename T20,
14542     typename T21,
14543     typename T22,
14544     typename T23,
14545     typename T24,
14546     typename T25>
14547 struct functionImplementation_<
14548     T0,
14549     T1,
14550     T2,
14551     T3,
14552     T4,
14553     T5,
14554     T6,
14555     T7,
14556     T8,
14557     T9,
14558     T10,
14559     T11,
14560     T12,
14561     T13,
14562     T14,
14563     T15,
14564     T16,
14565     T17,
14566     T18,
14567     T19,
14568     T20,
14569     T21,
14570     T22,
14571     T23,
14572     T24,
14573     T25,
14574     NullType,
14575     NullType,
14576     NullType,
14577     NullType,
14578     NullType,
14579     NullType,
14580     NullType,
14581     NullType,
14582     NullType,
14583     NullType,
14584     NullType,
14585     NullType,
14586     NullType,
14587     NullType,
14588     NullType,
14589     NullType,
14590     NullType,
14591     NullType,
14592     NullType,
14593     NullType,
14594     NullType,
14595     NullType,
14596     NullType,
14597     NullType,
14598     NullType,
14599     NullType,
14600     NullType,
14601     NullType,
14602     NullType,
14603     NullType,
14604     NullType,
14605     NullType,
14606     NullType,
14607     NullType,
14608     NullType,
14609     NullType,
14610     NullType,
14611     NullType,
14612     NullType,
14613     NullType,
14614     NullType,
14615     NullType,
14616     NullType,
14617     NullType,
14618     NullType,
14619     NullType,
14620     NullType,
14621     NullType,
14622     NullType,
14623     NullType,
14624     NullType,
14625     NullType,
14626     NullType,
14627     NullType,
14628     NullType,
14629     NullType,
14630     NullType,
14631     NullType,
14632     NullType,
14633     NullType,
14634     NullType,
14635     NullType,
14636     NullType,
14637     NullType,
14638     NullType,
14639     NullType,
14640     NullType,
14641     NullType,
14642     NullType,
14643     NullType,
14644     NullType,
14645     NullType,
14646     NullType,
14647     NullType,
14648     NullType,
14649     NullType,
14650     NullType,
14651     NullType,
14652     NullType,
14653     NullType,
14654     NullType,
14655     NullType,
14656     NullType,
14657     NullType,
14658     NullType,
14659     NullType,
14660     NullType,
14661     NullType,
14662     NullType,
14663     NullType,
14664     NullType,
14665     NullType,
14666     NullType,
14667     NullType,
14668     NullType,
14669     NullType,
14670     NullType,
14671     NullType,
14672     NullType,
14673     NullType,
14674     NullType,
14675     NullType>
14676 {
14677     typedef detail::KernelFunctorGlobal<
14678         T0,
14679         T1,
14680         T2,
14681         T3,
14682         T4,
14683         T5,
14684         T6,
14685         T7,
14686         T8,
14687         T9,
14688         T10,
14689         T11,
14690         T12,
14691         T13,
14692         T14,
14693         T15,
14694         T16,
14695         T17,
14696         T18,
14697         T19,
14698         T20,
14699         T21,
14700         T22,
14701         T23,
14702         T24,
14703         T25,
14704         NullType,
14705         NullType,
14706         NullType,
14707         NullType,
14708         NullType,
14709         NullType,
14710         NullType,
14711         NullType,
14712         NullType,
14713         NullType,
14714         NullType,
14715         NullType,
14716         NullType,
14717         NullType,
14718         NullType,
14719         NullType,
14720         NullType,
14721         NullType,
14722         NullType,
14723         NullType,
14724         NullType,
14725         NullType,
14726         NullType,
14727         NullType,
14728         NullType,
14729         NullType,
14730         NullType,
14731         NullType,
14732         NullType,
14733         NullType,
14734         NullType,
14735         NullType,
14736         NullType,
14737         NullType,
14738         NullType,
14739         NullType,
14740         NullType,
14741         NullType,
14742         NullType,
14743         NullType,
14744         NullType,
14745         NullType,
14746         NullType,
14747         NullType,
14748         NullType,
14749         NullType,
14750         NullType,
14751         NullType,
14752         NullType,
14753         NullType,
14754         NullType,
14755         NullType,
14756         NullType,
14757         NullType,
14758         NullType,
14759         NullType,
14760         NullType,
14761         NullType,
14762         NullType,
14763         NullType,
14764         NullType,
14765         NullType,
14766         NullType,
14767         NullType,
14768         NullType,
14769         NullType,
14770         NullType,
14771         NullType,
14772         NullType,
14773         NullType,
14774         NullType,
14775         NullType,
14776         NullType,
14777         NullType,
14778         NullType,
14779         NullType,
14780         NullType,
14781         NullType,
14782         NullType,
14783         NullType,
14784         NullType,
14785         NullType,
14786         NullType,
14787         NullType,
14788         NullType,
14789         NullType,
14790         NullType,
14791         NullType,
14792         NullType,
14793         NullType,
14794         NullType,
14795         NullType,
14796         NullType,
14797         NullType,
14798         NullType,
14799         NullType,
14800         NullType,
14801         NullType,
14802         NullType,
14803         NullType,
14804         NullType,
14805         NullType> FunctorType;
14806 
14807     FunctorType functor_;
14808 
14809     functionImplementation_(const FunctorType &functor) :
14810         functor_(functor)
14811     {
14812     }
14813         
14814     typedef std::tr1::function<Event (
14815         const EnqueueArgs&,
14816         T0,
14817         T1,
14818         T2,
14819         T3,
14820         T4,
14821         T5,
14822         T6,
14823         T7,
14824         T8,
14825         T9,
14826         T10,
14827         T11,
14828         T12,
14829         T13,
14830         T14,
14831         T15,
14832         T16,
14833         T17,
14834         T18,
14835         T19,
14836         T20,
14837         T21,
14838         T22,
14839         T23,
14840         T24,
14841         T25)> type_;
14842 
14843     Event operator()(const EnqueueArgs& enqueueArgs,
14844         T0 arg0,
14845         T1 arg1,
14846         T2 arg2,
14847         T3 arg3,
14848         T4 arg4,
14849         T5 arg5,
14850         T6 arg6,
14851         T7 arg7,
14852         T8 arg8,
14853         T9 arg9,
14854         T10 arg10,
14855         T11 arg11,
14856         T12 arg12,
14857         T13 arg13,
14858         T14 arg14,
14859         T15 arg15,
14860         T16 arg16,
14861         T17 arg17,
14862         T18 arg18,
14863         T19 arg19,
14864         T20 arg20,
14865         T21 arg21,
14866         T22 arg22,
14867         T23 arg23,
14868         T24 arg24,
14869         T25 arg25)
14870     {
14871         return functor_(
14872             enqueueArgs,
14873             arg0,
14874             arg1,
14875             arg2,
14876             arg3,
14877             arg4,
14878             arg5,
14879             arg6,
14880             arg7,
14881             arg8,
14882             arg9,
14883             arg10,
14884             arg11,
14885             arg12,
14886             arg13,
14887             arg14,
14888             arg15,
14889             arg16,
14890             arg17,
14891             arg18,
14892             arg19,
14893             arg20,
14894             arg21,
14895             arg22,
14896             arg23,
14897             arg24,
14898             arg25);
14899     }
14900 
14901     operator type_ ()    
14902     {
14903         return type_(*this);
14904     }
14905 
14906 };
14907 
14908 template<
14909     typename T0,
14910     typename T1,
14911     typename T2,
14912     typename T3,
14913     typename T4,
14914     typename T5,
14915     typename T6,
14916     typename T7,
14917     typename T8,
14918     typename T9,
14919     typename T10,
14920     typename T11,
14921     typename T12,
14922     typename T13,
14923     typename T14,
14924     typename T15,
14925     typename T16,
14926     typename T17,
14927     typename T18,
14928     typename T19,
14929     typename T20,
14930     typename T21,
14931     typename T22,
14932     typename T23,
14933     typename T24,
14934     typename T25,
14935     typename T26>
14936 struct functionImplementation_<
14937     T0,
14938     T1,
14939     T2,
14940     T3,
14941     T4,
14942     T5,
14943     T6,
14944     T7,
14945     T8,
14946     T9,
14947     T10,
14948     T11,
14949     T12,
14950     T13,
14951     T14,
14952     T15,
14953     T16,
14954     T17,
14955     T18,
14956     T19,
14957     T20,
14958     T21,
14959     T22,
14960     T23,
14961     T24,
14962     T25,
14963     T26,
14964     NullType,
14965     NullType,
14966     NullType,
14967     NullType,
14968     NullType,
14969     NullType,
14970     NullType,
14971     NullType,
14972     NullType,
14973     NullType,
14974     NullType,
14975     NullType,
14976     NullType,
14977     NullType,
14978     NullType,
14979     NullType,
14980     NullType,
14981     NullType,
14982     NullType,
14983     NullType,
14984     NullType,
14985     NullType,
14986     NullType,
14987     NullType,
14988     NullType,
14989     NullType,
14990     NullType,
14991     NullType,
14992     NullType,
14993     NullType,
14994     NullType,
14995     NullType,
14996     NullType,
14997     NullType,
14998     NullType,
14999     NullType,
15000     NullType,
15001     NullType,
15002     NullType,
15003     NullType,
15004     NullType,
15005     NullType,
15006     NullType,
15007     NullType,
15008     NullType,
15009     NullType,
15010     NullType,
15011     NullType,
15012     NullType,
15013     NullType,
15014     NullType,
15015     NullType,
15016     NullType,
15017     NullType,
15018     NullType,
15019     NullType,
15020     NullType,
15021     NullType,
15022     NullType,
15023     NullType,
15024     NullType,
15025     NullType,
15026     NullType,
15027     NullType,
15028     NullType,
15029     NullType,
15030     NullType,
15031     NullType,
15032     NullType,
15033     NullType,
15034     NullType,
15035     NullType,
15036     NullType,
15037     NullType,
15038     NullType,
15039     NullType,
15040     NullType,
15041     NullType,
15042     NullType,
15043     NullType,
15044     NullType,
15045     NullType,
15046     NullType,
15047     NullType,
15048     NullType,
15049     NullType,
15050     NullType,
15051     NullType,
15052     NullType,
15053     NullType,
15054     NullType,
15055     NullType,
15056     NullType,
15057     NullType,
15058     NullType,
15059     NullType,
15060     NullType,
15061     NullType,
15062     NullType,
15063     NullType,
15064     NullType>
15065 {
15066     typedef detail::KernelFunctorGlobal<
15067         T0,
15068         T1,
15069         T2,
15070         T3,
15071         T4,
15072         T5,
15073         T6,
15074         T7,
15075         T8,
15076         T9,
15077         T10,
15078         T11,
15079         T12,
15080         T13,
15081         T14,
15082         T15,
15083         T16,
15084         T17,
15085         T18,
15086         T19,
15087         T20,
15088         T21,
15089         T22,
15090         T23,
15091         T24,
15092         T25,
15093         T26,
15094         NullType,
15095         NullType,
15096         NullType,
15097         NullType,
15098         NullType,
15099         NullType,
15100         NullType,
15101         NullType,
15102         NullType,
15103         NullType,
15104         NullType,
15105         NullType,
15106         NullType,
15107         NullType,
15108         NullType,
15109         NullType,
15110         NullType,
15111         NullType,
15112         NullType,
15113         NullType,
15114         NullType,
15115         NullType,
15116         NullType,
15117         NullType,
15118         NullType,
15119         NullType,
15120         NullType,
15121         NullType,
15122         NullType,
15123         NullType,
15124         NullType,
15125         NullType,
15126         NullType,
15127         NullType,
15128         NullType,
15129         NullType,
15130         NullType,
15131         NullType,
15132         NullType,
15133         NullType,
15134         NullType,
15135         NullType,
15136         NullType,
15137         NullType,
15138         NullType,
15139         NullType,
15140         NullType,
15141         NullType,
15142         NullType,
15143         NullType,
15144         NullType,
15145         NullType,
15146         NullType,
15147         NullType,
15148         NullType,
15149         NullType,
15150         NullType,
15151         NullType,
15152         NullType,
15153         NullType,
15154         NullType,
15155         NullType,
15156         NullType,
15157         NullType,
15158         NullType,
15159         NullType,
15160         NullType,
15161         NullType,
15162         NullType,
15163         NullType,
15164         NullType,
15165         NullType,
15166         NullType,
15167         NullType,
15168         NullType,
15169         NullType,
15170         NullType,
15171         NullType,
15172         NullType,
15173         NullType,
15174         NullType,
15175         NullType,
15176         NullType,
15177         NullType,
15178         NullType,
15179         NullType,
15180         NullType,
15181         NullType,
15182         NullType,
15183         NullType,
15184         NullType,
15185         NullType,
15186         NullType,
15187         NullType,
15188         NullType,
15189         NullType,
15190         NullType,
15191         NullType,
15192         NullType,
15193         NullType,
15194         NullType> FunctorType;
15195 
15196     FunctorType functor_;
15197 
15198     functionImplementation_(const FunctorType &functor) :
15199         functor_(functor)
15200     {
15201     }
15202         
15203     typedef std::tr1::function<Event (
15204         const EnqueueArgs&,
15205         T0,
15206         T1,
15207         T2,
15208         T3,
15209         T4,
15210         T5,
15211         T6,
15212         T7,
15213         T8,
15214         T9,
15215         T10,
15216         T11,
15217         T12,
15218         T13,
15219         T14,
15220         T15,
15221         T16,
15222         T17,
15223         T18,
15224         T19,
15225         T20,
15226         T21,
15227         T22,
15228         T23,
15229         T24,
15230         T25,
15231         T26)> type_;
15232 
15233     Event operator()(const EnqueueArgs& enqueueArgs,
15234         T0 arg0,
15235         T1 arg1,
15236         T2 arg2,
15237         T3 arg3,
15238         T4 arg4,
15239         T5 arg5,
15240         T6 arg6,
15241         T7 arg7,
15242         T8 arg8,
15243         T9 arg9,
15244         T10 arg10,
15245         T11 arg11,
15246         T12 arg12,
15247         T13 arg13,
15248         T14 arg14,
15249         T15 arg15,
15250         T16 arg16,
15251         T17 arg17,
15252         T18 arg18,
15253         T19 arg19,
15254         T20 arg20,
15255         T21 arg21,
15256         T22 arg22,
15257         T23 arg23,
15258         T24 arg24,
15259         T25 arg25,
15260         T26 arg26)
15261     {
15262         return functor_(
15263             enqueueArgs,
15264             arg0,
15265             arg1,
15266             arg2,
15267             arg3,
15268             arg4,
15269             arg5,
15270             arg6,
15271             arg7,
15272             arg8,
15273             arg9,
15274             arg10,
15275             arg11,
15276             arg12,
15277             arg13,
15278             arg14,
15279             arg15,
15280             arg16,
15281             arg17,
15282             arg18,
15283             arg19,
15284             arg20,
15285             arg21,
15286             arg22,
15287             arg23,
15288             arg24,
15289             arg25,
15290             arg26);
15291     }
15292 
15293     operator type_ ()    
15294     {
15295         return type_(*this);
15296     }
15297 
15298 };
15299 
15300 template<
15301     typename T0,
15302     typename T1,
15303     typename T2,
15304     typename T3,
15305     typename T4,
15306     typename T5,
15307     typename T6,
15308     typename T7,
15309     typename T8,
15310     typename T9,
15311     typename T10,
15312     typename T11,
15313     typename T12,
15314     typename T13,
15315     typename T14,
15316     typename T15,
15317     typename T16,
15318     typename T17,
15319     typename T18,
15320     typename T19,
15321     typename T20,
15322     typename T21,
15323     typename T22,
15324     typename T23,
15325     typename T24,
15326     typename T25,
15327     typename T26,
15328     typename T27>
15329 struct functionImplementation_<
15330     T0,
15331     T1,
15332     T2,
15333     T3,
15334     T4,
15335     T5,
15336     T6,
15337     T7,
15338     T8,
15339     T9,
15340     T10,
15341     T11,
15342     T12,
15343     T13,
15344     T14,
15345     T15,
15346     T16,
15347     T17,
15348     T18,
15349     T19,
15350     T20,
15351     T21,
15352     T22,
15353     T23,
15354     T24,
15355     T25,
15356     T26,
15357     T27,
15358     NullType,
15359     NullType,
15360     NullType,
15361     NullType,
15362     NullType,
15363     NullType,
15364     NullType,
15365     NullType,
15366     NullType,
15367     NullType,
15368     NullType,
15369     NullType,
15370     NullType,
15371     NullType,
15372     NullType,
15373     NullType,
15374     NullType,
15375     NullType,
15376     NullType,
15377     NullType,
15378     NullType,
15379     NullType,
15380     NullType,
15381     NullType,
15382     NullType,
15383     NullType,
15384     NullType,
15385     NullType,
15386     NullType,
15387     NullType,
15388     NullType,
15389     NullType,
15390     NullType,
15391     NullType,
15392     NullType,
15393     NullType,
15394     NullType,
15395     NullType,
15396     NullType,
15397     NullType,
15398     NullType,
15399     NullType,
15400     NullType,
15401     NullType,
15402     NullType,
15403     NullType,
15404     NullType,
15405     NullType,
15406     NullType,
15407     NullType,
15408     NullType,
15409     NullType,
15410     NullType,
15411     NullType,
15412     NullType,
15413     NullType,
15414     NullType,
15415     NullType,
15416     NullType,
15417     NullType,
15418     NullType,
15419     NullType,
15420     NullType,
15421     NullType,
15422     NullType,
15423     NullType,
15424     NullType,
15425     NullType,
15426     NullType,
15427     NullType,
15428     NullType,
15429     NullType,
15430     NullType,
15431     NullType,
15432     NullType,
15433     NullType,
15434     NullType,
15435     NullType,
15436     NullType,
15437     NullType,
15438     NullType,
15439     NullType,
15440     NullType,
15441     NullType,
15442     NullType,
15443     NullType,
15444     NullType,
15445     NullType,
15446     NullType,
15447     NullType,
15448     NullType,
15449     NullType,
15450     NullType,
15451     NullType,
15452     NullType,
15453     NullType,
15454     NullType,
15455     NullType,
15456     NullType,
15457     NullType>
15458 {
15459     typedef detail::KernelFunctorGlobal<
15460         T0,
15461         T1,
15462         T2,
15463         T3,
15464         T4,
15465         T5,
15466         T6,
15467         T7,
15468         T8,
15469         T9,
15470         T10,
15471         T11,
15472         T12,
15473         T13,
15474         T14,
15475         T15,
15476         T16,
15477         T17,
15478         T18,
15479         T19,
15480         T20,
15481         T21,
15482         T22,
15483         T23,
15484         T24,
15485         T25,
15486         T26,
15487         T27,
15488         NullType,
15489         NullType,
15490         NullType,
15491         NullType,
15492         NullType,
15493         NullType,
15494         NullType,
15495         NullType,
15496         NullType,
15497         NullType,
15498         NullType,
15499         NullType,
15500         NullType,
15501         NullType,
15502         NullType,
15503         NullType,
15504         NullType,
15505         NullType,
15506         NullType,
15507         NullType,
15508         NullType,
15509         NullType,
15510         NullType,
15511         NullType,
15512         NullType,
15513         NullType,
15514         NullType,
15515         NullType,
15516         NullType,
15517         NullType,
15518         NullType,
15519         NullType,
15520         NullType,
15521         NullType,
15522         NullType,
15523         NullType,
15524         NullType,
15525         NullType,
15526         NullType,
15527         NullType,
15528         NullType,
15529         NullType,
15530         NullType,
15531         NullType,
15532         NullType,
15533         NullType,
15534         NullType,
15535         NullType,
15536         NullType,
15537         NullType,
15538         NullType,
15539         NullType,
15540         NullType,
15541         NullType,
15542         NullType,
15543         NullType,
15544         NullType,
15545         NullType,
15546         NullType,
15547         NullType,
15548         NullType,
15549         NullType,
15550         NullType,
15551         NullType,
15552         NullType,
15553         NullType,
15554         NullType,
15555         NullType,
15556         NullType,
15557         NullType,
15558         NullType,
15559         NullType,
15560         NullType,
15561         NullType,
15562         NullType,
15563         NullType,
15564         NullType,
15565         NullType,
15566         NullType,
15567         NullType,
15568         NullType,
15569         NullType,
15570         NullType,
15571         NullType,
15572         NullType,
15573         NullType,
15574         NullType,
15575         NullType,
15576         NullType,
15577         NullType,
15578         NullType,
15579         NullType,
15580         NullType,
15581         NullType,
15582         NullType,
15583         NullType,
15584         NullType,
15585         NullType,
15586         NullType,
15587         NullType> FunctorType;
15588 
15589     FunctorType functor_;
15590 
15591     functionImplementation_(const FunctorType &functor) :
15592         functor_(functor)
15593     {
15594     }
15595         
15596     typedef std::tr1::function<Event (
15597         const EnqueueArgs&,
15598         T0,
15599         T1,
15600         T2,
15601         T3,
15602         T4,
15603         T5,
15604         T6,
15605         T7,
15606         T8,
15607         T9,
15608         T10,
15609         T11,
15610         T12,
15611         T13,
15612         T14,
15613         T15,
15614         T16,
15615         T17,
15616         T18,
15617         T19,
15618         T20,
15619         T21,
15620         T22,
15621         T23,
15622         T24,
15623         T25,
15624         T26,
15625         T27)> type_;
15626 
15627     Event operator()(const EnqueueArgs& enqueueArgs,
15628         T0 arg0,
15629         T1 arg1,
15630         T2 arg2,
15631         T3 arg3,
15632         T4 arg4,
15633         T5 arg5,
15634         T6 arg6,
15635         T7 arg7,
15636         T8 arg8,
15637         T9 arg9,
15638         T10 arg10,
15639         T11 arg11,
15640         T12 arg12,
15641         T13 arg13,
15642         T14 arg14,
15643         T15 arg15,
15644         T16 arg16,
15645         T17 arg17,
15646         T18 arg18,
15647         T19 arg19,
15648         T20 arg20,
15649         T21 arg21,
15650         T22 arg22,
15651         T23 arg23,
15652         T24 arg24,
15653         T25 arg25,
15654         T26 arg26,
15655         T27 arg27)
15656     {
15657         return functor_(
15658             enqueueArgs,
15659             arg0,
15660             arg1,
15661             arg2,
15662             arg3,
15663             arg4,
15664             arg5,
15665             arg6,
15666             arg7,
15667             arg8,
15668             arg9,
15669             arg10,
15670             arg11,
15671             arg12,
15672             arg13,
15673             arg14,
15674             arg15,
15675             arg16,
15676             arg17,
15677             arg18,
15678             arg19,
15679             arg20,
15680             arg21,
15681             arg22,
15682             arg23,
15683             arg24,
15684             arg25,
15685             arg26,
15686             arg27);
15687     }
15688 
15689     operator type_ ()    
15690     {
15691         return type_(*this);
15692     }
15693 
15694 };
15695 
15696 template<
15697     typename T0,
15698     typename T1,
15699     typename T2,
15700     typename T3,
15701     typename T4,
15702     typename T5,
15703     typename T6,
15704     typename T7,
15705     typename T8,
15706     typename T9,
15707     typename T10,
15708     typename T11,
15709     typename T12,
15710     typename T13,
15711     typename T14,
15712     typename T15,
15713     typename T16,
15714     typename T17,
15715     typename T18,
15716     typename T19,
15717     typename T20,
15718     typename T21,
15719     typename T22,
15720     typename T23,
15721     typename T24,
15722     typename T25,
15723     typename T26,
15724     typename T27,
15725     typename T28>
15726 struct functionImplementation_<
15727     T0,
15728     T1,
15729     T2,
15730     T3,
15731     T4,
15732     T5,
15733     T6,
15734     T7,
15735     T8,
15736     T9,
15737     T10,
15738     T11,
15739     T12,
15740     T13,
15741     T14,
15742     T15,
15743     T16,
15744     T17,
15745     T18,
15746     T19,
15747     T20,
15748     T21,
15749     T22,
15750     T23,
15751     T24,
15752     T25,
15753     T26,
15754     T27,
15755     T28,
15756     NullType,
15757     NullType,
15758     NullType,
15759     NullType,
15760     NullType,
15761     NullType,
15762     NullType,
15763     NullType,
15764     NullType,
15765     NullType,
15766     NullType,
15767     NullType,
15768     NullType,
15769     NullType,
15770     NullType,
15771     NullType,
15772     NullType,
15773     NullType,
15774     NullType,
15775     NullType,
15776     NullType,
15777     NullType,
15778     NullType,
15779     NullType,
15780     NullType,
15781     NullType,
15782     NullType,
15783     NullType,
15784     NullType,
15785     NullType,
15786     NullType,
15787     NullType,
15788     NullType,
15789     NullType,
15790     NullType,
15791     NullType,
15792     NullType,
15793     NullType,
15794     NullType,
15795     NullType,
15796     NullType,
15797     NullType,
15798     NullType,
15799     NullType,
15800     NullType,
15801     NullType,
15802     NullType,
15803     NullType,
15804     NullType,
15805     NullType,
15806     NullType,
15807     NullType,
15808     NullType,
15809     NullType,
15810     NullType,
15811     NullType,
15812     NullType,
15813     NullType,
15814     NullType,
15815     NullType,
15816     NullType,
15817     NullType,
15818     NullType,
15819     NullType,
15820     NullType,
15821     NullType,
15822     NullType,
15823     NullType,
15824     NullType,
15825     NullType,
15826     NullType,
15827     NullType,
15828     NullType,
15829     NullType,
15830     NullType,
15831     NullType,
15832     NullType,
15833     NullType,
15834     NullType,
15835     NullType,
15836     NullType,
15837     NullType,
15838     NullType,
15839     NullType,
15840     NullType,
15841     NullType,
15842     NullType,
15843     NullType,
15844     NullType,
15845     NullType,
15846     NullType,
15847     NullType,
15848     NullType,
15849     NullType,
15850     NullType,
15851     NullType,
15852     NullType,
15853     NullType,
15854     NullType>
15855 {
15856     typedef detail::KernelFunctorGlobal<
15857         T0,
15858         T1,
15859         T2,
15860         T3,
15861         T4,
15862         T5,
15863         T6,
15864         T7,
15865         T8,
15866         T9,
15867         T10,
15868         T11,
15869         T12,
15870         T13,
15871         T14,
15872         T15,
15873         T16,
15874         T17,
15875         T18,
15876         T19,
15877         T20,
15878         T21,
15879         T22,
15880         T23,
15881         T24,
15882         T25,
15883         T26,
15884         T27,
15885         T28,
15886         NullType,
15887         NullType,
15888         NullType,
15889         NullType,
15890         NullType,
15891         NullType,
15892         NullType,
15893         NullType,
15894         NullType,
15895         NullType,
15896         NullType,
15897         NullType,
15898         NullType,
15899         NullType,
15900         NullType,
15901         NullType,
15902         NullType,
15903         NullType,
15904         NullType,
15905         NullType,
15906         NullType,
15907         NullType,
15908         NullType,
15909         NullType,
15910         NullType,
15911         NullType,
15912         NullType,
15913         NullType,
15914         NullType,
15915         NullType,
15916         NullType,
15917         NullType,
15918         NullType,
15919         NullType,
15920         NullType,
15921         NullType,
15922         NullType,
15923         NullType,
15924         NullType,
15925         NullType,
15926         NullType,
15927         NullType,
15928         NullType,
15929         NullType,
15930         NullType,
15931         NullType,
15932         NullType,
15933         NullType,
15934         NullType,
15935         NullType,
15936         NullType,
15937         NullType,
15938         NullType,
15939         NullType,
15940         NullType,
15941         NullType,
15942         NullType,
15943         NullType,
15944         NullType,
15945         NullType,
15946         NullType,
15947         NullType,
15948         NullType,
15949         NullType,
15950         NullType,
15951         NullType,
15952         NullType,
15953         NullType,
15954         NullType,
15955         NullType,
15956         NullType,
15957         NullType,
15958         NullType,
15959         NullType,
15960         NullType,
15961         NullType,
15962         NullType,
15963         NullType,
15964         NullType,
15965         NullType,
15966         NullType,
15967         NullType,
15968         NullType,
15969         NullType,
15970         NullType,
15971         NullType,
15972         NullType,
15973         NullType,
15974         NullType,
15975         NullType,
15976         NullType,
15977         NullType,
15978         NullType,
15979         NullType,
15980         NullType,
15981         NullType,
15982         NullType,
15983         NullType,
15984         NullType> FunctorType;
15985 
15986     FunctorType functor_;
15987 
15988     functionImplementation_(const FunctorType &functor) :
15989         functor_(functor)
15990     {
15991     }
15992         
15993     typedef std::tr1::function<Event (
15994         const EnqueueArgs&,
15995         T0,
15996         T1,
15997         T2,
15998         T3,
15999         T4,
16000         T5,
16001         T6,
16002         T7,
16003         T8,
16004         T9,
16005         T10,
16006         T11,
16007         T12,
16008         T13,
16009         T14,
16010         T15,
16011         T16,
16012         T17,
16013         T18,
16014         T19,
16015         T20,
16016         T21,
16017         T22,
16018         T23,
16019         T24,
16020         T25,
16021         T26,
16022         T27,
16023         T28)> type_;
16024 
16025     Event operator()(const EnqueueArgs& enqueueArgs,
16026         T0 arg0,
16027         T1 arg1,
16028         T2 arg2,
16029         T3 arg3,
16030         T4 arg4,
16031         T5 arg5,
16032         T6 arg6,
16033         T7 arg7,
16034         T8 arg8,
16035         T9 arg9,
16036         T10 arg10,
16037         T11 arg11,
16038         T12 arg12,
16039         T13 arg13,
16040         T14 arg14,
16041         T15 arg15,
16042         T16 arg16,
16043         T17 arg17,
16044         T18 arg18,
16045         T19 arg19,
16046         T20 arg20,
16047         T21 arg21,
16048         T22 arg22,
16049         T23 arg23,
16050         T24 arg24,
16051         T25 arg25,
16052         T26 arg26,
16053         T27 arg27,
16054         T28 arg28)
16055     {
16056         return functor_(
16057             enqueueArgs,
16058             arg0,
16059             arg1,
16060             arg2,
16061             arg3,
16062             arg4,
16063             arg5,
16064             arg6,
16065             arg7,
16066             arg8,
16067             arg9,
16068             arg10,
16069             arg11,
16070             arg12,
16071             arg13,
16072             arg14,
16073             arg15,
16074             arg16,
16075             arg17,
16076             arg18,
16077             arg19,
16078             arg20,
16079             arg21,
16080             arg22,
16081             arg23,
16082             arg24,
16083             arg25,
16084             arg26,
16085             arg27,
16086             arg28);
16087     }
16088 
16089     operator type_ ()    
16090     {
16091         return type_(*this);
16092     }
16093 
16094 };
16095 
16096 template<
16097     typename T0,
16098     typename T1,
16099     typename T2,
16100     typename T3,
16101     typename T4,
16102     typename T5,
16103     typename T6,
16104     typename T7,
16105     typename T8,
16106     typename T9,
16107     typename T10,
16108     typename T11,
16109     typename T12,
16110     typename T13,
16111     typename T14,
16112     typename T15,
16113     typename T16,
16114     typename T17,
16115     typename T18,
16116     typename T19,
16117     typename T20,
16118     typename T21,
16119     typename T22,
16120     typename T23,
16121     typename T24,
16122     typename T25,
16123     typename T26,
16124     typename T27,
16125     typename T28,
16126     typename T29>
16127 struct functionImplementation_<
16128     T0,
16129     T1,
16130     T2,
16131     T3,
16132     T4,
16133     T5,
16134     T6,
16135     T7,
16136     T8,
16137     T9,
16138     T10,
16139     T11,
16140     T12,
16141     T13,
16142     T14,
16143     T15,
16144     T16,
16145     T17,
16146     T18,
16147     T19,
16148     T20,
16149     T21,
16150     T22,
16151     T23,
16152     T24,
16153     T25,
16154     T26,
16155     T27,
16156     T28,
16157     T29,
16158     NullType,
16159     NullType,
16160     NullType,
16161     NullType,
16162     NullType,
16163     NullType,
16164     NullType,
16165     NullType,
16166     NullType,
16167     NullType,
16168     NullType,
16169     NullType,
16170     NullType,
16171     NullType,
16172     NullType,
16173     NullType,
16174     NullType,
16175     NullType,
16176     NullType,
16177     NullType,
16178     NullType,
16179     NullType,
16180     NullType,
16181     NullType,
16182     NullType,
16183     NullType,
16184     NullType,
16185     NullType,
16186     NullType,
16187     NullType,
16188     NullType,
16189     NullType,
16190     NullType,
16191     NullType,
16192     NullType,
16193     NullType,
16194     NullType,
16195     NullType,
16196     NullType,
16197     NullType,
16198     NullType,
16199     NullType,
16200     NullType,
16201     NullType,
16202     NullType,
16203     NullType,
16204     NullType,
16205     NullType,
16206     NullType,
16207     NullType,
16208     NullType,
16209     NullType,
16210     NullType,
16211     NullType,
16212     NullType,
16213     NullType,
16214     NullType,
16215     NullType,
16216     NullType,
16217     NullType,
16218     NullType,
16219     NullType,
16220     NullType,
16221     NullType,
16222     NullType,
16223     NullType,
16224     NullType,
16225     NullType,
16226     NullType,
16227     NullType,
16228     NullType,
16229     NullType,
16230     NullType,
16231     NullType,
16232     NullType,
16233     NullType,
16234     NullType,
16235     NullType,
16236     NullType,
16237     NullType,
16238     NullType,
16239     NullType,
16240     NullType,
16241     NullType,
16242     NullType,
16243     NullType,
16244     NullType,
16245     NullType,
16246     NullType,
16247     NullType,
16248     NullType,
16249     NullType,
16250     NullType,
16251     NullType,
16252     NullType,
16253     NullType,
16254     NullType,
16255     NullType>
16256 {
16257     typedef detail::KernelFunctorGlobal<
16258         T0,
16259         T1,
16260         T2,
16261         T3,
16262         T4,
16263         T5,
16264         T6,
16265         T7,
16266         T8,
16267         T9,
16268         T10,
16269         T11,
16270         T12,
16271         T13,
16272         T14,
16273         T15,
16274         T16,
16275         T17,
16276         T18,
16277         T19,
16278         T20,
16279         T21,
16280         T22,
16281         T23,
16282         T24,
16283         T25,
16284         T26,
16285         T27,
16286         T28,
16287         T29,
16288         NullType,
16289         NullType,
16290         NullType,
16291         NullType,
16292         NullType,
16293         NullType,
16294         NullType,
16295         NullType,
16296         NullType,
16297         NullType,
16298         NullType,
16299         NullType,
16300         NullType,
16301         NullType,
16302         NullType,
16303         NullType,
16304         NullType,
16305         NullType,
16306         NullType,
16307         NullType,
16308         NullType,
16309         NullType,
16310         NullType,
16311         NullType,
16312         NullType,
16313         NullType,
16314         NullType,
16315         NullType,
16316         NullType,
16317         NullType,
16318         NullType,
16319         NullType,
16320         NullType,
16321         NullType,
16322         NullType,
16323         NullType,
16324         NullType,
16325         NullType,
16326         NullType,
16327         NullType,
16328         NullType,
16329         NullType,
16330         NullType,
16331         NullType,
16332         NullType,
16333         NullType,
16334         NullType,
16335         NullType,
16336         NullType,
16337         NullType,
16338         NullType,
16339         NullType,
16340         NullType,
16341         NullType,
16342         NullType,
16343         NullType,
16344         NullType,
16345         NullType,
16346         NullType,
16347         NullType,
16348         NullType,
16349         NullType,
16350         NullType,
16351         NullType,
16352         NullType,
16353         NullType,
16354         NullType,
16355         NullType,
16356         NullType,
16357         NullType,
16358         NullType,
16359         NullType,
16360         NullType,
16361         NullType,
16362         NullType,
16363         NullType,
16364         NullType,
16365         NullType,
16366         NullType,
16367         NullType,
16368         NullType,
16369         NullType,
16370         NullType,
16371         NullType,
16372         NullType,
16373         NullType,
16374         NullType,
16375         NullType,
16376         NullType,
16377         NullType,
16378         NullType,
16379         NullType,
16380         NullType,
16381         NullType,
16382         NullType,
16383         NullType,
16384         NullType,
16385         NullType> FunctorType;
16386 
16387     FunctorType functor_;
16388 
16389     functionImplementation_(const FunctorType &functor) :
16390         functor_(functor)
16391     {
16392     }
16393         
16394     typedef std::tr1::function<Event (
16395         const EnqueueArgs&,
16396         T0,
16397         T1,
16398         T2,
16399         T3,
16400         T4,
16401         T5,
16402         T6,
16403         T7,
16404         T8,
16405         T9,
16406         T10,
16407         T11,
16408         T12,
16409         T13,
16410         T14,
16411         T15,
16412         T16,
16413         T17,
16414         T18,
16415         T19,
16416         T20,
16417         T21,
16418         T22,
16419         T23,
16420         T24,
16421         T25,
16422         T26,
16423         T27,
16424         T28,
16425         T29)> type_;
16426 
16427     Event operator()(const EnqueueArgs& enqueueArgs,
16428         T0 arg0,
16429         T1 arg1,
16430         T2 arg2,
16431         T3 arg3,
16432         T4 arg4,
16433         T5 arg5,
16434         T6 arg6,
16435         T7 arg7,
16436         T8 arg8,
16437         T9 arg9,
16438         T10 arg10,
16439         T11 arg11,
16440         T12 arg12,
16441         T13 arg13,
16442         T14 arg14,
16443         T15 arg15,
16444         T16 arg16,
16445         T17 arg17,
16446         T18 arg18,
16447         T19 arg19,
16448         T20 arg20,
16449         T21 arg21,
16450         T22 arg22,
16451         T23 arg23,
16452         T24 arg24,
16453         T25 arg25,
16454         T26 arg26,
16455         T27 arg27,
16456         T28 arg28,
16457         T29 arg29)
16458     {
16459         return functor_(
16460             enqueueArgs,
16461             arg0,
16462             arg1,
16463             arg2,
16464             arg3,
16465             arg4,
16466             arg5,
16467             arg6,
16468             arg7,
16469             arg8,
16470             arg9,
16471             arg10,
16472             arg11,
16473             arg12,
16474             arg13,
16475             arg14,
16476             arg15,
16477             arg16,
16478             arg17,
16479             arg18,
16480             arg19,
16481             arg20,
16482             arg21,
16483             arg22,
16484             arg23,
16485             arg24,
16486             arg25,
16487             arg26,
16488             arg27,
16489             arg28,
16490             arg29);
16491     }
16492 
16493     operator type_ ()    
16494     {
16495         return type_(*this);
16496     }
16497 
16498 };
16499 
16500 template<
16501     typename T0,
16502     typename T1,
16503     typename T2,
16504     typename T3,
16505     typename T4,
16506     typename T5,
16507     typename T6,
16508     typename T7,
16509     typename T8,
16510     typename T9,
16511     typename T10,
16512     typename T11,
16513     typename T12,
16514     typename T13,
16515     typename T14,
16516     typename T15,
16517     typename T16,
16518     typename T17,
16519     typename T18,
16520     typename T19,
16521     typename T20,
16522     typename T21,
16523     typename T22,
16524     typename T23,
16525     typename T24,
16526     typename T25,
16527     typename T26,
16528     typename T27,
16529     typename T28,
16530     typename T29,
16531     typename T30>
16532 struct functionImplementation_<
16533     T0,
16534     T1,
16535     T2,
16536     T3,
16537     T4,
16538     T5,
16539     T6,
16540     T7,
16541     T8,
16542     T9,
16543     T10,
16544     T11,
16545     T12,
16546     T13,
16547     T14,
16548     T15,
16549     T16,
16550     T17,
16551     T18,
16552     T19,
16553     T20,
16554     T21,
16555     T22,
16556     T23,
16557     T24,
16558     T25,
16559     T26,
16560     T27,
16561     T28,
16562     T29,
16563     T30,
16564     NullType,
16565     NullType,
16566     NullType,
16567     NullType,
16568     NullType,
16569     NullType,
16570     NullType,
16571     NullType,
16572     NullType,
16573     NullType,
16574     NullType,
16575     NullType,
16576     NullType,
16577     NullType,
16578     NullType,
16579     NullType,
16580     NullType,
16581     NullType,
16582     NullType,
16583     NullType,
16584     NullType,
16585     NullType,
16586     NullType,
16587     NullType,
16588     NullType,
16589     NullType,
16590     NullType,
16591     NullType,
16592     NullType,
16593     NullType,
16594     NullType,
16595     NullType,
16596     NullType,
16597     NullType,
16598     NullType,
16599     NullType,
16600     NullType,
16601     NullType,
16602     NullType,
16603     NullType,
16604     NullType,
16605     NullType,
16606     NullType,
16607     NullType,
16608     NullType,
16609     NullType,
16610     NullType,
16611     NullType,
16612     NullType,
16613     NullType,
16614     NullType,
16615     NullType,
16616     NullType,
16617     NullType,
16618     NullType,
16619     NullType,
16620     NullType,
16621     NullType,
16622     NullType,
16623     NullType,
16624     NullType,
16625     NullType,
16626     NullType,
16627     NullType,
16628     NullType,
16629     NullType,
16630     NullType,
16631     NullType,
16632     NullType,
16633     NullType,
16634     NullType,
16635     NullType,
16636     NullType,
16637     NullType,
16638     NullType,
16639     NullType,
16640     NullType,
16641     NullType,
16642     NullType,
16643     NullType,
16644     NullType,
16645     NullType,
16646     NullType,
16647     NullType,
16648     NullType,
16649     NullType,
16650     NullType,
16651     NullType,
16652     NullType,
16653     NullType,
16654     NullType,
16655     NullType,
16656     NullType,
16657     NullType,
16658     NullType,
16659     NullType,
16660     NullType>
16661 {
16662     typedef detail::KernelFunctorGlobal<
16663         T0,
16664         T1,
16665         T2,
16666         T3,
16667         T4,
16668         T5,
16669         T6,
16670         T7,
16671         T8,
16672         T9,
16673         T10,
16674         T11,
16675         T12,
16676         T13,
16677         T14,
16678         T15,
16679         T16,
16680         T17,
16681         T18,
16682         T19,
16683         T20,
16684         T21,
16685         T22,
16686         T23,
16687         T24,
16688         T25,
16689         T26,
16690         T27,
16691         T28,
16692         T29,
16693         T30,
16694         NullType,
16695         NullType,
16696         NullType,
16697         NullType,
16698         NullType,
16699         NullType,
16700         NullType,
16701         NullType,
16702         NullType,
16703         NullType,
16704         NullType,
16705         NullType,
16706         NullType,
16707         NullType,
16708         NullType,
16709         NullType,
16710         NullType,
16711         NullType,
16712         NullType,
16713         NullType,
16714         NullType,
16715         NullType,
16716         NullType,
16717         NullType,
16718         NullType,
16719         NullType,
16720         NullType,
16721         NullType,
16722         NullType,
16723         NullType,
16724         NullType,
16725         NullType,
16726         NullType,
16727         NullType,
16728         NullType,
16729         NullType,
16730         NullType,
16731         NullType,
16732         NullType,
16733         NullType,
16734         NullType,
16735         NullType,
16736         NullType,
16737         NullType,
16738         NullType,
16739         NullType,
16740         NullType,
16741         NullType,
16742         NullType,
16743         NullType,
16744         NullType,
16745         NullType,
16746         NullType,
16747         NullType,
16748         NullType,
16749         NullType,
16750         NullType,
16751         NullType,
16752         NullType,
16753         NullType,
16754         NullType,
16755         NullType,
16756         NullType,
16757         NullType,
16758         NullType,
16759         NullType,
16760         NullType,
16761         NullType,
16762         NullType,
16763         NullType,
16764         NullType,
16765         NullType,
16766         NullType,
16767         NullType,
16768         NullType,
16769         NullType,
16770         NullType,
16771         NullType,
16772         NullType,
16773         NullType,
16774         NullType,
16775         NullType,
16776         NullType,
16777         NullType,
16778         NullType,
16779         NullType,
16780         NullType,
16781         NullType,
16782         NullType,
16783         NullType,
16784         NullType,
16785         NullType,
16786         NullType,
16787         NullType,
16788         NullType,
16789         NullType,
16790         NullType> FunctorType;
16791 
16792     FunctorType functor_;
16793 
16794     functionImplementation_(const FunctorType &functor) :
16795         functor_(functor)
16796     {
16797     }
16798         
16799     typedef std::tr1::function<Event (
16800         const EnqueueArgs&,
16801         T0,
16802         T1,
16803         T2,
16804         T3,
16805         T4,
16806         T5,
16807         T6,
16808         T7,
16809         T8,
16810         T9,
16811         T10,
16812         T11,
16813         T12,
16814         T13,
16815         T14,
16816         T15,
16817         T16,
16818         T17,
16819         T18,
16820         T19,
16821         T20,
16822         T21,
16823         T22,
16824         T23,
16825         T24,
16826         T25,
16827         T26,
16828         T27,
16829         T28,
16830         T29,
16831         T30)> type_;
16832 
16833     Event operator()(const EnqueueArgs& enqueueArgs,
16834         T0 arg0,
16835         T1 arg1,
16836         T2 arg2,
16837         T3 arg3,
16838         T4 arg4,
16839         T5 arg5,
16840         T6 arg6,
16841         T7 arg7,
16842         T8 arg8,
16843         T9 arg9,
16844         T10 arg10,
16845         T11 arg11,
16846         T12 arg12,
16847         T13 arg13,
16848         T14 arg14,
16849         T15 arg15,
16850         T16 arg16,
16851         T17 arg17,
16852         T18 arg18,
16853         T19 arg19,
16854         T20 arg20,
16855         T21 arg21,
16856         T22 arg22,
16857         T23 arg23,
16858         T24 arg24,
16859         T25 arg25,
16860         T26 arg26,
16861         T27 arg27,
16862         T28 arg28,
16863         T29 arg29,
16864         T30 arg30)
16865     {
16866         return functor_(
16867             enqueueArgs,
16868             arg0,
16869             arg1,
16870             arg2,
16871             arg3,
16872             arg4,
16873             arg5,
16874             arg6,
16875             arg7,
16876             arg8,
16877             arg9,
16878             arg10,
16879             arg11,
16880             arg12,
16881             arg13,
16882             arg14,
16883             arg15,
16884             arg16,
16885             arg17,
16886             arg18,
16887             arg19,
16888             arg20,
16889             arg21,
16890             arg22,
16891             arg23,
16892             arg24,
16893             arg25,
16894             arg26,
16895             arg27,
16896             arg28,
16897             arg29,
16898             arg30);
16899     }
16900 
16901     operator type_ ()    
16902     {
16903         return type_(*this);
16904     }
16905 
16906 };
16907 
16908 template<
16909     typename T0,
16910     typename T1,
16911     typename T2,
16912     typename T3,
16913     typename T4,
16914     typename T5,
16915     typename T6,
16916     typename T7,
16917     typename T8,
16918     typename T9,
16919     typename T10,
16920     typename T11,
16921     typename T12,
16922     typename T13,
16923     typename T14,
16924     typename T15,
16925     typename T16,
16926     typename T17,
16927     typename T18,
16928     typename T19,
16929     typename T20,
16930     typename T21,
16931     typename T22,
16932     typename T23,
16933     typename T24,
16934     typename T25,
16935     typename T26,
16936     typename T27,
16937     typename T28,
16938     typename T29,
16939     typename T30,
16940     typename T31>
16941 struct functionImplementation_<
16942     T0,
16943     T1,
16944     T2,
16945     T3,
16946     T4,
16947     T5,
16948     T6,
16949     T7,
16950     T8,
16951     T9,
16952     T10,
16953     T11,
16954     T12,
16955     T13,
16956     T14,
16957     T15,
16958     T16,
16959     T17,
16960     T18,
16961     T19,
16962     T20,
16963     T21,
16964     T22,
16965     T23,
16966     T24,
16967     T25,
16968     T26,
16969     T27,
16970     T28,
16971     T29,
16972     T30,
16973     T31,
16974     NullType,
16975     NullType,
16976     NullType,
16977     NullType,
16978     NullType,
16979     NullType,
16980     NullType,
16981     NullType,
16982     NullType,
16983     NullType,
16984     NullType,
16985     NullType,
16986     NullType,
16987     NullType,
16988     NullType,
16989     NullType,
16990     NullType,
16991     NullType,
16992     NullType,
16993     NullType,
16994     NullType,
16995     NullType,
16996     NullType,
16997     NullType,
16998     NullType,
16999     NullType,
17000     NullType,
17001     NullType,
17002     NullType,
17003     NullType,
17004     NullType,
17005     NullType,
17006     NullType,
17007     NullType,
17008     NullType,
17009     NullType,
17010     NullType,
17011     NullType,
17012     NullType,
17013     NullType,
17014     NullType,
17015     NullType,
17016     NullType,
17017     NullType,
17018     NullType,
17019     NullType,
17020     NullType,
17021     NullType,
17022     NullType,
17023     NullType,
17024     NullType,
17025     NullType,
17026     NullType,
17027     NullType,
17028     NullType,
17029     NullType,
17030     NullType,
17031     NullType,
17032     NullType,
17033     NullType,
17034     NullType,
17035     NullType,
17036     NullType,
17037     NullType,
17038     NullType,
17039     NullType,
17040     NullType,
17041     NullType,
17042     NullType,
17043     NullType,
17044     NullType,
17045     NullType,
17046     NullType,
17047     NullType,
17048     NullType,
17049     NullType,
17050     NullType,
17051     NullType,
17052     NullType,
17053     NullType,
17054     NullType,
17055     NullType,
17056     NullType,
17057     NullType,
17058     NullType,
17059     NullType,
17060     NullType,
17061     NullType,
17062     NullType,
17063     NullType,
17064     NullType,
17065     NullType,
17066     NullType,
17067     NullType,
17068     NullType,
17069     NullType>
17070 {
17071     typedef detail::KernelFunctorGlobal<
17072         T0,
17073         T1,
17074         T2,
17075         T3,
17076         T4,
17077         T5,
17078         T6,
17079         T7,
17080         T8,
17081         T9,
17082         T10,
17083         T11,
17084         T12,
17085         T13,
17086         T14,
17087         T15,
17088         T16,
17089         T17,
17090         T18,
17091         T19,
17092         T20,
17093         T21,
17094         T22,
17095         T23,
17096         T24,
17097         T25,
17098         T26,
17099         T27,
17100         T28,
17101         T29,
17102         T30,
17103         T31,
17104         NullType,
17105         NullType,
17106         NullType,
17107         NullType,
17108         NullType,
17109         NullType,
17110         NullType,
17111         NullType,
17112         NullType,
17113         NullType,
17114         NullType,
17115         NullType,
17116         NullType,
17117         NullType,
17118         NullType,
17119         NullType,
17120         NullType,
17121         NullType,
17122         NullType,
17123         NullType,
17124         NullType,
17125         NullType,
17126         NullType,
17127         NullType,
17128         NullType,
17129         NullType,
17130         NullType,
17131         NullType,
17132         NullType,
17133         NullType,
17134         NullType,
17135         NullType,
17136         NullType,
17137         NullType,
17138         NullType,
17139         NullType,
17140         NullType,
17141         NullType,
17142         NullType,
17143         NullType,
17144         NullType,
17145         NullType,
17146         NullType,
17147         NullType,
17148         NullType,
17149         NullType,
17150         NullType,
17151         NullType,
17152         NullType,
17153         NullType,
17154         NullType,
17155         NullType,
17156         NullType,
17157         NullType,
17158         NullType,
17159         NullType,
17160         NullType,
17161         NullType,
17162         NullType,
17163         NullType,
17164         NullType,
17165         NullType,
17166         NullType,
17167         NullType,
17168         NullType,
17169         NullType,
17170         NullType,
17171         NullType,
17172         NullType,
17173         NullType,
17174         NullType,
17175         NullType,
17176         NullType,
17177         NullType,
17178         NullType,
17179         NullType,
17180         NullType,
17181         NullType,
17182         NullType,
17183         NullType,
17184         NullType,
17185         NullType,
17186         NullType,
17187         NullType,
17188         NullType,
17189         NullType,
17190         NullType,
17191         NullType,
17192         NullType,
17193         NullType,
17194         NullType,
17195         NullType,
17196         NullType,
17197         NullType,
17198         NullType,
17199         NullType> FunctorType;
17200 
17201     FunctorType functor_;
17202 
17203     functionImplementation_(const FunctorType &functor) :
17204         functor_(functor)
17205     {
17206     }
17207         
17208     typedef std::tr1::function<Event (
17209         const EnqueueArgs&,
17210         T0,
17211         T1,
17212         T2,
17213         T3,
17214         T4,
17215         T5,
17216         T6,
17217         T7,
17218         T8,
17219         T9,
17220         T10,
17221         T11,
17222         T12,
17223         T13,
17224         T14,
17225         T15,
17226         T16,
17227         T17,
17228         T18,
17229         T19,
17230         T20,
17231         T21,
17232         T22,
17233         T23,
17234         T24,
17235         T25,
17236         T26,
17237         T27,
17238         T28,
17239         T29,
17240         T30,
17241         T31)> type_;
17242 
17243     Event operator()(const EnqueueArgs& enqueueArgs,
17244         T0 arg0,
17245         T1 arg1,
17246         T2 arg2,
17247         T3 arg3,
17248         T4 arg4,
17249         T5 arg5,
17250         T6 arg6,
17251         T7 arg7,
17252         T8 arg8,
17253         T9 arg9,
17254         T10 arg10,
17255         T11 arg11,
17256         T12 arg12,
17257         T13 arg13,
17258         T14 arg14,
17259         T15 arg15,
17260         T16 arg16,
17261         T17 arg17,
17262         T18 arg18,
17263         T19 arg19,
17264         T20 arg20,
17265         T21 arg21,
17266         T22 arg22,
17267         T23 arg23,
17268         T24 arg24,
17269         T25 arg25,
17270         T26 arg26,
17271         T27 arg27,
17272         T28 arg28,
17273         T29 arg29,
17274         T30 arg30,
17275         T31 arg31)
17276     {
17277         return functor_(
17278             enqueueArgs,
17279             arg0,
17280             arg1,
17281             arg2,
17282             arg3,
17283             arg4,
17284             arg5,
17285             arg6,
17286             arg7,
17287             arg8,
17288             arg9,
17289             arg10,
17290             arg11,
17291             arg12,
17292             arg13,
17293             arg14,
17294             arg15,
17295             arg16,
17296             arg17,
17297             arg18,
17298             arg19,
17299             arg20,
17300             arg21,
17301             arg22,
17302             arg23,
17303             arg24,
17304             arg25,
17305             arg26,
17306             arg27,
17307             arg28,
17308             arg29,
17309             arg30,
17310             arg31);
17311     }
17312 
17313     operator type_ ()    
17314     {
17315         return type_(*this);
17316     }
17317 
17318 };
17319 
17320 template<
17321     typename T0,
17322     typename T1,
17323     typename T2,
17324     typename T3,
17325     typename T4,
17326     typename T5,
17327     typename T6,
17328     typename T7,
17329     typename T8,
17330     typename T9,
17331     typename T10,
17332     typename T11,
17333     typename T12,
17334     typename T13,
17335     typename T14,
17336     typename T15,
17337     typename T16,
17338     typename T17,
17339     typename T18,
17340     typename T19,
17341     typename T20,
17342     typename T21,
17343     typename T22,
17344     typename T23,
17345     typename T24,
17346     typename T25,
17347     typename T26,
17348     typename T27,
17349     typename T28,
17350     typename T29,
17351     typename T30,
17352     typename T31,
17353     typename T32>
17354 struct functionImplementation_<
17355     T0,
17356     T1,
17357     T2,
17358     T3,
17359     T4,
17360     T5,
17361     T6,
17362     T7,
17363     T8,
17364     T9,
17365     T10,
17366     T11,
17367     T12,
17368     T13,
17369     T14,
17370     T15,
17371     T16,
17372     T17,
17373     T18,
17374     T19,
17375     T20,
17376     T21,
17377     T22,
17378     T23,
17379     T24,
17380     T25,
17381     T26,
17382     T27,
17383     T28,
17384     T29,
17385     T30,
17386     T31,
17387     T32,
17388     NullType,
17389     NullType,
17390     NullType,
17391     NullType,
17392     NullType,
17393     NullType,
17394     NullType,
17395     NullType,
17396     NullType,
17397     NullType,
17398     NullType,
17399     NullType,
17400     NullType,
17401     NullType,
17402     NullType,
17403     NullType,
17404     NullType,
17405     NullType,
17406     NullType,
17407     NullType,
17408     NullType,
17409     NullType,
17410     NullType,
17411     NullType,
17412     NullType,
17413     NullType,
17414     NullType,
17415     NullType,
17416     NullType,
17417     NullType,
17418     NullType,
17419     NullType,
17420     NullType,
17421     NullType,
17422     NullType,
17423     NullType,
17424     NullType,
17425     NullType,
17426     NullType,
17427     NullType,
17428     NullType,
17429     NullType,
17430     NullType,
17431     NullType,
17432     NullType,
17433     NullType,
17434     NullType,
17435     NullType,
17436     NullType,
17437     NullType,
17438     NullType,
17439     NullType,
17440     NullType,
17441     NullType,
17442     NullType,
17443     NullType,
17444     NullType,
17445     NullType,
17446     NullType,
17447     NullType,
17448     NullType,
17449     NullType,
17450     NullType,
17451     NullType,
17452     NullType,
17453     NullType,
17454     NullType,
17455     NullType,
17456     NullType,
17457     NullType,
17458     NullType,
17459     NullType,
17460     NullType,
17461     NullType,
17462     NullType,
17463     NullType,
17464     NullType,
17465     NullType,
17466     NullType,
17467     NullType,
17468     NullType,
17469     NullType,
17470     NullType,
17471     NullType,
17472     NullType,
17473     NullType,
17474     NullType,
17475     NullType,
17476     NullType,
17477     NullType,
17478     NullType,
17479     NullType,
17480     NullType,
17481     NullType,
17482     NullType>
17483 {
17484     typedef detail::KernelFunctorGlobal<
17485         T0,
17486         T1,
17487         T2,
17488         T3,
17489         T4,
17490         T5,
17491         T6,
17492         T7,
17493         T8,
17494         T9,
17495         T10,
17496         T11,
17497         T12,
17498         T13,
17499         T14,
17500         T15,
17501         T16,
17502         T17,
17503         T18,
17504         T19,
17505         T20,
17506         T21,
17507         T22,
17508         T23,
17509         T24,
17510         T25,
17511         T26,
17512         T27,
17513         T28,
17514         T29,
17515         T30,
17516         T31,
17517         T32,
17518         NullType,
17519         NullType,
17520         NullType,
17521         NullType,
17522         NullType,
17523         NullType,
17524         NullType,
17525         NullType,
17526         NullType,
17527         NullType,
17528         NullType,
17529         NullType,
17530         NullType,
17531         NullType,
17532         NullType,
17533         NullType,
17534         NullType,
17535         NullType,
17536         NullType,
17537         NullType,
17538         NullType,
17539         NullType,
17540         NullType,
17541         NullType,
17542         NullType,
17543         NullType,
17544         NullType,
17545         NullType,
17546         NullType,
17547         NullType,
17548         NullType,
17549         NullType,
17550         NullType,
17551         NullType,
17552         NullType,
17553         NullType,
17554         NullType,
17555         NullType,
17556         NullType,
17557         NullType,
17558         NullType,
17559         NullType,
17560         NullType,
17561         NullType,
17562         NullType,
17563         NullType,
17564         NullType,
17565         NullType,
17566         NullType,
17567         NullType,
17568         NullType,
17569         NullType,
17570         NullType,
17571         NullType,
17572         NullType,
17573         NullType,
17574         NullType,
17575         NullType,
17576         NullType,
17577         NullType,
17578         NullType,
17579         NullType,
17580         NullType,
17581         NullType,
17582         NullType,
17583         NullType,
17584         NullType,
17585         NullType,
17586         NullType,
17587         NullType,
17588         NullType,
17589         NullType,
17590         NullType,
17591         NullType,
17592         NullType,
17593         NullType,
17594         NullType,
17595         NullType,
17596         NullType,
17597         NullType,
17598         NullType,
17599         NullType,
17600         NullType,
17601         NullType,
17602         NullType,
17603         NullType,
17604         NullType,
17605         NullType,
17606         NullType,
17607         NullType,
17608         NullType,
17609         NullType,
17610         NullType,
17611         NullType,
17612         NullType> FunctorType;
17613 
17614     FunctorType functor_;
17615 
17616     functionImplementation_(const FunctorType &functor) :
17617         functor_(functor)
17618     {
17619     }
17620         
17621     typedef std::tr1::function<Event (
17622         const EnqueueArgs&,
17623         T0,
17624         T1,
17625         T2,
17626         T3,
17627         T4,
17628         T5,
17629         T6,
17630         T7,
17631         T8,
17632         T9,
17633         T10,
17634         T11,
17635         T12,
17636         T13,
17637         T14,
17638         T15,
17639         T16,
17640         T17,
17641         T18,
17642         T19,
17643         T20,
17644         T21,
17645         T22,
17646         T23,
17647         T24,
17648         T25,
17649         T26,
17650         T27,
17651         T28,
17652         T29,
17653         T30,
17654         T31,
17655         T32)> type_;
17656 
17657     Event operator()(const EnqueueArgs& enqueueArgs,
17658         T0 arg0,
17659         T1 arg1,
17660         T2 arg2,
17661         T3 arg3,
17662         T4 arg4,
17663         T5 arg5,
17664         T6 arg6,
17665         T7 arg7,
17666         T8 arg8,
17667         T9 arg9,
17668         T10 arg10,
17669         T11 arg11,
17670         T12 arg12,
17671         T13 arg13,
17672         T14 arg14,
17673         T15 arg15,
17674         T16 arg16,
17675         T17 arg17,
17676         T18 arg18,
17677         T19 arg19,
17678         T20 arg20,
17679         T21 arg21,
17680         T22 arg22,
17681         T23 arg23,
17682         T24 arg24,
17683         T25 arg25,
17684         T26 arg26,
17685         T27 arg27,
17686         T28 arg28,
17687         T29 arg29,
17688         T30 arg30,
17689         T31 arg31,
17690         T32 arg32)
17691     {
17692         return functor_(
17693             enqueueArgs,
17694             arg0,
17695             arg1,
17696             arg2,
17697             arg3,
17698             arg4,
17699             arg5,
17700             arg6,
17701             arg7,
17702             arg8,
17703             arg9,
17704             arg10,
17705             arg11,
17706             arg12,
17707             arg13,
17708             arg14,
17709             arg15,
17710             arg16,
17711             arg17,
17712             arg18,
17713             arg19,
17714             arg20,
17715             arg21,
17716             arg22,
17717             arg23,
17718             arg24,
17719             arg25,
17720             arg26,
17721             arg27,
17722             arg28,
17723             arg29,
17724             arg30,
17725             arg31,
17726             arg32);
17727     }
17728 
17729     operator type_ ()    
17730     {
17731         return type_(*this);
17732     }
17733 
17734 };
17735 
17736 template<
17737     typename T0,
17738     typename T1,
17739     typename T2,
17740     typename T3,
17741     typename T4,
17742     typename T5,
17743     typename T6,
17744     typename T7,
17745     typename T8,
17746     typename T9,
17747     typename T10,
17748     typename T11,
17749     typename T12,
17750     typename T13,
17751     typename T14,
17752     typename T15,
17753     typename T16,
17754     typename T17,
17755     typename T18,
17756     typename T19,
17757     typename T20,
17758     typename T21,
17759     typename T22,
17760     typename T23,
17761     typename T24,
17762     typename T25,
17763     typename T26,
17764     typename T27,
17765     typename T28,
17766     typename T29,
17767     typename T30,
17768     typename T31,
17769     typename T32,
17770     typename T33>
17771 struct functionImplementation_<
17772     T0,
17773     T1,
17774     T2,
17775     T3,
17776     T4,
17777     T5,
17778     T6,
17779     T7,
17780     T8,
17781     T9,
17782     T10,
17783     T11,
17784     T12,
17785     T13,
17786     T14,
17787     T15,
17788     T16,
17789     T17,
17790     T18,
17791     T19,
17792     T20,
17793     T21,
17794     T22,
17795     T23,
17796     T24,
17797     T25,
17798     T26,
17799     T27,
17800     T28,
17801     T29,
17802     T30,
17803     T31,
17804     T32,
17805     T33,
17806     NullType,
17807     NullType,
17808     NullType,
17809     NullType,
17810     NullType,
17811     NullType,
17812     NullType,
17813     NullType,
17814     NullType,
17815     NullType,
17816     NullType,
17817     NullType,
17818     NullType,
17819     NullType,
17820     NullType,
17821     NullType,
17822     NullType,
17823     NullType,
17824     NullType,
17825     NullType,
17826     NullType,
17827     NullType,
17828     NullType,
17829     NullType,
17830     NullType,
17831     NullType,
17832     NullType,
17833     NullType,
17834     NullType,
17835     NullType,
17836     NullType,
17837     NullType,
17838     NullType,
17839     NullType,
17840     NullType,
17841     NullType,
17842     NullType,
17843     NullType,
17844     NullType,
17845     NullType,
17846     NullType,
17847     NullType,
17848     NullType,
17849     NullType,
17850     NullType,
17851     NullType,
17852     NullType,
17853     NullType,
17854     NullType,
17855     NullType,
17856     NullType,
17857     NullType,
17858     NullType,
17859     NullType,
17860     NullType,
17861     NullType,
17862     NullType,
17863     NullType,
17864     NullType,
17865     NullType,
17866     NullType,
17867     NullType,
17868     NullType,
17869     NullType,
17870     NullType,
17871     NullType,
17872     NullType,
17873     NullType,
17874     NullType,
17875     NullType,
17876     NullType,
17877     NullType,
17878     NullType,
17879     NullType,
17880     NullType,
17881     NullType,
17882     NullType,
17883     NullType,
17884     NullType,
17885     NullType,
17886     NullType,
17887     NullType,
17888     NullType,
17889     NullType,
17890     NullType,
17891     NullType,
17892     NullType,
17893     NullType,
17894     NullType,
17895     NullType,
17896     NullType,
17897     NullType,
17898     NullType,
17899     NullType>
17900 {
17901     typedef detail::KernelFunctorGlobal<
17902         T0,
17903         T1,
17904         T2,
17905         T3,
17906         T4,
17907         T5,
17908         T6,
17909         T7,
17910         T8,
17911         T9,
17912         T10,
17913         T11,
17914         T12,
17915         T13,
17916         T14,
17917         T15,
17918         T16,
17919         T17,
17920         T18,
17921         T19,
17922         T20,
17923         T21,
17924         T22,
17925         T23,
17926         T24,
17927         T25,
17928         T26,
17929         T27,
17930         T28,
17931         T29,
17932         T30,
17933         T31,
17934         T32,
17935         T33,
17936         NullType,
17937         NullType,
17938         NullType,
17939         NullType,
17940         NullType,
17941         NullType,
17942         NullType,
17943         NullType,
17944         NullType,
17945         NullType,
17946         NullType,
17947         NullType,
17948         NullType,
17949         NullType,
17950         NullType,
17951         NullType,
17952         NullType,
17953         NullType,
17954         NullType,
17955         NullType,
17956         NullType,
17957         NullType,
17958         NullType,
17959         NullType,
17960         NullType,
17961         NullType,
17962         NullType,
17963         NullType,
17964         NullType,
17965         NullType,
17966         NullType,
17967         NullType,
17968         NullType,
17969         NullType,
17970         NullType,
17971         NullType,
17972         NullType,
17973         NullType,
17974         NullType,
17975         NullType,
17976         NullType,
17977         NullType,
17978         NullType,
17979         NullType,
17980         NullType,
17981         NullType,
17982         NullType,
17983         NullType,
17984         NullType,
17985         NullType,
17986         NullType,
17987         NullType,
17988         NullType,
17989         NullType,
17990         NullType,
17991         NullType,
17992         NullType,
17993         NullType,
17994         NullType,
17995         NullType,
17996         NullType,
17997         NullType,
17998         NullType,
17999         NullType,
18000         NullType,
18001         NullType,
18002         NullType,
18003         NullType,
18004         NullType,
18005         NullType,
18006         NullType,
18007         NullType,
18008         NullType,
18009         NullType,
18010         NullType,
18011         NullType,
18012         NullType,
18013         NullType,
18014         NullType,
18015         NullType,
18016         NullType,
18017         NullType,
18018         NullType,
18019         NullType,
18020         NullType,
18021         NullType,
18022         NullType,
18023         NullType,
18024         NullType,
18025         NullType,
18026         NullType,
18027         NullType,
18028         NullType,
18029         NullType> FunctorType;
18030 
18031     FunctorType functor_;
18032 
18033     functionImplementation_(const FunctorType &functor) :
18034         functor_(functor)
18035     {
18036     }
18037         
18038     typedef std::tr1::function<Event (
18039         const EnqueueArgs&,
18040         T0,
18041         T1,
18042         T2,
18043         T3,
18044         T4,
18045         T5,
18046         T6,
18047         T7,
18048         T8,
18049         T9,
18050         T10,
18051         T11,
18052         T12,
18053         T13,
18054         T14,
18055         T15,
18056         T16,
18057         T17,
18058         T18,
18059         T19,
18060         T20,
18061         T21,
18062         T22,
18063         T23,
18064         T24,
18065         T25,
18066         T26,
18067         T27,
18068         T28,
18069         T29,
18070         T30,
18071         T31,
18072         T32,
18073         T33)> type_;
18074 
18075     Event operator()(const EnqueueArgs& enqueueArgs,
18076         T0 arg0,
18077         T1 arg1,
18078         T2 arg2,
18079         T3 arg3,
18080         T4 arg4,
18081         T5 arg5,
18082         T6 arg6,
18083         T7 arg7,
18084         T8 arg8,
18085         T9 arg9,
18086         T10 arg10,
18087         T11 arg11,
18088         T12 arg12,
18089         T13 arg13,
18090         T14 arg14,
18091         T15 arg15,
18092         T16 arg16,
18093         T17 arg17,
18094         T18 arg18,
18095         T19 arg19,
18096         T20 arg20,
18097         T21 arg21,
18098         T22 arg22,
18099         T23 arg23,
18100         T24 arg24,
18101         T25 arg25,
18102         T26 arg26,
18103         T27 arg27,
18104         T28 arg28,
18105         T29 arg29,
18106         T30 arg30,
18107         T31 arg31,
18108         T32 arg32,
18109         T33 arg33)
18110     {
18111         return functor_(
18112             enqueueArgs,
18113             arg0,
18114             arg1,
18115             arg2,
18116             arg3,
18117             arg4,
18118             arg5,
18119             arg6,
18120             arg7,
18121             arg8,
18122             arg9,
18123             arg10,
18124             arg11,
18125             arg12,
18126             arg13,
18127             arg14,
18128             arg15,
18129             arg16,
18130             arg17,
18131             arg18,
18132             arg19,
18133             arg20,
18134             arg21,
18135             arg22,
18136             arg23,
18137             arg24,
18138             arg25,
18139             arg26,
18140             arg27,
18141             arg28,
18142             arg29,
18143             arg30,
18144             arg31,
18145             arg32,
18146             arg33);
18147     }
18148 
18149     operator type_ ()    
18150     {
18151         return type_(*this);
18152     }
18153 
18154 };
18155 
18156 template<
18157     typename T0,
18158     typename T1,
18159     typename T2,
18160     typename T3,
18161     typename T4,
18162     typename T5,
18163     typename T6,
18164     typename T7,
18165     typename T8,
18166     typename T9,
18167     typename T10,
18168     typename T11,
18169     typename T12,
18170     typename T13,
18171     typename T14,
18172     typename T15,
18173     typename T16,
18174     typename T17,
18175     typename T18,
18176     typename T19,
18177     typename T20,
18178     typename T21,
18179     typename T22,
18180     typename T23,
18181     typename T24,
18182     typename T25,
18183     typename T26,
18184     typename T27,
18185     typename T28,
18186     typename T29,
18187     typename T30,
18188     typename T31,
18189     typename T32,
18190     typename T33,
18191     typename T34>
18192 struct functionImplementation_<
18193     T0,
18194     T1,
18195     T2,
18196     T3,
18197     T4,
18198     T5,
18199     T6,
18200     T7,
18201     T8,
18202     T9,
18203     T10,
18204     T11,
18205     T12,
18206     T13,
18207     T14,
18208     T15,
18209     T16,
18210     T17,
18211     T18,
18212     T19,
18213     T20,
18214     T21,
18215     T22,
18216     T23,
18217     T24,
18218     T25,
18219     T26,
18220     T27,
18221     T28,
18222     T29,
18223     T30,
18224     T31,
18225     T32,
18226     T33,
18227     T34,
18228     NullType,
18229     NullType,
18230     NullType,
18231     NullType,
18232     NullType,
18233     NullType,
18234     NullType,
18235     NullType,
18236     NullType,
18237     NullType,
18238     NullType,
18239     NullType,
18240     NullType,
18241     NullType,
18242     NullType,
18243     NullType,
18244     NullType,
18245     NullType,
18246     NullType,
18247     NullType,
18248     NullType,
18249     NullType,
18250     NullType,
18251     NullType,
18252     NullType,
18253     NullType,
18254     NullType,
18255     NullType,
18256     NullType,
18257     NullType,
18258     NullType,
18259     NullType,
18260     NullType,
18261     NullType,
18262     NullType,
18263     NullType,
18264     NullType,
18265     NullType,
18266     NullType,
18267     NullType,
18268     NullType,
18269     NullType,
18270     NullType,
18271     NullType,
18272     NullType,
18273     NullType,
18274     NullType,
18275     NullType,
18276     NullType,
18277     NullType,
18278     NullType,
18279     NullType,
18280     NullType,
18281     NullType,
18282     NullType,
18283     NullType,
18284     NullType,
18285     NullType,
18286     NullType,
18287     NullType,
18288     NullType,
18289     NullType,
18290     NullType,
18291     NullType,
18292     NullType,
18293     NullType,
18294     NullType,
18295     NullType,
18296     NullType,
18297     NullType,
18298     NullType,
18299     NullType,
18300     NullType,
18301     NullType,
18302     NullType,
18303     NullType,
18304     NullType,
18305     NullType,
18306     NullType,
18307     NullType,
18308     NullType,
18309     NullType,
18310     NullType,
18311     NullType,
18312     NullType,
18313     NullType,
18314     NullType,
18315     NullType,
18316     NullType,
18317     NullType,
18318     NullType,
18319     NullType,
18320     NullType>
18321 {
18322     typedef detail::KernelFunctorGlobal<
18323         T0,
18324         T1,
18325         T2,
18326         T3,
18327         T4,
18328         T5,
18329         T6,
18330         T7,
18331         T8,
18332         T9,
18333         T10,
18334         T11,
18335         T12,
18336         T13,
18337         T14,
18338         T15,
18339         T16,
18340         T17,
18341         T18,
18342         T19,
18343         T20,
18344         T21,
18345         T22,
18346         T23,
18347         T24,
18348         T25,
18349         T26,
18350         T27,
18351         T28,
18352         T29,
18353         T30,
18354         T31,
18355         T32,
18356         T33,
18357         T34,
18358         NullType,
18359         NullType,
18360         NullType,
18361         NullType,
18362         NullType,
18363         NullType,
18364         NullType,
18365         NullType,
18366         NullType,
18367         NullType,
18368         NullType,
18369         NullType,
18370         NullType,
18371         NullType,
18372         NullType,
18373         NullType,
18374         NullType,
18375         NullType,
18376         NullType,
18377         NullType,
18378         NullType,
18379         NullType,
18380         NullType,
18381         NullType,
18382         NullType,
18383         NullType,
18384         NullType,
18385         NullType,
18386         NullType,
18387         NullType,
18388         NullType,
18389         NullType,
18390         NullType,
18391         NullType,
18392         NullType,
18393         NullType,
18394         NullType,
18395         NullType,
18396         NullType,
18397         NullType,
18398         NullType,
18399         NullType,
18400         NullType,
18401         NullType,
18402         NullType,
18403         NullType,
18404         NullType,
18405         NullType,
18406         NullType,
18407         NullType,
18408         NullType,
18409         NullType,
18410         NullType,
18411         NullType,
18412         NullType,
18413         NullType,
18414         NullType,
18415         NullType,
18416         NullType,
18417         NullType,
18418         NullType,
18419         NullType,
18420         NullType,
18421         NullType,
18422         NullType,
18423         NullType,
18424         NullType,
18425         NullType,
18426         NullType,
18427         NullType,
18428         NullType,
18429         NullType,
18430         NullType,
18431         NullType,
18432         NullType,
18433         NullType,
18434         NullType,
18435         NullType,
18436         NullType,
18437         NullType,
18438         NullType,
18439         NullType,
18440         NullType,
18441         NullType,
18442         NullType,
18443         NullType,
18444         NullType,
18445         NullType,
18446         NullType,
18447         NullType,
18448         NullType,
18449         NullType,
18450         NullType> FunctorType;
18451 
18452     FunctorType functor_;
18453 
18454     functionImplementation_(const FunctorType &functor) :
18455         functor_(functor)
18456     {
18457     }
18458         
18459     typedef std::tr1::function<Event (
18460         const EnqueueArgs&,
18461         T0,
18462         T1,
18463         T2,
18464         T3,
18465         T4,
18466         T5,
18467         T6,
18468         T7,
18469         T8,
18470         T9,
18471         T10,
18472         T11,
18473         T12,
18474         T13,
18475         T14,
18476         T15,
18477         T16,
18478         T17,
18479         T18,
18480         T19,
18481         T20,
18482         T21,
18483         T22,
18484         T23,
18485         T24,
18486         T25,
18487         T26,
18488         T27,
18489         T28,
18490         T29,
18491         T30,
18492         T31,
18493         T32,
18494         T33,
18495         T34)> type_;
18496 
18497     Event operator()(const EnqueueArgs& enqueueArgs,
18498         T0 arg0,
18499         T1 arg1,
18500         T2 arg2,
18501         T3 arg3,
18502         T4 arg4,
18503         T5 arg5,
18504         T6 arg6,
18505         T7 arg7,
18506         T8 arg8,
18507         T9 arg9,
18508         T10 arg10,
18509         T11 arg11,
18510         T12 arg12,
18511         T13 arg13,
18512         T14 arg14,
18513         T15 arg15,
18514         T16 arg16,
18515         T17 arg17,
18516         T18 arg18,
18517         T19 arg19,
18518         T20 arg20,
18519         T21 arg21,
18520         T22 arg22,
18521         T23 arg23,
18522         T24 arg24,
18523         T25 arg25,
18524         T26 arg26,
18525         T27 arg27,
18526         T28 arg28,
18527         T29 arg29,
18528         T30 arg30,
18529         T31 arg31,
18530         T32 arg32,
18531         T33 arg33,
18532         T34 arg34)
18533     {
18534         return functor_(
18535             enqueueArgs,
18536             arg0,
18537             arg1,
18538             arg2,
18539             arg3,
18540             arg4,
18541             arg5,
18542             arg6,
18543             arg7,
18544             arg8,
18545             arg9,
18546             arg10,
18547             arg11,
18548             arg12,
18549             arg13,
18550             arg14,
18551             arg15,
18552             arg16,
18553             arg17,
18554             arg18,
18555             arg19,
18556             arg20,
18557             arg21,
18558             arg22,
18559             arg23,
18560             arg24,
18561             arg25,
18562             arg26,
18563             arg27,
18564             arg28,
18565             arg29,
18566             arg30,
18567             arg31,
18568             arg32,
18569             arg33,
18570             arg34);
18571     }
18572 
18573     operator type_ ()    
18574     {
18575         return type_(*this);
18576     }
18577 
18578 };
18579 
18580 template<
18581     typename T0,
18582     typename T1,
18583     typename T2,
18584     typename T3,
18585     typename T4,
18586     typename T5,
18587     typename T6,
18588     typename T7,
18589     typename T8,
18590     typename T9,
18591     typename T10,
18592     typename T11,
18593     typename T12,
18594     typename T13,
18595     typename T14,
18596     typename T15,
18597     typename T16,
18598     typename T17,
18599     typename T18,
18600     typename T19,
18601     typename T20,
18602     typename T21,
18603     typename T22,
18604     typename T23,
18605     typename T24,
18606     typename T25,
18607     typename T26,
18608     typename T27,
18609     typename T28,
18610     typename T29,
18611     typename T30,
18612     typename T31,
18613     typename T32,
18614     typename T33,
18615     typename T34,
18616     typename T35>
18617 struct functionImplementation_<
18618     T0,
18619     T1,
18620     T2,
18621     T3,
18622     T4,
18623     T5,
18624     T6,
18625     T7,
18626     T8,
18627     T9,
18628     T10,
18629     T11,
18630     T12,
18631     T13,
18632     T14,
18633     T15,
18634     T16,
18635     T17,
18636     T18,
18637     T19,
18638     T20,
18639     T21,
18640     T22,
18641     T23,
18642     T24,
18643     T25,
18644     T26,
18645     T27,
18646     T28,
18647     T29,
18648     T30,
18649     T31,
18650     T32,
18651     T33,
18652     T34,
18653     T35,
18654     NullType,
18655     NullType,
18656     NullType,
18657     NullType,
18658     NullType,
18659     NullType,
18660     NullType,
18661     NullType,
18662     NullType,
18663     NullType,
18664     NullType,
18665     NullType,
18666     NullType,
18667     NullType,
18668     NullType,
18669     NullType,
18670     NullType,
18671     NullType,
18672     NullType,
18673     NullType,
18674     NullType,
18675     NullType,
18676     NullType,
18677     NullType,
18678     NullType,
18679     NullType,
18680     NullType,
18681     NullType,
18682     NullType,
18683     NullType,
18684     NullType,
18685     NullType,
18686     NullType,
18687     NullType,
18688     NullType,
18689     NullType,
18690     NullType,
18691     NullType,
18692     NullType,
18693     NullType,
18694     NullType,
18695     NullType,
18696     NullType,
18697     NullType,
18698     NullType,
18699     NullType,
18700     NullType,
18701     NullType,
18702     NullType,
18703     NullType,
18704     NullType,
18705     NullType,
18706     NullType,
18707     NullType,
18708     NullType,
18709     NullType,
18710     NullType,
18711     NullType,
18712     NullType,
18713     NullType,
18714     NullType,
18715     NullType,
18716     NullType,
18717     NullType,
18718     NullType,
18719     NullType,
18720     NullType,
18721     NullType,
18722     NullType,
18723     NullType,
18724     NullType,
18725     NullType,
18726     NullType,
18727     NullType,
18728     NullType,
18729     NullType,
18730     NullType,
18731     NullType,
18732     NullType,
18733     NullType,
18734     NullType,
18735     NullType,
18736     NullType,
18737     NullType,
18738     NullType,
18739     NullType,
18740     NullType,
18741     NullType,
18742     NullType,
18743     NullType,
18744     NullType,
18745     NullType>
18746 {
18747     typedef detail::KernelFunctorGlobal<
18748         T0,
18749         T1,
18750         T2,
18751         T3,
18752         T4,
18753         T5,
18754         T6,
18755         T7,
18756         T8,
18757         T9,
18758         T10,
18759         T11,
18760         T12,
18761         T13,
18762         T14,
18763         T15,
18764         T16,
18765         T17,
18766         T18,
18767         T19,
18768         T20,
18769         T21,
18770         T22,
18771         T23,
18772         T24,
18773         T25,
18774         T26,
18775         T27,
18776         T28,
18777         T29,
18778         T30,
18779         T31,
18780         T32,
18781         T33,
18782         T34,
18783         T35,
18784         NullType,
18785         NullType,
18786         NullType,
18787         NullType,
18788         NullType,
18789         NullType,
18790         NullType,
18791         NullType,
18792         NullType,
18793         NullType,
18794         NullType,
18795         NullType,
18796         NullType,
18797         NullType,
18798         NullType,
18799         NullType,
18800         NullType,
18801         NullType,
18802         NullType,
18803         NullType,
18804         NullType,
18805         NullType,
18806         NullType,
18807         NullType,
18808         NullType,
18809         NullType,
18810         NullType,
18811         NullType,
18812         NullType,
18813         NullType,
18814         NullType,
18815         NullType,
18816         NullType,
18817         NullType,
18818         NullType,
18819         NullType,
18820         NullType,
18821         NullType,
18822         NullType,
18823         NullType,
18824         NullType,
18825         NullType,
18826         NullType,
18827         NullType,
18828         NullType,
18829         NullType,
18830         NullType,
18831         NullType,
18832         NullType,
18833         NullType,
18834         NullType,
18835         NullType,
18836         NullType,
18837         NullType,
18838         NullType,
18839         NullType,
18840         NullType,
18841         NullType,
18842         NullType,
18843         NullType,
18844         NullType,
18845         NullType,
18846         NullType,
18847         NullType,
18848         NullType,
18849         NullType,
18850         NullType,
18851         NullType,
18852         NullType,
18853         NullType,
18854         NullType,
18855         NullType,
18856         NullType,
18857         NullType,
18858         NullType,
18859         NullType,
18860         NullType,
18861         NullType,
18862         NullType,
18863         NullType,
18864         NullType,
18865         NullType,
18866         NullType,
18867         NullType,
18868         NullType,
18869         NullType,
18870         NullType,
18871         NullType,
18872         NullType,
18873         NullType,
18874         NullType,
18875         NullType> FunctorType;
18876 
18877     FunctorType functor_;
18878 
18879     functionImplementation_(const FunctorType &functor) :
18880         functor_(functor)
18881     {
18882     }
18883         
18884     typedef std::tr1::function<Event (
18885         const EnqueueArgs&,
18886         T0,
18887         T1,
18888         T2,
18889         T3,
18890         T4,
18891         T5,
18892         T6,
18893         T7,
18894         T8,
18895         T9,
18896         T10,
18897         T11,
18898         T12,
18899         T13,
18900         T14,
18901         T15,
18902         T16,
18903         T17,
18904         T18,
18905         T19,
18906         T20,
18907         T21,
18908         T22,
18909         T23,
18910         T24,
18911         T25,
18912         T26,
18913         T27,
18914         T28,
18915         T29,
18916         T30,
18917         T31,
18918         T32,
18919         T33,
18920         T34,
18921         T35)> type_;
18922 
18923     Event operator()(const EnqueueArgs& enqueueArgs,
18924         T0 arg0,
18925         T1 arg1,
18926         T2 arg2,
18927         T3 arg3,
18928         T4 arg4,
18929         T5 arg5,
18930         T6 arg6,
18931         T7 arg7,
18932         T8 arg8,
18933         T9 arg9,
18934         T10 arg10,
18935         T11 arg11,
18936         T12 arg12,
18937         T13 arg13,
18938         T14 arg14,
18939         T15 arg15,
18940         T16 arg16,
18941         T17 arg17,
18942         T18 arg18,
18943         T19 arg19,
18944         T20 arg20,
18945         T21 arg21,
18946         T22 arg22,
18947         T23 arg23,
18948         T24 arg24,
18949         T25 arg25,
18950         T26 arg26,
18951         T27 arg27,
18952         T28 arg28,
18953         T29 arg29,
18954         T30 arg30,
18955         T31 arg31,
18956         T32 arg32,
18957         T33 arg33,
18958         T34 arg34,
18959         T35 arg35)
18960     {
18961         return functor_(
18962             enqueueArgs,
18963             arg0,
18964             arg1,
18965             arg2,
18966             arg3,
18967             arg4,
18968             arg5,
18969             arg6,
18970             arg7,
18971             arg8,
18972             arg9,
18973             arg10,
18974             arg11,
18975             arg12,
18976             arg13,
18977             arg14,
18978             arg15,
18979             arg16,
18980             arg17,
18981             arg18,
18982             arg19,
18983             arg20,
18984             arg21,
18985             arg22,
18986             arg23,
18987             arg24,
18988             arg25,
18989             arg26,
18990             arg27,
18991             arg28,
18992             arg29,
18993             arg30,
18994             arg31,
18995             arg32,
18996             arg33,
18997             arg34,
18998             arg35);
18999     }
19000 
19001     operator type_ ()    
19002     {
19003         return type_(*this);
19004     }
19005 
19006 };
19007 
19008 template<
19009     typename T0,
19010     typename T1,
19011     typename T2,
19012     typename T3,
19013     typename T4,
19014     typename T5,
19015     typename T6,
19016     typename T7,
19017     typename T8,
19018     typename T9,
19019     typename T10,
19020     typename T11,
19021     typename T12,
19022     typename T13,
19023     typename T14,
19024     typename T15,
19025     typename T16,
19026     typename T17,
19027     typename T18,
19028     typename T19,
19029     typename T20,
19030     typename T21,
19031     typename T22,
19032     typename T23,
19033     typename T24,
19034     typename T25,
19035     typename T26,
19036     typename T27,
19037     typename T28,
19038     typename T29,
19039     typename T30,
19040     typename T31,
19041     typename T32,
19042     typename T33,
19043     typename T34,
19044     typename T35,
19045     typename T36>
19046 struct functionImplementation_<
19047     T0,
19048     T1,
19049     T2,
19050     T3,
19051     T4,
19052     T5,
19053     T6,
19054     T7,
19055     T8,
19056     T9,
19057     T10,
19058     T11,
19059     T12,
19060     T13,
19061     T14,
19062     T15,
19063     T16,
19064     T17,
19065     T18,
19066     T19,
19067     T20,
19068     T21,
19069     T22,
19070     T23,
19071     T24,
19072     T25,
19073     T26,
19074     T27,
19075     T28,
19076     T29,
19077     T30,
19078     T31,
19079     T32,
19080     T33,
19081     T34,
19082     T35,
19083     T36,
19084     NullType,
19085     NullType,
19086     NullType,
19087     NullType,
19088     NullType,
19089     NullType,
19090     NullType,
19091     NullType,
19092     NullType,
19093     NullType,
19094     NullType,
19095     NullType,
19096     NullType,
19097     NullType,
19098     NullType,
19099     NullType,
19100     NullType,
19101     NullType,
19102     NullType,
19103     NullType,
19104     NullType,
19105     NullType,
19106     NullType,
19107     NullType,
19108     NullType,
19109     NullType,
19110     NullType,
19111     NullType,
19112     NullType,
19113     NullType,
19114     NullType,
19115     NullType,
19116     NullType,
19117     NullType,
19118     NullType,
19119     NullType,
19120     NullType,
19121     NullType,
19122     NullType,
19123     NullType,
19124     NullType,
19125     NullType,
19126     NullType,
19127     NullType,
19128     NullType,
19129     NullType,
19130     NullType,
19131     NullType,
19132     NullType,
19133     NullType,
19134     NullType,
19135     NullType,
19136     NullType,
19137     NullType,
19138     NullType,
19139     NullType,
19140     NullType,
19141     NullType,
19142     NullType,
19143     NullType,
19144     NullType,
19145     NullType,
19146     NullType,
19147     NullType,
19148     NullType,
19149     NullType,
19150     NullType,
19151     NullType,
19152     NullType,
19153     NullType,
19154     NullType,
19155     NullType,
19156     NullType,
19157     NullType,
19158     NullType,
19159     NullType,
19160     NullType,
19161     NullType,
19162     NullType,
19163     NullType,
19164     NullType,
19165     NullType,
19166     NullType,
19167     NullType,
19168     NullType,
19169     NullType,
19170     NullType,
19171     NullType,
19172     NullType,
19173     NullType,
19174     NullType>
19175 {
19176     typedef detail::KernelFunctorGlobal<
19177         T0,
19178         T1,
19179         T2,
19180         T3,
19181         T4,
19182         T5,
19183         T6,
19184         T7,
19185         T8,
19186         T9,
19187         T10,
19188         T11,
19189         T12,
19190         T13,
19191         T14,
19192         T15,
19193         T16,
19194         T17,
19195         T18,
19196         T19,
19197         T20,
19198         T21,
19199         T22,
19200         T23,
19201         T24,
19202         T25,
19203         T26,
19204         T27,
19205         T28,
19206         T29,
19207         T30,
19208         T31,
19209         T32,
19210         T33,
19211         T34,
19212         T35,
19213         T36,
19214         NullType,
19215         NullType,
19216         NullType,
19217         NullType,
19218         NullType,
19219         NullType,
19220         NullType,
19221         NullType,
19222         NullType,
19223         NullType,
19224         NullType,
19225         NullType,
19226         NullType,
19227         NullType,
19228         NullType,
19229         NullType,
19230         NullType,
19231         NullType,
19232         NullType,
19233         NullType,
19234         NullType,
19235         NullType,
19236         NullType,
19237         NullType,
19238         NullType,
19239         NullType,
19240         NullType,
19241         NullType,
19242         NullType,
19243         NullType,
19244         NullType,
19245         NullType,
19246         NullType,
19247         NullType,
19248         NullType,
19249         NullType,
19250         NullType,
19251         NullType,
19252         NullType,
19253         NullType,
19254         NullType,
19255         NullType,
19256         NullType,
19257         NullType,
19258         NullType,
19259         NullType,
19260         NullType,
19261         NullType,
19262         NullType,
19263         NullType,
19264         NullType,
19265         NullType,
19266         NullType,
19267         NullType,
19268         NullType,
19269         NullType,
19270         NullType,
19271         NullType,
19272         NullType,
19273         NullType,
19274         NullType,
19275         NullType,
19276         NullType,
19277         NullType,
19278         NullType,
19279         NullType,
19280         NullType,
19281         NullType,
19282         NullType,
19283         NullType,
19284         NullType,
19285         NullType,
19286         NullType,
19287         NullType,
19288         NullType,
19289         NullType,
19290         NullType,
19291         NullType,
19292         NullType,
19293         NullType,
19294         NullType,
19295         NullType,
19296         NullType,
19297         NullType,
19298         NullType,
19299         NullType,
19300         NullType,
19301         NullType,
19302         NullType,
19303         NullType,
19304         NullType> FunctorType;
19305 
19306     FunctorType functor_;
19307 
19308     functionImplementation_(const FunctorType &functor) :
19309         functor_(functor)
19310     {
19311     }
19312         
19313     typedef std::tr1::function<Event (
19314         const EnqueueArgs&,
19315         T0,
19316         T1,
19317         T2,
19318         T3,
19319         T4,
19320         T5,
19321         T6,
19322         T7,
19323         T8,
19324         T9,
19325         T10,
19326         T11,
19327         T12,
19328         T13,
19329         T14,
19330         T15,
19331         T16,
19332         T17,
19333         T18,
19334         T19,
19335         T20,
19336         T21,
19337         T22,
19338         T23,
19339         T24,
19340         T25,
19341         T26,
19342         T27,
19343         T28,
19344         T29,
19345         T30,
19346         T31,
19347         T32,
19348         T33,
19349         T34,
19350         T35,
19351         T36)> type_;
19352 
19353     Event operator()(const EnqueueArgs& enqueueArgs,
19354         T0 arg0,
19355         T1 arg1,
19356         T2 arg2,
19357         T3 arg3,
19358         T4 arg4,
19359         T5 arg5,
19360         T6 arg6,
19361         T7 arg7,
19362         T8 arg8,
19363         T9 arg9,
19364         T10 arg10,
19365         T11 arg11,
19366         T12 arg12,
19367         T13 arg13,
19368         T14 arg14,
19369         T15 arg15,
19370         T16 arg16,
19371         T17 arg17,
19372         T18 arg18,
19373         T19 arg19,
19374         T20 arg20,
19375         T21 arg21,
19376         T22 arg22,
19377         T23 arg23,
19378         T24 arg24,
19379         T25 arg25,
19380         T26 arg26,
19381         T27 arg27,
19382         T28 arg28,
19383         T29 arg29,
19384         T30 arg30,
19385         T31 arg31,
19386         T32 arg32,
19387         T33 arg33,
19388         T34 arg34,
19389         T35 arg35,
19390         T36 arg36)
19391     {
19392         return functor_(
19393             enqueueArgs,
19394             arg0,
19395             arg1,
19396             arg2,
19397             arg3,
19398             arg4,
19399             arg5,
19400             arg6,
19401             arg7,
19402             arg8,
19403             arg9,
19404             arg10,
19405             arg11,
19406             arg12,
19407             arg13,
19408             arg14,
19409             arg15,
19410             arg16,
19411             arg17,
19412             arg18,
19413             arg19,
19414             arg20,
19415             arg21,
19416             arg22,
19417             arg23,
19418             arg24,
19419             arg25,
19420             arg26,
19421             arg27,
19422             arg28,
19423             arg29,
19424             arg30,
19425             arg31,
19426             arg32,
19427             arg33,
19428             arg34,
19429             arg35,
19430             arg36);
19431     }
19432 
19433     operator type_ ()    
19434     {
19435         return type_(*this);
19436     }
19437 
19438 };
19439 
19440 template<
19441     typename T0,
19442     typename T1,
19443     typename T2,
19444     typename T3,
19445     typename T4,
19446     typename T5,
19447     typename T6,
19448     typename T7,
19449     typename T8,
19450     typename T9,
19451     typename T10,
19452     typename T11,
19453     typename T12,
19454     typename T13,
19455     typename T14,
19456     typename T15,
19457     typename T16,
19458     typename T17,
19459     typename T18,
19460     typename T19,
19461     typename T20,
19462     typename T21,
19463     typename T22,
19464     typename T23,
19465     typename T24,
19466     typename T25,
19467     typename T26,
19468     typename T27,
19469     typename T28,
19470     typename T29,
19471     typename T30,
19472     typename T31,
19473     typename T32,
19474     typename T33,
19475     typename T34,
19476     typename T35,
19477     typename T36,
19478     typename T37>
19479 struct functionImplementation_<
19480     T0,
19481     T1,
19482     T2,
19483     T3,
19484     T4,
19485     T5,
19486     T6,
19487     T7,
19488     T8,
19489     T9,
19490     T10,
19491     T11,
19492     T12,
19493     T13,
19494     T14,
19495     T15,
19496     T16,
19497     T17,
19498     T18,
19499     T19,
19500     T20,
19501     T21,
19502     T22,
19503     T23,
19504     T24,
19505     T25,
19506     T26,
19507     T27,
19508     T28,
19509     T29,
19510     T30,
19511     T31,
19512     T32,
19513     T33,
19514     T34,
19515     T35,
19516     T36,
19517     T37,
19518     NullType,
19519     NullType,
19520     NullType,
19521     NullType,
19522     NullType,
19523     NullType,
19524     NullType,
19525     NullType,
19526     NullType,
19527     NullType,
19528     NullType,
19529     NullType,
19530     NullType,
19531     NullType,
19532     NullType,
19533     NullType,
19534     NullType,
19535     NullType,
19536     NullType,
19537     NullType,
19538     NullType,
19539     NullType,
19540     NullType,
19541     NullType,
19542     NullType,
19543     NullType,
19544     NullType,
19545     NullType,
19546     NullType,
19547     NullType,
19548     NullType,
19549     NullType,
19550     NullType,
19551     NullType,
19552     NullType,
19553     NullType,
19554     NullType,
19555     NullType,
19556     NullType,
19557     NullType,
19558     NullType,
19559     NullType,
19560     NullType,
19561     NullType,
19562     NullType,
19563     NullType,
19564     NullType,
19565     NullType,
19566     NullType,
19567     NullType,
19568     NullType,
19569     NullType,
19570     NullType,
19571     NullType,
19572     NullType,
19573     NullType,
19574     NullType,
19575     NullType,
19576     NullType,
19577     NullType,
19578     NullType,
19579     NullType,
19580     NullType,
19581     NullType,
19582     NullType,
19583     NullType,
19584     NullType,
19585     NullType,
19586     NullType,
19587     NullType,
19588     NullType,
19589     NullType,
19590     NullType,
19591     NullType,
19592     NullType,
19593     NullType,
19594     NullType,
19595     NullType,
19596     NullType,
19597     NullType,
19598     NullType,
19599     NullType,
19600     NullType,
19601     NullType,
19602     NullType,
19603     NullType,
19604     NullType,
19605     NullType,
19606     NullType,
19607     NullType>
19608 {
19609     typedef detail::KernelFunctorGlobal<
19610         T0,
19611         T1,
19612         T2,
19613         T3,
19614         T4,
19615         T5,
19616         T6,
19617         T7,
19618         T8,
19619         T9,
19620         T10,
19621         T11,
19622         T12,
19623         T13,
19624         T14,
19625         T15,
19626         T16,
19627         T17,
19628         T18,
19629         T19,
19630         T20,
19631         T21,
19632         T22,
19633         T23,
19634         T24,
19635         T25,
19636         T26,
19637         T27,
19638         T28,
19639         T29,
19640         T30,
19641         T31,
19642         T32,
19643         T33,
19644         T34,
19645         T35,
19646         T36,
19647         T37,
19648         NullType,
19649         NullType,
19650         NullType,
19651         NullType,
19652         NullType,
19653         NullType,
19654         NullType,
19655         NullType,
19656         NullType,
19657         NullType,
19658         NullType,
19659         NullType,
19660         NullType,
19661         NullType,
19662         NullType,
19663         NullType,
19664         NullType,
19665         NullType,
19666         NullType,
19667         NullType,
19668         NullType,
19669         NullType,
19670         NullType,
19671         NullType,
19672         NullType,
19673         NullType,
19674         NullType,
19675         NullType,
19676         NullType,
19677         NullType,
19678         NullType,
19679         NullType,
19680         NullType,
19681         NullType,
19682         NullType,
19683         NullType,
19684         NullType,
19685         NullType,
19686         NullType,
19687         NullType,
19688         NullType,
19689         NullType,
19690         NullType,
19691         NullType,
19692         NullType,
19693         NullType,
19694         NullType,
19695         NullType,
19696         NullType,
19697         NullType,
19698         NullType,
19699         NullType,
19700         NullType,
19701         NullType,
19702         NullType,
19703         NullType,
19704         NullType,
19705         NullType,
19706         NullType,
19707         NullType,
19708         NullType,
19709         NullType,
19710         NullType,
19711         NullType,
19712         NullType,
19713         NullType,
19714         NullType,
19715         NullType,
19716         NullType,
19717         NullType,
19718         NullType,
19719         NullType,
19720         NullType,
19721         NullType,
19722         NullType,
19723         NullType,
19724         NullType,
19725         NullType,
19726         NullType,
19727         NullType,
19728         NullType,
19729         NullType,
19730         NullType,
19731         NullType,
19732         NullType,
19733         NullType,
19734         NullType,
19735         NullType,
19736         NullType,
19737         NullType> FunctorType;
19738 
19739     FunctorType functor_;
19740 
19741     functionImplementation_(const FunctorType &functor) :
19742         functor_(functor)
19743     {
19744     }
19745         
19746     typedef std::tr1::function<Event (
19747         const EnqueueArgs&,
19748         T0,
19749         T1,
19750         T2,
19751         T3,
19752         T4,
19753         T5,
19754         T6,
19755         T7,
19756         T8,
19757         T9,
19758         T10,
19759         T11,
19760         T12,
19761         T13,
19762         T14,
19763         T15,
19764         T16,
19765         T17,
19766         T18,
19767         T19,
19768         T20,
19769         T21,
19770         T22,
19771         T23,
19772         T24,
19773         T25,
19774         T26,
19775         T27,
19776         T28,
19777         T29,
19778         T30,
19779         T31,
19780         T32,
19781         T33,
19782         T34,
19783         T35,
19784         T36,
19785         T37)> type_;
19786 
19787     Event operator()(const EnqueueArgs& enqueueArgs,
19788         T0 arg0,
19789         T1 arg1,
19790         T2 arg2,
19791         T3 arg3,
19792         T4 arg4,
19793         T5 arg5,
19794         T6 arg6,
19795         T7 arg7,
19796         T8 arg8,
19797         T9 arg9,
19798         T10 arg10,
19799         T11 arg11,
19800         T12 arg12,
19801         T13 arg13,
19802         T14 arg14,
19803         T15 arg15,
19804         T16 arg16,
19805         T17 arg17,
19806         T18 arg18,
19807         T19 arg19,
19808         T20 arg20,
19809         T21 arg21,
19810         T22 arg22,
19811         T23 arg23,
19812         T24 arg24,
19813         T25 arg25,
19814         T26 arg26,
19815         T27 arg27,
19816         T28 arg28,
19817         T29 arg29,
19818         T30 arg30,
19819         T31 arg31,
19820         T32 arg32,
19821         T33 arg33,
19822         T34 arg34,
19823         T35 arg35,
19824         T36 arg36,
19825         T37 arg37)
19826     {
19827         return functor_(
19828             enqueueArgs,
19829             arg0,
19830             arg1,
19831             arg2,
19832             arg3,
19833             arg4,
19834             arg5,
19835             arg6,
19836             arg7,
19837             arg8,
19838             arg9,
19839             arg10,
19840             arg11,
19841             arg12,
19842             arg13,
19843             arg14,
19844             arg15,
19845             arg16,
19846             arg17,
19847             arg18,
19848             arg19,
19849             arg20,
19850             arg21,
19851             arg22,
19852             arg23,
19853             arg24,
19854             arg25,
19855             arg26,
19856             arg27,
19857             arg28,
19858             arg29,
19859             arg30,
19860             arg31,
19861             arg32,
19862             arg33,
19863             arg34,
19864             arg35,
19865             arg36,
19866             arg37);
19867     }
19868 
19869     operator type_ ()    
19870     {
19871         return type_(*this);
19872     }
19873 
19874 };
19875 
19876 template<
19877     typename T0,
19878     typename T1,
19879     typename T2,
19880     typename T3,
19881     typename T4,
19882     typename T5,
19883     typename T6,
19884     typename T7,
19885     typename T8,
19886     typename T9,
19887     typename T10,
19888     typename T11,
19889     typename T12,
19890     typename T13,
19891     typename T14,
19892     typename T15,
19893     typename T16,
19894     typename T17,
19895     typename T18,
19896     typename T19,
19897     typename T20,
19898     typename T21,
19899     typename T22,
19900     typename T23,
19901     typename T24,
19902     typename T25,
19903     typename T26,
19904     typename T27,
19905     typename T28,
19906     typename T29,
19907     typename T30,
19908     typename T31,
19909     typename T32,
19910     typename T33,
19911     typename T34,
19912     typename T35,
19913     typename T36,
19914     typename T37,
19915     typename T38>
19916 struct functionImplementation_<
19917     T0,
19918     T1,
19919     T2,
19920     T3,
19921     T4,
19922     T5,
19923     T6,
19924     T7,
19925     T8,
19926     T9,
19927     T10,
19928     T11,
19929     T12,
19930     T13,
19931     T14,
19932     T15,
19933     T16,
19934     T17,
19935     T18,
19936     T19,
19937     T20,
19938     T21,
19939     T22,
19940     T23,
19941     T24,
19942     T25,
19943     T26,
19944     T27,
19945     T28,
19946     T29,
19947     T30,
19948     T31,
19949     T32,
19950     T33,
19951     T34,
19952     T35,
19953     T36,
19954     T37,
19955     T38,
19956     NullType,
19957     NullType,
19958     NullType,
19959     NullType,
19960     NullType,
19961     NullType,
19962     NullType,
19963     NullType,
19964     NullType,
19965     NullType,
19966     NullType,
19967     NullType,
19968     NullType,
19969     NullType,
19970     NullType,
19971     NullType,
19972     NullType,
19973     NullType,
19974     NullType,
19975     NullType,
19976     NullType,
19977     NullType,
19978     NullType,
19979     NullType,
19980     NullType,
19981     NullType,
19982     NullType,
19983     NullType,
19984     NullType,
19985     NullType,
19986     NullType,
19987     NullType,
19988     NullType,
19989     NullType,
19990     NullType,
19991     NullType,
19992     NullType,
19993     NullType,
19994     NullType,
19995     NullType,
19996     NullType,
19997     NullType,
19998     NullType,
19999     NullType,
20000     NullType,
20001     NullType,
20002     NullType,
20003     NullType,
20004     NullType,
20005     NullType,
20006     NullType,
20007     NullType,
20008     NullType,
20009     NullType,
20010     NullType,
20011     NullType,
20012     NullType,
20013     NullType,
20014     NullType,
20015     NullType,
20016     NullType,
20017     NullType,
20018     NullType,
20019     NullType,
20020     NullType,
20021     NullType,
20022     NullType,
20023     NullType,
20024     NullType,
20025     NullType,
20026     NullType,
20027     NullType,
20028     NullType,
20029     NullType,
20030     NullType,
20031     NullType,
20032     NullType,
20033     NullType,
20034     NullType,
20035     NullType,
20036     NullType,
20037     NullType,
20038     NullType,
20039     NullType,
20040     NullType,
20041     NullType,
20042     NullType,
20043     NullType,
20044     NullType>
20045 {
20046     typedef detail::KernelFunctorGlobal<
20047         T0,
20048         T1,
20049         T2,
20050         T3,
20051         T4,
20052         T5,
20053         T6,
20054         T7,
20055         T8,
20056         T9,
20057         T10,
20058         T11,
20059         T12,
20060         T13,
20061         T14,
20062         T15,
20063         T16,
20064         T17,
20065         T18,
20066         T19,
20067         T20,
20068         T21,
20069         T22,
20070         T23,
20071         T24,
20072         T25,
20073         T26,
20074         T27,
20075         T28,
20076         T29,
20077         T30,
20078         T31,
20079         T32,
20080         T33,
20081         T34,
20082         T35,
20083         T36,
20084         T37,
20085         T38,
20086         NullType,
20087         NullType,
20088         NullType,
20089         NullType,
20090         NullType,
20091         NullType,
20092         NullType,
20093         NullType,
20094         NullType,
20095         NullType,
20096         NullType,
20097         NullType,
20098         NullType,
20099         NullType,
20100         NullType,
20101         NullType,
20102         NullType,
20103         NullType,
20104         NullType,
20105         NullType,
20106         NullType,
20107         NullType,
20108         NullType,
20109         NullType,
20110         NullType,
20111         NullType,
20112         NullType,
20113         NullType,
20114         NullType,
20115         NullType,
20116         NullType,
20117         NullType,
20118         NullType,
20119         NullType,
20120         NullType,
20121         NullType,
20122         NullType,
20123         NullType,
20124         NullType,
20125         NullType,
20126         NullType,
20127         NullType,
20128         NullType,
20129         NullType,
20130         NullType,
20131         NullType,
20132         NullType,
20133         NullType,
20134         NullType,
20135         NullType,
20136         NullType,
20137         NullType,
20138         NullType,
20139         NullType,
20140         NullType,
20141         NullType,
20142         NullType,
20143         NullType,
20144         NullType,
20145         NullType,
20146         NullType,
20147         NullType,
20148         NullType,
20149         NullType,
20150         NullType,
20151         NullType,
20152         NullType,
20153         NullType,
20154         NullType,
20155         NullType,
20156         NullType,
20157         NullType,
20158         NullType,
20159         NullType,
20160         NullType,
20161         NullType,
20162         NullType,
20163         NullType,
20164         NullType,
20165         NullType,
20166         NullType,
20167         NullType,
20168         NullType,
20169         NullType,
20170         NullType,
20171         NullType,
20172         NullType,
20173         NullType,
20174         NullType> FunctorType;
20175 
20176     FunctorType functor_;
20177 
20178     functionImplementation_(const FunctorType &functor) :
20179         functor_(functor)
20180     {
20181     }
20182         
20183     typedef std::tr1::function<Event (
20184         const EnqueueArgs&,
20185         T0,
20186         T1,
20187         T2,
20188         T3,
20189         T4,
20190         T5,
20191         T6,
20192         T7,
20193         T8,
20194         T9,
20195         T10,
20196         T11,
20197         T12,
20198         T13,
20199         T14,
20200         T15,
20201         T16,
20202         T17,
20203         T18,
20204         T19,
20205         T20,
20206         T21,
20207         T22,
20208         T23,
20209         T24,
20210         T25,
20211         T26,
20212         T27,
20213         T28,
20214         T29,
20215         T30,
20216         T31,
20217         T32,
20218         T33,
20219         T34,
20220         T35,
20221         T36,
20222         T37,
20223         T38)> type_;
20224 
20225     Event operator()(const EnqueueArgs& enqueueArgs,
20226         T0 arg0,
20227         T1 arg1,
20228         T2 arg2,
20229         T3 arg3,
20230         T4 arg4,
20231         T5 arg5,
20232         T6 arg6,
20233         T7 arg7,
20234         T8 arg8,
20235         T9 arg9,
20236         T10 arg10,
20237         T11 arg11,
20238         T12 arg12,
20239         T13 arg13,
20240         T14 arg14,
20241         T15 arg15,
20242         T16 arg16,
20243         T17 arg17,
20244         T18 arg18,
20245         T19 arg19,
20246         T20 arg20,
20247         T21 arg21,
20248         T22 arg22,
20249         T23 arg23,
20250         T24 arg24,
20251         T25 arg25,
20252         T26 arg26,
20253         T27 arg27,
20254         T28 arg28,
20255         T29 arg29,
20256         T30 arg30,
20257         T31 arg31,
20258         T32 arg32,
20259         T33 arg33,
20260         T34 arg34,
20261         T35 arg35,
20262         T36 arg36,
20263         T37 arg37,
20264         T38 arg38)
20265     {
20266         return functor_(
20267             enqueueArgs,
20268             arg0,
20269             arg1,
20270             arg2,
20271             arg3,
20272             arg4,
20273             arg5,
20274             arg6,
20275             arg7,
20276             arg8,
20277             arg9,
20278             arg10,
20279             arg11,
20280             arg12,
20281             arg13,
20282             arg14,
20283             arg15,
20284             arg16,
20285             arg17,
20286             arg18,
20287             arg19,
20288             arg20,
20289             arg21,
20290             arg22,
20291             arg23,
20292             arg24,
20293             arg25,
20294             arg26,
20295             arg27,
20296             arg28,
20297             arg29,
20298             arg30,
20299             arg31,
20300             arg32,
20301             arg33,
20302             arg34,
20303             arg35,
20304             arg36,
20305             arg37,
20306             arg38);
20307     }
20308 
20309     operator type_ ()    
20310     {
20311         return type_(*this);
20312     }
20313 
20314 };
20315 
20316 template<
20317     typename T0,
20318     typename T1,
20319     typename T2,
20320     typename T3,
20321     typename T4,
20322     typename T5,
20323     typename T6,
20324     typename T7,
20325     typename T8,
20326     typename T9,
20327     typename T10,
20328     typename T11,
20329     typename T12,
20330     typename T13,
20331     typename T14,
20332     typename T15,
20333     typename T16,
20334     typename T17,
20335     typename T18,
20336     typename T19,
20337     typename T20,
20338     typename T21,
20339     typename T22,
20340     typename T23,
20341     typename T24,
20342     typename T25,
20343     typename T26,
20344     typename T27,
20345     typename T28,
20346     typename T29,
20347     typename T30,
20348     typename T31,
20349     typename T32,
20350     typename T33,
20351     typename T34,
20352     typename T35,
20353     typename T36,
20354     typename T37,
20355     typename T38,
20356     typename T39>
20357 struct functionImplementation_<
20358     T0,
20359     T1,
20360     T2,
20361     T3,
20362     T4,
20363     T5,
20364     T6,
20365     T7,
20366     T8,
20367     T9,
20368     T10,
20369     T11,
20370     T12,
20371     T13,
20372     T14,
20373     T15,
20374     T16,
20375     T17,
20376     T18,
20377     T19,
20378     T20,
20379     T21,
20380     T22,
20381     T23,
20382     T24,
20383     T25,
20384     T26,
20385     T27,
20386     T28,
20387     T29,
20388     T30,
20389     T31,
20390     T32,
20391     T33,
20392     T34,
20393     T35,
20394     T36,
20395     T37,
20396     T38,
20397     T39,
20398     NullType,
20399     NullType,
20400     NullType,
20401     NullType,
20402     NullType,
20403     NullType,
20404     NullType,
20405     NullType,
20406     NullType,
20407     NullType,
20408     NullType,
20409     NullType,
20410     NullType,
20411     NullType,
20412     NullType,
20413     NullType,
20414     NullType,
20415     NullType,
20416     NullType,
20417     NullType,
20418     NullType,
20419     NullType,
20420     NullType,
20421     NullType,
20422     NullType,
20423     NullType,
20424     NullType,
20425     NullType,
20426     NullType,
20427     NullType,
20428     NullType,
20429     NullType,
20430     NullType,
20431     NullType,
20432     NullType,
20433     NullType,
20434     NullType,
20435     NullType,
20436     NullType,
20437     NullType,
20438     NullType,
20439     NullType,
20440     NullType,
20441     NullType,
20442     NullType,
20443     NullType,
20444     NullType,
20445     NullType,
20446     NullType,
20447     NullType,
20448     NullType,
20449     NullType,
20450     NullType,
20451     NullType,
20452     NullType,
20453     NullType,
20454     NullType,
20455     NullType,
20456     NullType,
20457     NullType,
20458     NullType,
20459     NullType,
20460     NullType,
20461     NullType,
20462     NullType,
20463     NullType,
20464     NullType,
20465     NullType,
20466     NullType,
20467     NullType,
20468     NullType,
20469     NullType,
20470     NullType,
20471     NullType,
20472     NullType,
20473     NullType,
20474     NullType,
20475     NullType,
20476     NullType,
20477     NullType,
20478     NullType,
20479     NullType,
20480     NullType,
20481     NullType,
20482     NullType,
20483     NullType,
20484     NullType,
20485     NullType>
20486 {
20487     typedef detail::KernelFunctorGlobal<
20488         T0,
20489         T1,
20490         T2,
20491         T3,
20492         T4,
20493         T5,
20494         T6,
20495         T7,
20496         T8,
20497         T9,
20498         T10,
20499         T11,
20500         T12,
20501         T13,
20502         T14,
20503         T15,
20504         T16,
20505         T17,
20506         T18,
20507         T19,
20508         T20,
20509         T21,
20510         T22,
20511         T23,
20512         T24,
20513         T25,
20514         T26,
20515         T27,
20516         T28,
20517         T29,
20518         T30,
20519         T31,
20520         T32,
20521         T33,
20522         T34,
20523         T35,
20524         T36,
20525         T37,
20526         T38,
20527         T39,
20528         NullType,
20529         NullType,
20530         NullType,
20531         NullType,
20532         NullType,
20533         NullType,
20534         NullType,
20535         NullType,
20536         NullType,
20537         NullType,
20538         NullType,
20539         NullType,
20540         NullType,
20541         NullType,
20542         NullType,
20543         NullType,
20544         NullType,
20545         NullType,
20546         NullType,
20547         NullType,
20548         NullType,
20549         NullType,
20550         NullType,
20551         NullType,
20552         NullType,
20553         NullType,
20554         NullType,
20555         NullType,
20556         NullType,
20557         NullType,
20558         NullType,
20559         NullType,
20560         NullType,
20561         NullType,
20562         NullType,
20563         NullType,
20564         NullType,
20565         NullType,
20566         NullType,
20567         NullType,
20568         NullType,
20569         NullType,
20570         NullType,
20571         NullType,
20572         NullType,
20573         NullType,
20574         NullType,
20575         NullType,
20576         NullType,
20577         NullType,
20578         NullType,
20579         NullType,
20580         NullType,
20581         NullType,
20582         NullType,
20583         NullType,
20584         NullType,
20585         NullType,
20586         NullType,
20587         NullType,
20588         NullType,
20589         NullType,
20590         NullType,
20591         NullType,
20592         NullType,
20593         NullType,
20594         NullType,
20595         NullType,
20596         NullType,
20597         NullType,
20598         NullType,
20599         NullType,
20600         NullType,
20601         NullType,
20602         NullType,
20603         NullType,
20604         NullType,
20605         NullType,
20606         NullType,
20607         NullType,
20608         NullType,
20609         NullType,
20610         NullType,
20611         NullType,
20612         NullType,
20613         NullType,
20614         NullType,
20615         NullType> FunctorType;
20616 
20617     FunctorType functor_;
20618 
20619     functionImplementation_(const FunctorType &functor) :
20620         functor_(functor)
20621     {
20622     }
20623         
20624     typedef std::tr1::function<Event (
20625         const EnqueueArgs&,
20626         T0,
20627         T1,
20628         T2,
20629         T3,
20630         T4,
20631         T5,
20632         T6,
20633         T7,
20634         T8,
20635         T9,
20636         T10,
20637         T11,
20638         T12,
20639         T13,
20640         T14,
20641         T15,
20642         T16,
20643         T17,
20644         T18,
20645         T19,
20646         T20,
20647         T21,
20648         T22,
20649         T23,
20650         T24,
20651         T25,
20652         T26,
20653         T27,
20654         T28,
20655         T29,
20656         T30,
20657         T31,
20658         T32,
20659         T33,
20660         T34,
20661         T35,
20662         T36,
20663         T37,
20664         T38,
20665         T39)> type_;
20666 
20667     Event operator()(const EnqueueArgs& enqueueArgs,
20668         T0 arg0,
20669         T1 arg1,
20670         T2 arg2,
20671         T3 arg3,
20672         T4 arg4,
20673         T5 arg5,
20674         T6 arg6,
20675         T7 arg7,
20676         T8 arg8,
20677         T9 arg9,
20678         T10 arg10,
20679         T11 arg11,
20680         T12 arg12,
20681         T13 arg13,
20682         T14 arg14,
20683         T15 arg15,
20684         T16 arg16,
20685         T17 arg17,
20686         T18 arg18,
20687         T19 arg19,
20688         T20 arg20,
20689         T21 arg21,
20690         T22 arg22,
20691         T23 arg23,
20692         T24 arg24,
20693         T25 arg25,
20694         T26 arg26,
20695         T27 arg27,
20696         T28 arg28,
20697         T29 arg29,
20698         T30 arg30,
20699         T31 arg31,
20700         T32 arg32,
20701         T33 arg33,
20702         T34 arg34,
20703         T35 arg35,
20704         T36 arg36,
20705         T37 arg37,
20706         T38 arg38,
20707         T39 arg39)
20708     {
20709         return functor_(
20710             enqueueArgs,
20711             arg0,
20712             arg1,
20713             arg2,
20714             arg3,
20715             arg4,
20716             arg5,
20717             arg6,
20718             arg7,
20719             arg8,
20720             arg9,
20721             arg10,
20722             arg11,
20723             arg12,
20724             arg13,
20725             arg14,
20726             arg15,
20727             arg16,
20728             arg17,
20729             arg18,
20730             arg19,
20731             arg20,
20732             arg21,
20733             arg22,
20734             arg23,
20735             arg24,
20736             arg25,
20737             arg26,
20738             arg27,
20739             arg28,
20740             arg29,
20741             arg30,
20742             arg31,
20743             arg32,
20744             arg33,
20745             arg34,
20746             arg35,
20747             arg36,
20748             arg37,
20749             arg38,
20750             arg39);
20751     }
20752 
20753     operator type_ ()    
20754     {
20755         return type_(*this);
20756     }
20757 
20758 };
20759 
20760 template<
20761     typename T0,
20762     typename T1,
20763     typename T2,
20764     typename T3,
20765     typename T4,
20766     typename T5,
20767     typename T6,
20768     typename T7,
20769     typename T8,
20770     typename T9,
20771     typename T10,
20772     typename T11,
20773     typename T12,
20774     typename T13,
20775     typename T14,
20776     typename T15,
20777     typename T16,
20778     typename T17,
20779     typename T18,
20780     typename T19,
20781     typename T20,
20782     typename T21,
20783     typename T22,
20784     typename T23,
20785     typename T24,
20786     typename T25,
20787     typename T26,
20788     typename T27,
20789     typename T28,
20790     typename T29,
20791     typename T30,
20792     typename T31,
20793     typename T32,
20794     typename T33,
20795     typename T34,
20796     typename T35,
20797     typename T36,
20798     typename T37,
20799     typename T38,
20800     typename T39,
20801     typename T40>
20802 struct functionImplementation_<
20803     T0,
20804     T1,
20805     T2,
20806     T3,
20807     T4,
20808     T5,
20809     T6,
20810     T7,
20811     T8,
20812     T9,
20813     T10,
20814     T11,
20815     T12,
20816     T13,
20817     T14,
20818     T15,
20819     T16,
20820     T17,
20821     T18,
20822     T19,
20823     T20,
20824     T21,
20825     T22,
20826     T23,
20827     T24,
20828     T25,
20829     T26,
20830     T27,
20831     T28,
20832     T29,
20833     T30,
20834     T31,
20835     T32,
20836     T33,
20837     T34,
20838     T35,
20839     T36,
20840     T37,
20841     T38,
20842     T39,
20843     T40,
20844     NullType,
20845     NullType,
20846     NullType,
20847     NullType,
20848     NullType,
20849     NullType,
20850     NullType,
20851     NullType,
20852     NullType,
20853     NullType,
20854     NullType,
20855     NullType,
20856     NullType,
20857     NullType,
20858     NullType,
20859     NullType,
20860     NullType,
20861     NullType,
20862     NullType,
20863     NullType,
20864     NullType,
20865     NullType,
20866     NullType,
20867     NullType,
20868     NullType,
20869     NullType,
20870     NullType,
20871     NullType,
20872     NullType,
20873     NullType,
20874     NullType,
20875     NullType,
20876     NullType,
20877     NullType,
20878     NullType,
20879     NullType,
20880     NullType,
20881     NullType,
20882     NullType,
20883     NullType,
20884     NullType,
20885     NullType,
20886     NullType,
20887     NullType,
20888     NullType,
20889     NullType,
20890     NullType,
20891     NullType,
20892     NullType,
20893     NullType,
20894     NullType,
20895     NullType,
20896     NullType,
20897     NullType,
20898     NullType,
20899     NullType,
20900     NullType,
20901     NullType,
20902     NullType,
20903     NullType,
20904     NullType,
20905     NullType,
20906     NullType,
20907     NullType,
20908     NullType,
20909     NullType,
20910     NullType,
20911     NullType,
20912     NullType,
20913     NullType,
20914     NullType,
20915     NullType,
20916     NullType,
20917     NullType,
20918     NullType,
20919     NullType,
20920     NullType,
20921     NullType,
20922     NullType,
20923     NullType,
20924     NullType,
20925     NullType,
20926     NullType,
20927     NullType,
20928     NullType,
20929     NullType,
20930     NullType>
20931 {
20932     typedef detail::KernelFunctorGlobal<
20933         T0,
20934         T1,
20935         T2,
20936         T3,
20937         T4,
20938         T5,
20939         T6,
20940         T7,
20941         T8,
20942         T9,
20943         T10,
20944         T11,
20945         T12,
20946         T13,
20947         T14,
20948         T15,
20949         T16,
20950         T17,
20951         T18,
20952         T19,
20953         T20,
20954         T21,
20955         T22,
20956         T23,
20957         T24,
20958         T25,
20959         T26,
20960         T27,
20961         T28,
20962         T29,
20963         T30,
20964         T31,
20965         T32,
20966         T33,
20967         T34,
20968         T35,
20969         T36,
20970         T37,
20971         T38,
20972         T39,
20973         T40,
20974         NullType,
20975         NullType,
20976         NullType,
20977         NullType,
20978         NullType,
20979         NullType,
20980         NullType,
20981         NullType,
20982         NullType,
20983         NullType,
20984         NullType,
20985         NullType,
20986         NullType,
20987         NullType,
20988         NullType,
20989         NullType,
20990         NullType,
20991         NullType,
20992         NullType,
20993         NullType,
20994         NullType,
20995         NullType,
20996         NullType,
20997         NullType,
20998         NullType,
20999         NullType,
21000         NullType,
21001         NullType,
21002         NullType,
21003         NullType,
21004         NullType,
21005         NullType,
21006         NullType,
21007         NullType,
21008         NullType,
21009         NullType,
21010         NullType,
21011         NullType,
21012         NullType,
21013         NullType,
21014         NullType,
21015         NullType,
21016         NullType,
21017         NullType,
21018         NullType,
21019         NullType,
21020         NullType,
21021         NullType,
21022         NullType,
21023         NullType,
21024         NullType,
21025         NullType,
21026         NullType,
21027         NullType,
21028         NullType,
21029         NullType,
21030         NullType,
21031         NullType,
21032         NullType,
21033         NullType,
21034         NullType,
21035         NullType,
21036         NullType,
21037         NullType,
21038         NullType,
21039         NullType,
21040         NullType,
21041         NullType,
21042         NullType,
21043         NullType,
21044         NullType,
21045         NullType,
21046         NullType,
21047         NullType,
21048         NullType,
21049         NullType,
21050         NullType,
21051         NullType,
21052         NullType,
21053         NullType,
21054         NullType,
21055         NullType,
21056         NullType,
21057         NullType,
21058         NullType,
21059         NullType,
21060         NullType> FunctorType;
21061 
21062     FunctorType functor_;
21063 
21064     functionImplementation_(const FunctorType &functor) :
21065         functor_(functor)
21066     {
21067     }
21068         
21069     typedef std::tr1::function<Event (
21070         const EnqueueArgs&,
21071         T0,
21072         T1,
21073         T2,
21074         T3,
21075         T4,
21076         T5,
21077         T6,
21078         T7,
21079         T8,
21080         T9,
21081         T10,
21082         T11,
21083         T12,
21084         T13,
21085         T14,
21086         T15,
21087         T16,
21088         T17,
21089         T18,
21090         T19,
21091         T20,
21092         T21,
21093         T22,
21094         T23,
21095         T24,
21096         T25,
21097         T26,
21098         T27,
21099         T28,
21100         T29,
21101         T30,
21102         T31,
21103         T32,
21104         T33,
21105         T34,
21106         T35,
21107         T36,
21108         T37,
21109         T38,
21110         T39,
21111         T40)> type_;
21112 
21113     Event operator()(const EnqueueArgs& enqueueArgs,
21114         T0 arg0,
21115         T1 arg1,
21116         T2 arg2,
21117         T3 arg3,
21118         T4 arg4,
21119         T5 arg5,
21120         T6 arg6,
21121         T7 arg7,
21122         T8 arg8,
21123         T9 arg9,
21124         T10 arg10,
21125         T11 arg11,
21126         T12 arg12,
21127         T13 arg13,
21128         T14 arg14,
21129         T15 arg15,
21130         T16 arg16,
21131         T17 arg17,
21132         T18 arg18,
21133         T19 arg19,
21134         T20 arg20,
21135         T21 arg21,
21136         T22 arg22,
21137         T23 arg23,
21138         T24 arg24,
21139         T25 arg25,
21140         T26 arg26,
21141         T27 arg27,
21142         T28 arg28,
21143         T29 arg29,
21144         T30 arg30,
21145         T31 arg31,
21146         T32 arg32,
21147         T33 arg33,
21148         T34 arg34,
21149         T35 arg35,
21150         T36 arg36,
21151         T37 arg37,
21152         T38 arg38,
21153         T39 arg39,
21154         T40 arg40)
21155     {
21156         return functor_(
21157             enqueueArgs,
21158             arg0,
21159             arg1,
21160             arg2,
21161             arg3,
21162             arg4,
21163             arg5,
21164             arg6,
21165             arg7,
21166             arg8,
21167             arg9,
21168             arg10,
21169             arg11,
21170             arg12,
21171             arg13,
21172             arg14,
21173             arg15,
21174             arg16,
21175             arg17,
21176             arg18,
21177             arg19,
21178             arg20,
21179             arg21,
21180             arg22,
21181             arg23,
21182             arg24,
21183             arg25,
21184             arg26,
21185             arg27,
21186             arg28,
21187             arg29,
21188             arg30,
21189             arg31,
21190             arg32,
21191             arg33,
21192             arg34,
21193             arg35,
21194             arg36,
21195             arg37,
21196             arg38,
21197             arg39,
21198             arg40);
21199     }
21200 
21201     operator type_ ()    
21202     {
21203         return type_(*this);
21204     }
21205 
21206 };
21207 
21208 template<
21209     typename T0,
21210     typename T1,
21211     typename T2,
21212     typename T3,
21213     typename T4,
21214     typename T5,
21215     typename T6,
21216     typename T7,
21217     typename T8,
21218     typename T9,
21219     typename T10,
21220     typename T11,
21221     typename T12,
21222     typename T13,
21223     typename T14,
21224     typename T15,
21225     typename T16,
21226     typename T17,
21227     typename T18,
21228     typename T19,
21229     typename T20,
21230     typename T21,
21231     typename T22,
21232     typename T23,
21233     typename T24,
21234     typename T25,
21235     typename T26,
21236     typename T27,
21237     typename T28,
21238     typename T29,
21239     typename T30,
21240     typename T31,
21241     typename T32,
21242     typename T33,
21243     typename T34,
21244     typename T35,
21245     typename T36,
21246     typename T37,
21247     typename T38,
21248     typename T39,
21249     typename T40,
21250     typename T41>
21251 struct functionImplementation_<
21252     T0,
21253     T1,
21254     T2,
21255     T3,
21256     T4,
21257     T5,
21258     T6,
21259     T7,
21260     T8,
21261     T9,
21262     T10,
21263     T11,
21264     T12,
21265     T13,
21266     T14,
21267     T15,
21268     T16,
21269     T17,
21270     T18,
21271     T19,
21272     T20,
21273     T21,
21274     T22,
21275     T23,
21276     T24,
21277     T25,
21278     T26,
21279     T27,
21280     T28,
21281     T29,
21282     T30,
21283     T31,
21284     T32,
21285     T33,
21286     T34,
21287     T35,
21288     T36,
21289     T37,
21290     T38,
21291     T39,
21292     T40,
21293     T41,
21294     NullType,
21295     NullType,
21296     NullType,
21297     NullType,
21298     NullType,
21299     NullType,
21300     NullType,
21301     NullType,
21302     NullType,
21303     NullType,
21304     NullType,
21305     NullType,
21306     NullType,
21307     NullType,
21308     NullType,
21309     NullType,
21310     NullType,
21311     NullType,
21312     NullType,
21313     NullType,
21314     NullType,
21315     NullType,
21316     NullType,
21317     NullType,
21318     NullType,
21319     NullType,
21320     NullType,
21321     NullType,
21322     NullType,
21323     NullType,
21324     NullType,
21325     NullType,
21326     NullType,
21327     NullType,
21328     NullType,
21329     NullType,
21330     NullType,
21331     NullType,
21332     NullType,
21333     NullType,
21334     NullType,
21335     NullType,
21336     NullType,
21337     NullType,
21338     NullType,
21339     NullType,
21340     NullType,
21341     NullType,
21342     NullType,
21343     NullType,
21344     NullType,
21345     NullType,
21346     NullType,
21347     NullType,
21348     NullType,
21349     NullType,
21350     NullType,
21351     NullType,
21352     NullType,
21353     NullType,
21354     NullType,
21355     NullType,
21356     NullType,
21357     NullType,
21358     NullType,
21359     NullType,
21360     NullType,
21361     NullType,
21362     NullType,
21363     NullType,
21364     NullType,
21365     NullType,
21366     NullType,
21367     NullType,
21368     NullType,
21369     NullType,
21370     NullType,
21371     NullType,
21372     NullType,
21373     NullType,
21374     NullType,
21375     NullType,
21376     NullType,
21377     NullType,
21378     NullType,
21379     NullType>
21380 {
21381     typedef detail::KernelFunctorGlobal<
21382         T0,
21383         T1,
21384         T2,
21385         T3,
21386         T4,
21387         T5,
21388         T6,
21389         T7,
21390         T8,
21391         T9,
21392         T10,
21393         T11,
21394         T12,
21395         T13,
21396         T14,
21397         T15,
21398         T16,
21399         T17,
21400         T18,
21401         T19,
21402         T20,
21403         T21,
21404         T22,
21405         T23,
21406         T24,
21407         T25,
21408         T26,
21409         T27,
21410         T28,
21411         T29,
21412         T30,
21413         T31,
21414         T32,
21415         T33,
21416         T34,
21417         T35,
21418         T36,
21419         T37,
21420         T38,
21421         T39,
21422         T40,
21423         T41,
21424         NullType,
21425         NullType,
21426         NullType,
21427         NullType,
21428         NullType,
21429         NullType,
21430         NullType,
21431         NullType,
21432         NullType,
21433         NullType,
21434         NullType,
21435         NullType,
21436         NullType,
21437         NullType,
21438         NullType,
21439         NullType,
21440         NullType,
21441         NullType,
21442         NullType,
21443         NullType,
21444         NullType,
21445         NullType,
21446         NullType,
21447         NullType,
21448         NullType,
21449         NullType,
21450         NullType,
21451         NullType,
21452         NullType,
21453         NullType,
21454         NullType,
21455         NullType,
21456         NullType,
21457         NullType,
21458         NullType,
21459         NullType,
21460         NullType,
21461         NullType,
21462         NullType,
21463         NullType,
21464         NullType,
21465         NullType,
21466         NullType,
21467         NullType,
21468         NullType,
21469         NullType,
21470         NullType,
21471         NullType,
21472         NullType,
21473         NullType,
21474         NullType,
21475         NullType,
21476         NullType,
21477         NullType,
21478         NullType,
21479         NullType,
21480         NullType,
21481         NullType,
21482         NullType,
21483         NullType,
21484         NullType,
21485         NullType,
21486         NullType,
21487         NullType,
21488         NullType,
21489         NullType,
21490         NullType,
21491         NullType,
21492         NullType,
21493         NullType,
21494         NullType,
21495         NullType,
21496         NullType,
21497         NullType,
21498         NullType,
21499         NullType,
21500         NullType,
21501         NullType,
21502         NullType,
21503         NullType,
21504         NullType,
21505         NullType,
21506         NullType,
21507         NullType,
21508         NullType,
21509         NullType> FunctorType;
21510 
21511     FunctorType functor_;
21512 
21513     functionImplementation_(const FunctorType &functor) :
21514         functor_(functor)
21515     {
21516     }
21517         
21518     typedef std::tr1::function<Event (
21519         const EnqueueArgs&,
21520         T0,
21521         T1,
21522         T2,
21523         T3,
21524         T4,
21525         T5,
21526         T6,
21527         T7,
21528         T8,
21529         T9,
21530         T10,
21531         T11,
21532         T12,
21533         T13,
21534         T14,
21535         T15,
21536         T16,
21537         T17,
21538         T18,
21539         T19,
21540         T20,
21541         T21,
21542         T22,
21543         T23,
21544         T24,
21545         T25,
21546         T26,
21547         T27,
21548         T28,
21549         T29,
21550         T30,
21551         T31,
21552         T32,
21553         T33,
21554         T34,
21555         T35,
21556         T36,
21557         T37,
21558         T38,
21559         T39,
21560         T40,
21561         T41)> type_;
21562 
21563     Event operator()(const EnqueueArgs& enqueueArgs,
21564         T0 arg0,
21565         T1 arg1,
21566         T2 arg2,
21567         T3 arg3,
21568         T4 arg4,
21569         T5 arg5,
21570         T6 arg6,
21571         T7 arg7,
21572         T8 arg8,
21573         T9 arg9,
21574         T10 arg10,
21575         T11 arg11,
21576         T12 arg12,
21577         T13 arg13,
21578         T14 arg14,
21579         T15 arg15,
21580         T16 arg16,
21581         T17 arg17,
21582         T18 arg18,
21583         T19 arg19,
21584         T20 arg20,
21585         T21 arg21,
21586         T22 arg22,
21587         T23 arg23,
21588         T24 arg24,
21589         T25 arg25,
21590         T26 arg26,
21591         T27 arg27,
21592         T28 arg28,
21593         T29 arg29,
21594         T30 arg30,
21595         T31 arg31,
21596         T32 arg32,
21597         T33 arg33,
21598         T34 arg34,
21599         T35 arg35,
21600         T36 arg36,
21601         T37 arg37,
21602         T38 arg38,
21603         T39 arg39,
21604         T40 arg40,
21605         T41 arg41)
21606     {
21607         return functor_(
21608             enqueueArgs,
21609             arg0,
21610             arg1,
21611             arg2,
21612             arg3,
21613             arg4,
21614             arg5,
21615             arg6,
21616             arg7,
21617             arg8,
21618             arg9,
21619             arg10,
21620             arg11,
21621             arg12,
21622             arg13,
21623             arg14,
21624             arg15,
21625             arg16,
21626             arg17,
21627             arg18,
21628             arg19,
21629             arg20,
21630             arg21,
21631             arg22,
21632             arg23,
21633             arg24,
21634             arg25,
21635             arg26,
21636             arg27,
21637             arg28,
21638             arg29,
21639             arg30,
21640             arg31,
21641             arg32,
21642             arg33,
21643             arg34,
21644             arg35,
21645             arg36,
21646             arg37,
21647             arg38,
21648             arg39,
21649             arg40,
21650             arg41);
21651     }
21652 
21653     operator type_ ()    
21654     {
21655         return type_(*this);
21656     }
21657 
21658 };
21659 
21660 template<
21661     typename T0,
21662     typename T1,
21663     typename T2,
21664     typename T3,
21665     typename T4,
21666     typename T5,
21667     typename T6,
21668     typename T7,
21669     typename T8,
21670     typename T9,
21671     typename T10,
21672     typename T11,
21673     typename T12,
21674     typename T13,
21675     typename T14,
21676     typename T15,
21677     typename T16,
21678     typename T17,
21679     typename T18,
21680     typename T19,
21681     typename T20,
21682     typename T21,
21683     typename T22,
21684     typename T23,
21685     typename T24,
21686     typename T25,
21687     typename T26,
21688     typename T27,
21689     typename T28,
21690     typename T29,
21691     typename T30,
21692     typename T31,
21693     typename T32,
21694     typename T33,
21695     typename T34,
21696     typename T35,
21697     typename T36,
21698     typename T37,
21699     typename T38,
21700     typename T39,
21701     typename T40,
21702     typename T41,
21703     typename T42>
21704 struct functionImplementation_<
21705     T0,
21706     T1,
21707     T2,
21708     T3,
21709     T4,
21710     T5,
21711     T6,
21712     T7,
21713     T8,
21714     T9,
21715     T10,
21716     T11,
21717     T12,
21718     T13,
21719     T14,
21720     T15,
21721     T16,
21722     T17,
21723     T18,
21724     T19,
21725     T20,
21726     T21,
21727     T22,
21728     T23,
21729     T24,
21730     T25,
21731     T26,
21732     T27,
21733     T28,
21734     T29,
21735     T30,
21736     T31,
21737     T32,
21738     T33,
21739     T34,
21740     T35,
21741     T36,
21742     T37,
21743     T38,
21744     T39,
21745     T40,
21746     T41,
21747     T42,
21748     NullType,
21749     NullType,
21750     NullType,
21751     NullType,
21752     NullType,
21753     NullType,
21754     NullType,
21755     NullType,
21756     NullType,
21757     NullType,
21758     NullType,
21759     NullType,
21760     NullType,
21761     NullType,
21762     NullType,
21763     NullType,
21764     NullType,
21765     NullType,
21766     NullType,
21767     NullType,
21768     NullType,
21769     NullType,
21770     NullType,
21771     NullType,
21772     NullType,
21773     NullType,
21774     NullType,
21775     NullType,
21776     NullType,
21777     NullType,
21778     NullType,
21779     NullType,
21780     NullType,
21781     NullType,
21782     NullType,
21783     NullType,
21784     NullType,
21785     NullType,
21786     NullType,
21787     NullType,
21788     NullType,
21789     NullType,
21790     NullType,
21791     NullType,
21792     NullType,
21793     NullType,
21794     NullType,
21795     NullType,
21796     NullType,
21797     NullType,
21798     NullType,
21799     NullType,
21800     NullType,
21801     NullType,
21802     NullType,
21803     NullType,
21804     NullType,
21805     NullType,
21806     NullType,
21807     NullType,
21808     NullType,
21809     NullType,
21810     NullType,
21811     NullType,
21812     NullType,
21813     NullType,
21814     NullType,
21815     NullType,
21816     NullType,
21817     NullType,
21818     NullType,
21819     NullType,
21820     NullType,
21821     NullType,
21822     NullType,
21823     NullType,
21824     NullType,
21825     NullType,
21826     NullType,
21827     NullType,
21828     NullType,
21829     NullType,
21830     NullType,
21831     NullType,
21832     NullType>
21833 {
21834     typedef detail::KernelFunctorGlobal<
21835         T0,
21836         T1,
21837         T2,
21838         T3,
21839         T4,
21840         T5,
21841         T6,
21842         T7,
21843         T8,
21844         T9,
21845         T10,
21846         T11,
21847         T12,
21848         T13,
21849         T14,
21850         T15,
21851         T16,
21852         T17,
21853         T18,
21854         T19,
21855         T20,
21856         T21,
21857         T22,
21858         T23,
21859         T24,
21860         T25,
21861         T26,
21862         T27,
21863         T28,
21864         T29,
21865         T30,
21866         T31,
21867         T32,
21868         T33,
21869         T34,
21870         T35,
21871         T36,
21872         T37,
21873         T38,
21874         T39,
21875         T40,
21876         T41,
21877         T42,
21878         NullType,
21879         NullType,
21880         NullType,
21881         NullType,
21882         NullType,
21883         NullType,
21884         NullType,
21885         NullType,
21886         NullType,
21887         NullType,
21888         NullType,
21889         NullType,
21890         NullType,
21891         NullType,
21892         NullType,
21893         NullType,
21894         NullType,
21895         NullType,
21896         NullType,
21897         NullType,
21898         NullType,
21899         NullType,
21900         NullType,
21901         NullType,
21902         NullType,
21903         NullType,
21904         NullType,
21905         NullType,
21906         NullType,
21907         NullType,
21908         NullType,
21909         NullType,
21910         NullType,
21911         NullType,
21912         NullType,
21913         NullType,
21914         NullType,
21915         NullType,
21916         NullType,
21917         NullType,
21918         NullType,
21919         NullType,
21920         NullType,
21921         NullType,
21922         NullType,
21923         NullType,
21924         NullType,
21925         NullType,
21926         NullType,
21927         NullType,
21928         NullType,
21929         NullType,
21930         NullType,
21931         NullType,
21932         NullType,
21933         NullType,
21934         NullType,
21935         NullType,
21936         NullType,
21937         NullType,
21938         NullType,
21939         NullType,
21940         NullType,
21941         NullType,
21942         NullType,
21943         NullType,
21944         NullType,
21945         NullType,
21946         NullType,
21947         NullType,
21948         NullType,
21949         NullType,
21950         NullType,
21951         NullType,
21952         NullType,
21953         NullType,
21954         NullType,
21955         NullType,
21956         NullType,
21957         NullType,
21958         NullType,
21959         NullType,
21960         NullType,
21961         NullType,
21962         NullType> FunctorType;
21963 
21964     FunctorType functor_;
21965 
21966     functionImplementation_(const FunctorType &functor) :
21967         functor_(functor)
21968     {
21969     }
21970         
21971     typedef std::tr1::function<Event (
21972         const EnqueueArgs&,
21973         T0,
21974         T1,
21975         T2,
21976         T3,
21977         T4,
21978         T5,
21979         T6,
21980         T7,
21981         T8,
21982         T9,
21983         T10,
21984         T11,
21985         T12,
21986         T13,
21987         T14,
21988         T15,
21989         T16,
21990         T17,
21991         T18,
21992         T19,
21993         T20,
21994         T21,
21995         T22,
21996         T23,
21997         T24,
21998         T25,
21999         T26,
22000         T27,
22001         T28,
22002         T29,
22003         T30,
22004         T31,
22005         T32,
22006         T33,
22007         T34,
22008         T35,
22009         T36,
22010         T37,
22011         T38,
22012         T39,
22013         T40,
22014         T41,
22015         T42)> type_;
22016 
22017     Event operator()(const EnqueueArgs& enqueueArgs,
22018         T0 arg0,
22019         T1 arg1,
22020         T2 arg2,
22021         T3 arg3,
22022         T4 arg4,
22023         T5 arg5,
22024         T6 arg6,
22025         T7 arg7,
22026         T8 arg8,
22027         T9 arg9,
22028         T10 arg10,
22029         T11 arg11,
22030         T12 arg12,
22031         T13 arg13,
22032         T14 arg14,
22033         T15 arg15,
22034         T16 arg16,
22035         T17 arg17,
22036         T18 arg18,
22037         T19 arg19,
22038         T20 arg20,
22039         T21 arg21,
22040         T22 arg22,
22041         T23 arg23,
22042         T24 arg24,
22043         T25 arg25,
22044         T26 arg26,
22045         T27 arg27,
22046         T28 arg28,
22047         T29 arg29,
22048         T30 arg30,
22049         T31 arg31,
22050         T32 arg32,
22051         T33 arg33,
22052         T34 arg34,
22053         T35 arg35,
22054         T36 arg36,
22055         T37 arg37,
22056         T38 arg38,
22057         T39 arg39,
22058         T40 arg40,
22059         T41 arg41,
22060         T42 arg42)
22061     {
22062         return functor_(
22063             enqueueArgs,
22064             arg0,
22065             arg1,
22066             arg2,
22067             arg3,
22068             arg4,
22069             arg5,
22070             arg6,
22071             arg7,
22072             arg8,
22073             arg9,
22074             arg10,
22075             arg11,
22076             arg12,
22077             arg13,
22078             arg14,
22079             arg15,
22080             arg16,
22081             arg17,
22082             arg18,
22083             arg19,
22084             arg20,
22085             arg21,
22086             arg22,
22087             arg23,
22088             arg24,
22089             arg25,
22090             arg26,
22091             arg27,
22092             arg28,
22093             arg29,
22094             arg30,
22095             arg31,
22096             arg32,
22097             arg33,
22098             arg34,
22099             arg35,
22100             arg36,
22101             arg37,
22102             arg38,
22103             arg39,
22104             arg40,
22105             arg41,
22106             arg42);
22107     }
22108 
22109     operator type_ ()    
22110     {
22111         return type_(*this);
22112     }
22113 
22114 };
22115 
22116 template<
22117     typename T0,
22118     typename T1,
22119     typename T2,
22120     typename T3,
22121     typename T4,
22122     typename T5,
22123     typename T6,
22124     typename T7,
22125     typename T8,
22126     typename T9,
22127     typename T10,
22128     typename T11,
22129     typename T12,
22130     typename T13,
22131     typename T14,
22132     typename T15,
22133     typename T16,
22134     typename T17,
22135     typename T18,
22136     typename T19,
22137     typename T20,
22138     typename T21,
22139     typename T22,
22140     typename T23,
22141     typename T24,
22142     typename T25,
22143     typename T26,
22144     typename T27,
22145     typename T28,
22146     typename T29,
22147     typename T30,
22148     typename T31,
22149     typename T32,
22150     typename T33,
22151     typename T34,
22152     typename T35,
22153     typename T36,
22154     typename T37,
22155     typename T38,
22156     typename T39,
22157     typename T40,
22158     typename T41,
22159     typename T42,
22160     typename T43>
22161 struct functionImplementation_<
22162     T0,
22163     T1,
22164     T2,
22165     T3,
22166     T4,
22167     T5,
22168     T6,
22169     T7,
22170     T8,
22171     T9,
22172     T10,
22173     T11,
22174     T12,
22175     T13,
22176     T14,
22177     T15,
22178     T16,
22179     T17,
22180     T18,
22181     T19,
22182     T20,
22183     T21,
22184     T22,
22185     T23,
22186     T24,
22187     T25,
22188     T26,
22189     T27,
22190     T28,
22191     T29,
22192     T30,
22193     T31,
22194     T32,
22195     T33,
22196     T34,
22197     T35,
22198     T36,
22199     T37,
22200     T38,
22201     T39,
22202     T40,
22203     T41,
22204     T42,
22205     T43,
22206     NullType,
22207     NullType,
22208     NullType,
22209     NullType,
22210     NullType,
22211     NullType,
22212     NullType,
22213     NullType,
22214     NullType,
22215     NullType,
22216     NullType,
22217     NullType,
22218     NullType,
22219     NullType,
22220     NullType,
22221     NullType,
22222     NullType,
22223     NullType,
22224     NullType,
22225     NullType,
22226     NullType,
22227     NullType,
22228     NullType,
22229     NullType,
22230     NullType,
22231     NullType,
22232     NullType,
22233     NullType,
22234     NullType,
22235     NullType,
22236     NullType,
22237     NullType,
22238     NullType,
22239     NullType,
22240     NullType,
22241     NullType,
22242     NullType,
22243     NullType,
22244     NullType,
22245     NullType,
22246     NullType,
22247     NullType,
22248     NullType,
22249     NullType,
22250     NullType,
22251     NullType,
22252     NullType,
22253     NullType,
22254     NullType,
22255     NullType,
22256     NullType,
22257     NullType,
22258     NullType,
22259     NullType,
22260     NullType,
22261     NullType,
22262     NullType,
22263     NullType,
22264     NullType,
22265     NullType,
22266     NullType,
22267     NullType,
22268     NullType,
22269     NullType,
22270     NullType,
22271     NullType,
22272     NullType,
22273     NullType,
22274     NullType,
22275     NullType,
22276     NullType,
22277     NullType,
22278     NullType,
22279     NullType,
22280     NullType,
22281     NullType,
22282     NullType,
22283     NullType,
22284     NullType,
22285     NullType,
22286     NullType,
22287     NullType,
22288     NullType,
22289     NullType>
22290 {
22291     typedef detail::KernelFunctorGlobal<
22292         T0,
22293         T1,
22294         T2,
22295         T3,
22296         T4,
22297         T5,
22298         T6,
22299         T7,
22300         T8,
22301         T9,
22302         T10,
22303         T11,
22304         T12,
22305         T13,
22306         T14,
22307         T15,
22308         T16,
22309         T17,
22310         T18,
22311         T19,
22312         T20,
22313         T21,
22314         T22,
22315         T23,
22316         T24,
22317         T25,
22318         T26,
22319         T27,
22320         T28,
22321         T29,
22322         T30,
22323         T31,
22324         T32,
22325         T33,
22326         T34,
22327         T35,
22328         T36,
22329         T37,
22330         T38,
22331         T39,
22332         T40,
22333         T41,
22334         T42,
22335         T43,
22336         NullType,
22337         NullType,
22338         NullType,
22339         NullType,
22340         NullType,
22341         NullType,
22342         NullType,
22343         NullType,
22344         NullType,
22345         NullType,
22346         NullType,
22347         NullType,
22348         NullType,
22349         NullType,
22350         NullType,
22351         NullType,
22352         NullType,
22353         NullType,
22354         NullType,
22355         NullType,
22356         NullType,
22357         NullType,
22358         NullType,
22359         NullType,
22360         NullType,
22361         NullType,
22362         NullType,
22363         NullType,
22364         NullType,
22365         NullType,
22366         NullType,
22367         NullType,
22368         NullType,
22369         NullType,
22370         NullType,
22371         NullType,
22372         NullType,
22373         NullType,
22374         NullType,
22375         NullType,
22376         NullType,
22377         NullType,
22378         NullType,
22379         NullType,
22380         NullType,
22381         NullType,
22382         NullType,
22383         NullType,
22384         NullType,
22385         NullType,
22386         NullType,
22387         NullType,
22388         NullType,
22389         NullType,
22390         NullType,
22391         NullType,
22392         NullType,
22393         NullType,
22394         NullType,
22395         NullType,
22396         NullType,
22397         NullType,
22398         NullType,
22399         NullType,
22400         NullType,
22401         NullType,
22402         NullType,
22403         NullType,
22404         NullType,
22405         NullType,
22406         NullType,
22407         NullType,
22408         NullType,
22409         NullType,
22410         NullType,
22411         NullType,
22412         NullType,
22413         NullType,
22414         NullType,
22415         NullType,
22416         NullType,
22417         NullType,
22418         NullType,
22419         NullType> FunctorType;
22420 
22421     FunctorType functor_;
22422 
22423     functionImplementation_(const FunctorType &functor) :
22424         functor_(functor)
22425     {
22426     }
22427         
22428     typedef std::tr1::function<Event (
22429         const EnqueueArgs&,
22430         T0,
22431         T1,
22432         T2,
22433         T3,
22434         T4,
22435         T5,
22436         T6,
22437         T7,
22438         T8,
22439         T9,
22440         T10,
22441         T11,
22442         T12,
22443         T13,
22444         T14,
22445         T15,
22446         T16,
22447         T17,
22448         T18,
22449         T19,
22450         T20,
22451         T21,
22452         T22,
22453         T23,
22454         T24,
22455         T25,
22456         T26,
22457         T27,
22458         T28,
22459         T29,
22460         T30,
22461         T31,
22462         T32,
22463         T33,
22464         T34,
22465         T35,
22466         T36,
22467         T37,
22468         T38,
22469         T39,
22470         T40,
22471         T41,
22472         T42,
22473         T43)> type_;
22474 
22475     Event operator()(const EnqueueArgs& enqueueArgs,
22476         T0 arg0,
22477         T1 arg1,
22478         T2 arg2,
22479         T3 arg3,
22480         T4 arg4,
22481         T5 arg5,
22482         T6 arg6,
22483         T7 arg7,
22484         T8 arg8,
22485         T9 arg9,
22486         T10 arg10,
22487         T11 arg11,
22488         T12 arg12,
22489         T13 arg13,
22490         T14 arg14,
22491         T15 arg15,
22492         T16 arg16,
22493         T17 arg17,
22494         T18 arg18,
22495         T19 arg19,
22496         T20 arg20,
22497         T21 arg21,
22498         T22 arg22,
22499         T23 arg23,
22500         T24 arg24,
22501         T25 arg25,
22502         T26 arg26,
22503         T27 arg27,
22504         T28 arg28,
22505         T29 arg29,
22506         T30 arg30,
22507         T31 arg31,
22508         T32 arg32,
22509         T33 arg33,
22510         T34 arg34,
22511         T35 arg35,
22512         T36 arg36,
22513         T37 arg37,
22514         T38 arg38,
22515         T39 arg39,
22516         T40 arg40,
22517         T41 arg41,
22518         T42 arg42,
22519         T43 arg43)
22520     {
22521         return functor_(
22522             enqueueArgs,
22523             arg0,
22524             arg1,
22525             arg2,
22526             arg3,
22527             arg4,
22528             arg5,
22529             arg6,
22530             arg7,
22531             arg8,
22532             arg9,
22533             arg10,
22534             arg11,
22535             arg12,
22536             arg13,
22537             arg14,
22538             arg15,
22539             arg16,
22540             arg17,
22541             arg18,
22542             arg19,
22543             arg20,
22544             arg21,
22545             arg22,
22546             arg23,
22547             arg24,
22548             arg25,
22549             arg26,
22550             arg27,
22551             arg28,
22552             arg29,
22553             arg30,
22554             arg31,
22555             arg32,
22556             arg33,
22557             arg34,
22558             arg35,
22559             arg36,
22560             arg37,
22561             arg38,
22562             arg39,
22563             arg40,
22564             arg41,
22565             arg42,
22566             arg43);
22567     }
22568 
22569     operator type_ ()    
22570     {
22571         return type_(*this);
22572     }
22573 
22574 };
22575 
22576 template<
22577     typename T0,
22578     typename T1,
22579     typename T2,
22580     typename T3,
22581     typename T4,
22582     typename T5,
22583     typename T6,
22584     typename T7,
22585     typename T8,
22586     typename T9,
22587     typename T10,
22588     typename T11,
22589     typename T12,
22590     typename T13,
22591     typename T14,
22592     typename T15,
22593     typename T16,
22594     typename T17,
22595     typename T18,
22596     typename T19,
22597     typename T20,
22598     typename T21,
22599     typename T22,
22600     typename T23,
22601     typename T24,
22602     typename T25,
22603     typename T26,
22604     typename T27,
22605     typename T28,
22606     typename T29,
22607     typename T30,
22608     typename T31,
22609     typename T32,
22610     typename T33,
22611     typename T34,
22612     typename T35,
22613     typename T36,
22614     typename T37,
22615     typename T38,
22616     typename T39,
22617     typename T40,
22618     typename T41,
22619     typename T42,
22620     typename T43,
22621     typename T44>
22622 struct functionImplementation_<
22623     T0,
22624     T1,
22625     T2,
22626     T3,
22627     T4,
22628     T5,
22629     T6,
22630     T7,
22631     T8,
22632     T9,
22633     T10,
22634     T11,
22635     T12,
22636     T13,
22637     T14,
22638     T15,
22639     T16,
22640     T17,
22641     T18,
22642     T19,
22643     T20,
22644     T21,
22645     T22,
22646     T23,
22647     T24,
22648     T25,
22649     T26,
22650     T27,
22651     T28,
22652     T29,
22653     T30,
22654     T31,
22655     T32,
22656     T33,
22657     T34,
22658     T35,
22659     T36,
22660     T37,
22661     T38,
22662     T39,
22663     T40,
22664     T41,
22665     T42,
22666     T43,
22667     T44,
22668     NullType,
22669     NullType,
22670     NullType,
22671     NullType,
22672     NullType,
22673     NullType,
22674     NullType,
22675     NullType,
22676     NullType,
22677     NullType,
22678     NullType,
22679     NullType,
22680     NullType,
22681     NullType,
22682     NullType,
22683     NullType,
22684     NullType,
22685     NullType,
22686     NullType,
22687     NullType,
22688     NullType,
22689     NullType,
22690     NullType,
22691     NullType,
22692     NullType,
22693     NullType,
22694     NullType,
22695     NullType,
22696     NullType,
22697     NullType,
22698     NullType,
22699     NullType,
22700     NullType,
22701     NullType,
22702     NullType,
22703     NullType,
22704     NullType,
22705     NullType,
22706     NullType,
22707     NullType,
22708     NullType,
22709     NullType,
22710     NullType,
22711     NullType,
22712     NullType,
22713     NullType,
22714     NullType,
22715     NullType,
22716     NullType,
22717     NullType,
22718     NullType,
22719     NullType,
22720     NullType,
22721     NullType,
22722     NullType,
22723     NullType,
22724     NullType,
22725     NullType,
22726     NullType,
22727     NullType,
22728     NullType,
22729     NullType,
22730     NullType,
22731     NullType,
22732     NullType,
22733     NullType,
22734     NullType,
22735     NullType,
22736     NullType,
22737     NullType,
22738     NullType,
22739     NullType,
22740     NullType,
22741     NullType,
22742     NullType,
22743     NullType,
22744     NullType,
22745     NullType,
22746     NullType,
22747     NullType,
22748     NullType,
22749     NullType,
22750     NullType>
22751 {
22752     typedef detail::KernelFunctorGlobal<
22753         T0,
22754         T1,
22755         T2,
22756         T3,
22757         T4,
22758         T5,
22759         T6,
22760         T7,
22761         T8,
22762         T9,
22763         T10,
22764         T11,
22765         T12,
22766         T13,
22767         T14,
22768         T15,
22769         T16,
22770         T17,
22771         T18,
22772         T19,
22773         T20,
22774         T21,
22775         T22,
22776         T23,
22777         T24,
22778         T25,
22779         T26,
22780         T27,
22781         T28,
22782         T29,
22783         T30,
22784         T31,
22785         T32,
22786         T33,
22787         T34,
22788         T35,
22789         T36,
22790         T37,
22791         T38,
22792         T39,
22793         T40,
22794         T41,
22795         T42,
22796         T43,
22797         T44,
22798         NullType,
22799         NullType,
22800         NullType,
22801         NullType,
22802         NullType,
22803         NullType,
22804         NullType,
22805         NullType,
22806         NullType,
22807         NullType,
22808         NullType,
22809         NullType,
22810         NullType,
22811         NullType,
22812         NullType,
22813         NullType,
22814         NullType,
22815         NullType,
22816         NullType,
22817         NullType,
22818         NullType,
22819         NullType,
22820         NullType,
22821         NullType,
22822         NullType,
22823         NullType,
22824         NullType,
22825         NullType,
22826         NullType,
22827         NullType,
22828         NullType,
22829         NullType,
22830         NullType,
22831         NullType,
22832         NullType,
22833         NullType,
22834         NullType,
22835         NullType,
22836         NullType,
22837         NullType,
22838         NullType,
22839         NullType,
22840         NullType,
22841         NullType,
22842         NullType,
22843         NullType,
22844         NullType,
22845         NullType,
22846         NullType,
22847         NullType,
22848         NullType,
22849         NullType,
22850         NullType,
22851         NullType,
22852         NullType,
22853         NullType,
22854         NullType,
22855         NullType,
22856         NullType,
22857         NullType,
22858         NullType,
22859         NullType,
22860         NullType,
22861         NullType,
22862         NullType,
22863         NullType,
22864         NullType,
22865         NullType,
22866         NullType,
22867         NullType,
22868         NullType,
22869         NullType,
22870         NullType,
22871         NullType,
22872         NullType,
22873         NullType,
22874         NullType,
22875         NullType,
22876         NullType,
22877         NullType,
22878         NullType,
22879         NullType,
22880         NullType> FunctorType;
22881 
22882     FunctorType functor_;
22883 
22884     functionImplementation_(const FunctorType &functor) :
22885         functor_(functor)
22886     {
22887     }
22888         
22889     typedef std::tr1::function<Event (
22890         const EnqueueArgs&,
22891         T0,
22892         T1,
22893         T2,
22894         T3,
22895         T4,
22896         T5,
22897         T6,
22898         T7,
22899         T8,
22900         T9,
22901         T10,
22902         T11,
22903         T12,
22904         T13,
22905         T14,
22906         T15,
22907         T16,
22908         T17,
22909         T18,
22910         T19,
22911         T20,
22912         T21,
22913         T22,
22914         T23,
22915         T24,
22916         T25,
22917         T26,
22918         T27,
22919         T28,
22920         T29,
22921         T30,
22922         T31,
22923         T32,
22924         T33,
22925         T34,
22926         T35,
22927         T36,
22928         T37,
22929         T38,
22930         T39,
22931         T40,
22932         T41,
22933         T42,
22934         T43,
22935         T44)> type_;
22936 
22937     Event operator()(const EnqueueArgs& enqueueArgs,
22938         T0 arg0,
22939         T1 arg1,
22940         T2 arg2,
22941         T3 arg3,
22942         T4 arg4,
22943         T5 arg5,
22944         T6 arg6,
22945         T7 arg7,
22946         T8 arg8,
22947         T9 arg9,
22948         T10 arg10,
22949         T11 arg11,
22950         T12 arg12,
22951         T13 arg13,
22952         T14 arg14,
22953         T15 arg15,
22954         T16 arg16,
22955         T17 arg17,
22956         T18 arg18,
22957         T19 arg19,
22958         T20 arg20,
22959         T21 arg21,
22960         T22 arg22,
22961         T23 arg23,
22962         T24 arg24,
22963         T25 arg25,
22964         T26 arg26,
22965         T27 arg27,
22966         T28 arg28,
22967         T29 arg29,
22968         T30 arg30,
22969         T31 arg31,
22970         T32 arg32,
22971         T33 arg33,
22972         T34 arg34,
22973         T35 arg35,
22974         T36 arg36,
22975         T37 arg37,
22976         T38 arg38,
22977         T39 arg39,
22978         T40 arg40,
22979         T41 arg41,
22980         T42 arg42,
22981         T43 arg43,
22982         T44 arg44)
22983     {
22984         return functor_(
22985             enqueueArgs,
22986             arg0,
22987             arg1,
22988             arg2,
22989             arg3,
22990             arg4,
22991             arg5,
22992             arg6,
22993             arg7,
22994             arg8,
22995             arg9,
22996             arg10,
22997             arg11,
22998             arg12,
22999             arg13,
23000             arg14,
23001             arg15,
23002             arg16,
23003             arg17,
23004             arg18,
23005             arg19,
23006             arg20,
23007             arg21,
23008             arg22,
23009             arg23,
23010             arg24,
23011             arg25,
23012             arg26,
23013             arg27,
23014             arg28,
23015             arg29,
23016             arg30,
23017             arg31,
23018             arg32,
23019             arg33,
23020             arg34,
23021             arg35,
23022             arg36,
23023             arg37,
23024             arg38,
23025             arg39,
23026             arg40,
23027             arg41,
23028             arg42,
23029             arg43,
23030             arg44);
23031     }
23032 
23033     operator type_ ()    
23034     {
23035         return type_(*this);
23036     }
23037 
23038 };
23039 
23040 template<
23041     typename T0,
23042     typename T1,
23043     typename T2,
23044     typename T3,
23045     typename T4,
23046     typename T5,
23047     typename T6,
23048     typename T7,
23049     typename T8,
23050     typename T9,
23051     typename T10,
23052     typename T11,
23053     typename T12,
23054     typename T13,
23055     typename T14,
23056     typename T15,
23057     typename T16,
23058     typename T17,
23059     typename T18,
23060     typename T19,
23061     typename T20,
23062     typename T21,
23063     typename T22,
23064     typename T23,
23065     typename T24,
23066     typename T25,
23067     typename T26,
23068     typename T27,
23069     typename T28,
23070     typename T29,
23071     typename T30,
23072     typename T31,
23073     typename T32,
23074     typename T33,
23075     typename T34,
23076     typename T35,
23077     typename T36,
23078     typename T37,
23079     typename T38,
23080     typename T39,
23081     typename T40,
23082     typename T41,
23083     typename T42,
23084     typename T43,
23085     typename T44,
23086     typename T45>
23087 struct functionImplementation_<
23088     T0,
23089     T1,
23090     T2,
23091     T3,
23092     T4,
23093     T5,
23094     T6,
23095     T7,
23096     T8,
23097     T9,
23098     T10,
23099     T11,
23100     T12,
23101     T13,
23102     T14,
23103     T15,
23104     T16,
23105     T17,
23106     T18,
23107     T19,
23108     T20,
23109     T21,
23110     T22,
23111     T23,
23112     T24,
23113     T25,
23114     T26,
23115     T27,
23116     T28,
23117     T29,
23118     T30,
23119     T31,
23120     T32,
23121     T33,
23122     T34,
23123     T35,
23124     T36,
23125     T37,
23126     T38,
23127     T39,
23128     T40,
23129     T41,
23130     T42,
23131     T43,
23132     T44,
23133     T45,
23134     NullType,
23135     NullType,
23136     NullType,
23137     NullType,
23138     NullType,
23139     NullType,
23140     NullType,
23141     NullType,
23142     NullType,
23143     NullType,
23144     NullType,
23145     NullType,
23146     NullType,
23147     NullType,
23148     NullType,
23149     NullType,
23150     NullType,
23151     NullType,
23152     NullType,
23153     NullType,
23154     NullType,
23155     NullType,
23156     NullType,
23157     NullType,
23158     NullType,
23159     NullType,
23160     NullType,
23161     NullType,
23162     NullType,
23163     NullType,
23164     NullType,
23165     NullType,
23166     NullType,
23167     NullType,
23168     NullType,
23169     NullType,
23170     NullType,
23171     NullType,
23172     NullType,
23173     NullType,
23174     NullType,
23175     NullType,
23176     NullType,
23177     NullType,
23178     NullType,
23179     NullType,
23180     NullType,
23181     NullType,
23182     NullType,
23183     NullType,
23184     NullType,
23185     NullType,
23186     NullType,
23187     NullType,
23188     NullType,
23189     NullType,
23190     NullType,
23191     NullType,
23192     NullType,
23193     NullType,
23194     NullType,
23195     NullType,
23196     NullType,
23197     NullType,
23198     NullType,
23199     NullType,
23200     NullType,
23201     NullType,
23202     NullType,
23203     NullType,
23204     NullType,
23205     NullType,
23206     NullType,
23207     NullType,
23208     NullType,
23209     NullType,
23210     NullType,
23211     NullType,
23212     NullType,
23213     NullType,
23214     NullType,
23215     NullType>
23216 {
23217     typedef detail::KernelFunctorGlobal<
23218         T0,
23219         T1,
23220         T2,
23221         T3,
23222         T4,
23223         T5,
23224         T6,
23225         T7,
23226         T8,
23227         T9,
23228         T10,
23229         T11,
23230         T12,
23231         T13,
23232         T14,
23233         T15,
23234         T16,
23235         T17,
23236         T18,
23237         T19,
23238         T20,
23239         T21,
23240         T22,
23241         T23,
23242         T24,
23243         T25,
23244         T26,
23245         T27,
23246         T28,
23247         T29,
23248         T30,
23249         T31,
23250         T32,
23251         T33,
23252         T34,
23253         T35,
23254         T36,
23255         T37,
23256         T38,
23257         T39,
23258         T40,
23259         T41,
23260         T42,
23261         T43,
23262         T44,
23263         T45,
23264         NullType,
23265         NullType,
23266         NullType,
23267         NullType,
23268         NullType,
23269         NullType,
23270         NullType,
23271         NullType,
23272         NullType,
23273         NullType,
23274         NullType,
23275         NullType,
23276         NullType,
23277         NullType,
23278         NullType,
23279         NullType,
23280         NullType,
23281         NullType,
23282         NullType,
23283         NullType,
23284         NullType,
23285         NullType,
23286         NullType,
23287         NullType,
23288         NullType,
23289         NullType,
23290         NullType,
23291         NullType,
23292         NullType,
23293         NullType,
23294         NullType,
23295         NullType,
23296         NullType,
23297         NullType,
23298         NullType,
23299         NullType,
23300         NullType,
23301         NullType,
23302         NullType,
23303         NullType,
23304         NullType,
23305         NullType,
23306         NullType,
23307         NullType,
23308         NullType,
23309         NullType,
23310         NullType,
23311         NullType,
23312         NullType,
23313         NullType,
23314         NullType,
23315         NullType,
23316         NullType,
23317         NullType,
23318         NullType,
23319         NullType,
23320         NullType,
23321         NullType,
23322         NullType,
23323         NullType,
23324         NullType,
23325         NullType,
23326         NullType,
23327         NullType,
23328         NullType,
23329         NullType,
23330         NullType,
23331         NullType,
23332         NullType,
23333         NullType,
23334         NullType,
23335         NullType,
23336         NullType,
23337         NullType,
23338         NullType,
23339         NullType,
23340         NullType,
23341         NullType,
23342         NullType,
23343         NullType,
23344         NullType,
23345         NullType> FunctorType;
23346 
23347     FunctorType functor_;
23348 
23349     functionImplementation_(const FunctorType &functor) :
23350         functor_(functor)
23351     {
23352     }
23353         
23354     typedef std::tr1::function<Event (
23355         const EnqueueArgs&,
23356         T0,
23357         T1,
23358         T2,
23359         T3,
23360         T4,
23361         T5,
23362         T6,
23363         T7,
23364         T8,
23365         T9,
23366         T10,
23367         T11,
23368         T12,
23369         T13,
23370         T14,
23371         T15,
23372         T16,
23373         T17,
23374         T18,
23375         T19,
23376         T20,
23377         T21,
23378         T22,
23379         T23,
23380         T24,
23381         T25,
23382         T26,
23383         T27,
23384         T28,
23385         T29,
23386         T30,
23387         T31,
23388         T32,
23389         T33,
23390         T34,
23391         T35,
23392         T36,
23393         T37,
23394         T38,
23395         T39,
23396         T40,
23397         T41,
23398         T42,
23399         T43,
23400         T44,
23401         T45)> type_;
23402 
23403     Event operator()(const EnqueueArgs& enqueueArgs,
23404         T0 arg0,
23405         T1 arg1,
23406         T2 arg2,
23407         T3 arg3,
23408         T4 arg4,
23409         T5 arg5,
23410         T6 arg6,
23411         T7 arg7,
23412         T8 arg8,
23413         T9 arg9,
23414         T10 arg10,
23415         T11 arg11,
23416         T12 arg12,
23417         T13 arg13,
23418         T14 arg14,
23419         T15 arg15,
23420         T16 arg16,
23421         T17 arg17,
23422         T18 arg18,
23423         T19 arg19,
23424         T20 arg20,
23425         T21 arg21,
23426         T22 arg22,
23427         T23 arg23,
23428         T24 arg24,
23429         T25 arg25,
23430         T26 arg26,
23431         T27 arg27,
23432         T28 arg28,
23433         T29 arg29,
23434         T30 arg30,
23435         T31 arg31,
23436         T32 arg32,
23437         T33 arg33,
23438         T34 arg34,
23439         T35 arg35,
23440         T36 arg36,
23441         T37 arg37,
23442         T38 arg38,
23443         T39 arg39,
23444         T40 arg40,
23445         T41 arg41,
23446         T42 arg42,
23447         T43 arg43,
23448         T44 arg44,
23449         T45 arg45)
23450     {
23451         return functor_(
23452             enqueueArgs,
23453             arg0,
23454             arg1,
23455             arg2,
23456             arg3,
23457             arg4,
23458             arg5,
23459             arg6,
23460             arg7,
23461             arg8,
23462             arg9,
23463             arg10,
23464             arg11,
23465             arg12,
23466             arg13,
23467             arg14,
23468             arg15,
23469             arg16,
23470             arg17,
23471             arg18,
23472             arg19,
23473             arg20,
23474             arg21,
23475             arg22,
23476             arg23,
23477             arg24,
23478             arg25,
23479             arg26,
23480             arg27,
23481             arg28,
23482             arg29,
23483             arg30,
23484             arg31,
23485             arg32,
23486             arg33,
23487             arg34,
23488             arg35,
23489             arg36,
23490             arg37,
23491             arg38,
23492             arg39,
23493             arg40,
23494             arg41,
23495             arg42,
23496             arg43,
23497             arg44,
23498             arg45);
23499     }
23500 
23501     operator type_ ()    
23502     {
23503         return type_(*this);
23504     }
23505 
23506 };
23507 
23508 template<
23509     typename T0,
23510     typename T1,
23511     typename T2,
23512     typename T3,
23513     typename T4,
23514     typename T5,
23515     typename T6,
23516     typename T7,
23517     typename T8,
23518     typename T9,
23519     typename T10,
23520     typename T11,
23521     typename T12,
23522     typename T13,
23523     typename T14,
23524     typename T15,
23525     typename T16,
23526     typename T17,
23527     typename T18,
23528     typename T19,
23529     typename T20,
23530     typename T21,
23531     typename T22,
23532     typename T23,
23533     typename T24,
23534     typename T25,
23535     typename T26,
23536     typename T27,
23537     typename T28,
23538     typename T29,
23539     typename T30,
23540     typename T31,
23541     typename T32,
23542     typename T33,
23543     typename T34,
23544     typename T35,
23545     typename T36,
23546     typename T37,
23547     typename T38,
23548     typename T39,
23549     typename T40,
23550     typename T41,
23551     typename T42,
23552     typename T43,
23553     typename T44,
23554     typename T45,
23555     typename T46>
23556 struct functionImplementation_<
23557     T0,
23558     T1,
23559     T2,
23560     T3,
23561     T4,
23562     T5,
23563     T6,
23564     T7,
23565     T8,
23566     T9,
23567     T10,
23568     T11,
23569     T12,
23570     T13,
23571     T14,
23572     T15,
23573     T16,
23574     T17,
23575     T18,
23576     T19,
23577     T20,
23578     T21,
23579     T22,
23580     T23,
23581     T24,
23582     T25,
23583     T26,
23584     T27,
23585     T28,
23586     T29,
23587     T30,
23588     T31,
23589     T32,
23590     T33,
23591     T34,
23592     T35,
23593     T36,
23594     T37,
23595     T38,
23596     T39,
23597     T40,
23598     T41,
23599     T42,
23600     T43,
23601     T44,
23602     T45,
23603     T46,
23604     NullType,
23605     NullType,
23606     NullType,
23607     NullType,
23608     NullType,
23609     NullType,
23610     NullType,
23611     NullType,
23612     NullType,
23613     NullType,
23614     NullType,
23615     NullType,
23616     NullType,
23617     NullType,
23618     NullType,
23619     NullType,
23620     NullType,
23621     NullType,
23622     NullType,
23623     NullType,
23624     NullType,
23625     NullType,
23626     NullType,
23627     NullType,
23628     NullType,
23629     NullType,
23630     NullType,
23631     NullType,
23632     NullType,
23633     NullType,
23634     NullType,
23635     NullType,
23636     NullType,
23637     NullType,
23638     NullType,
23639     NullType,
23640     NullType,
23641     NullType,
23642     NullType,
23643     NullType,
23644     NullType,
23645     NullType,
23646     NullType,
23647     NullType,
23648     NullType,
23649     NullType,
23650     NullType,
23651     NullType,
23652     NullType,
23653     NullType,
23654     NullType,
23655     NullType,
23656     NullType,
23657     NullType,
23658     NullType,
23659     NullType,
23660     NullType,
23661     NullType,
23662     NullType,
23663     NullType,
23664     NullType,
23665     NullType,
23666     NullType,
23667     NullType,
23668     NullType,
23669     NullType,
23670     NullType,
23671     NullType,
23672     NullType,
23673     NullType,
23674     NullType,
23675     NullType,
23676     NullType,
23677     NullType,
23678     NullType,
23679     NullType,
23680     NullType,
23681     NullType,
23682     NullType,
23683     NullType,
23684     NullType>
23685 {
23686     typedef detail::KernelFunctorGlobal<
23687         T0,
23688         T1,
23689         T2,
23690         T3,
23691         T4,
23692         T5,
23693         T6,
23694         T7,
23695         T8,
23696         T9,
23697         T10,
23698         T11,
23699         T12,
23700         T13,
23701         T14,
23702         T15,
23703         T16,
23704         T17,
23705         T18,
23706         T19,
23707         T20,
23708         T21,
23709         T22,
23710         T23,
23711         T24,
23712         T25,
23713         T26,
23714         T27,
23715         T28,
23716         T29,
23717         T30,
23718         T31,
23719         T32,
23720         T33,
23721         T34,
23722         T35,
23723         T36,
23724         T37,
23725         T38,
23726         T39,
23727         T40,
23728         T41,
23729         T42,
23730         T43,
23731         T44,
23732         T45,
23733         T46,
23734         NullType,
23735         NullType,
23736         NullType,
23737         NullType,
23738         NullType,
23739         NullType,
23740         NullType,
23741         NullType,
23742         NullType,
23743         NullType,
23744         NullType,
23745         NullType,
23746         NullType,
23747         NullType,
23748         NullType,
23749         NullType,
23750         NullType,
23751         NullType,
23752         NullType,
23753         NullType,
23754         NullType,
23755         NullType,
23756         NullType,
23757         NullType,
23758         NullType,
23759         NullType,
23760         NullType,
23761         NullType,
23762         NullType,
23763         NullType,
23764         NullType,
23765         NullType,
23766         NullType,
23767         NullType,
23768         NullType,
23769         NullType,
23770         NullType,
23771         NullType,
23772         NullType,
23773         NullType,
23774         NullType,
23775         NullType,
23776         NullType,
23777         NullType,
23778         NullType,
23779         NullType,
23780         NullType,
23781         NullType,
23782         NullType,
23783         NullType,
23784         NullType,
23785         NullType,
23786         NullType,
23787         NullType,
23788         NullType,
23789         NullType,
23790         NullType,
23791         NullType,
23792         NullType,
23793         NullType,
23794         NullType,
23795         NullType,
23796         NullType,
23797         NullType,
23798         NullType,
23799         NullType,
23800         NullType,
23801         NullType,
23802         NullType,
23803         NullType,
23804         NullType,
23805         NullType,
23806         NullType,
23807         NullType,
23808         NullType,
23809         NullType,
23810         NullType,
23811         NullType,
23812         NullType,
23813         NullType,
23814         NullType> FunctorType;
23815 
23816     FunctorType functor_;
23817 
23818     functionImplementation_(const FunctorType &functor) :
23819         functor_(functor)
23820     {
23821     }
23822         
23823     typedef std::tr1::function<Event (
23824         const EnqueueArgs&,
23825         T0,
23826         T1,
23827         T2,
23828         T3,
23829         T4,
23830         T5,
23831         T6,
23832         T7,
23833         T8,
23834         T9,
23835         T10,
23836         T11,
23837         T12,
23838         T13,
23839         T14,
23840         T15,
23841         T16,
23842         T17,
23843         T18,
23844         T19,
23845         T20,
23846         T21,
23847         T22,
23848         T23,
23849         T24,
23850         T25,
23851         T26,
23852         T27,
23853         T28,
23854         T29,
23855         T30,
23856         T31,
23857         T32,
23858         T33,
23859         T34,
23860         T35,
23861         T36,
23862         T37,
23863         T38,
23864         T39,
23865         T40,
23866         T41,
23867         T42,
23868         T43,
23869         T44,
23870         T45,
23871         T46)> type_;
23872 
23873     Event operator()(const EnqueueArgs& enqueueArgs,
23874         T0 arg0,
23875         T1 arg1,
23876         T2 arg2,
23877         T3 arg3,
23878         T4 arg4,
23879         T5 arg5,
23880         T6 arg6,
23881         T7 arg7,
23882         T8 arg8,
23883         T9 arg9,
23884         T10 arg10,
23885         T11 arg11,
23886         T12 arg12,
23887         T13 arg13,
23888         T14 arg14,
23889         T15 arg15,
23890         T16 arg16,
23891         T17 arg17,
23892         T18 arg18,
23893         T19 arg19,
23894         T20 arg20,
23895         T21 arg21,
23896         T22 arg22,
23897         T23 arg23,
23898         T24 arg24,
23899         T25 arg25,
23900         T26 arg26,
23901         T27 arg27,
23902         T28 arg28,
23903         T29 arg29,
23904         T30 arg30,
23905         T31 arg31,
23906         T32 arg32,
23907         T33 arg33,
23908         T34 arg34,
23909         T35 arg35,
23910         T36 arg36,
23911         T37 arg37,
23912         T38 arg38,
23913         T39 arg39,
23914         T40 arg40,
23915         T41 arg41,
23916         T42 arg42,
23917         T43 arg43,
23918         T44 arg44,
23919         T45 arg45,
23920         T46 arg46)
23921     {
23922         return functor_(
23923             enqueueArgs,
23924             arg0,
23925             arg1,
23926             arg2,
23927             arg3,
23928             arg4,
23929             arg5,
23930             arg6,
23931             arg7,
23932             arg8,
23933             arg9,
23934             arg10,
23935             arg11,
23936             arg12,
23937             arg13,
23938             arg14,
23939             arg15,
23940             arg16,
23941             arg17,
23942             arg18,
23943             arg19,
23944             arg20,
23945             arg21,
23946             arg22,
23947             arg23,
23948             arg24,
23949             arg25,
23950             arg26,
23951             arg27,
23952             arg28,
23953             arg29,
23954             arg30,
23955             arg31,
23956             arg32,
23957             arg33,
23958             arg34,
23959             arg35,
23960             arg36,
23961             arg37,
23962             arg38,
23963             arg39,
23964             arg40,
23965             arg41,
23966             arg42,
23967             arg43,
23968             arg44,
23969             arg45,
23970             arg46);
23971     }
23972 
23973     operator type_ ()    
23974     {
23975         return type_(*this);
23976     }
23977 
23978 };
23979 
23980 template<
23981     typename T0,
23982     typename T1,
23983     typename T2,
23984     typename T3,
23985     typename T4,
23986     typename T5,
23987     typename T6,
23988     typename T7,
23989     typename T8,
23990     typename T9,
23991     typename T10,
23992     typename T11,
23993     typename T12,
23994     typename T13,
23995     typename T14,
23996     typename T15,
23997     typename T16,
23998     typename T17,
23999     typename T18,
24000     typename T19,
24001     typename T20,
24002     typename T21,
24003     typename T22,
24004     typename T23,
24005     typename T24,
24006     typename T25,
24007     typename T26,
24008     typename T27,
24009     typename T28,
24010     typename T29,
24011     typename T30,
24012     typename T31,
24013     typename T32,
24014     typename T33,
24015     typename T34,
24016     typename T35,
24017     typename T36,
24018     typename T37,
24019     typename T38,
24020     typename T39,
24021     typename T40,
24022     typename T41,
24023     typename T42,
24024     typename T43,
24025     typename T44,
24026     typename T45,
24027     typename T46,
24028     typename T47>
24029 struct functionImplementation_<
24030     T0,
24031     T1,
24032     T2,
24033     T3,
24034     T4,
24035     T5,
24036     T6,
24037     T7,
24038     T8,
24039     T9,
24040     T10,
24041     T11,
24042     T12,
24043     T13,
24044     T14,
24045     T15,
24046     T16,
24047     T17,
24048     T18,
24049     T19,
24050     T20,
24051     T21,
24052     T22,
24053     T23,
24054     T24,
24055     T25,
24056     T26,
24057     T27,
24058     T28,
24059     T29,
24060     T30,
24061     T31,
24062     T32,
24063     T33,
24064     T34,
24065     T35,
24066     T36,
24067     T37,
24068     T38,
24069     T39,
24070     T40,
24071     T41,
24072     T42,
24073     T43,
24074     T44,
24075     T45,
24076     T46,
24077     T47,
24078     NullType,
24079     NullType,
24080     NullType,
24081     NullType,
24082     NullType,
24083     NullType,
24084     NullType,
24085     NullType,
24086     NullType,
24087     NullType,
24088     NullType,
24089     NullType,
24090     NullType,
24091     NullType,
24092     NullType,
24093     NullType,
24094     NullType,
24095     NullType,
24096     NullType,
24097     NullType,
24098     NullType,
24099     NullType,
24100     NullType,
24101     NullType,
24102     NullType,
24103     NullType,
24104     NullType,
24105     NullType,
24106     NullType,
24107     NullType,
24108     NullType,
24109     NullType,
24110     NullType,
24111     NullType,
24112     NullType,
24113     NullType,
24114     NullType,
24115     NullType,
24116     NullType,
24117     NullType,
24118     NullType,
24119     NullType,
24120     NullType,
24121     NullType,
24122     NullType,
24123     NullType,
24124     NullType,
24125     NullType,
24126     NullType,
24127     NullType,
24128     NullType,
24129     NullType,
24130     NullType,
24131     NullType,
24132     NullType,
24133     NullType,
24134     NullType,
24135     NullType,
24136     NullType,
24137     NullType,
24138     NullType,
24139     NullType,
24140     NullType,
24141     NullType,
24142     NullType,
24143     NullType,
24144     NullType,
24145     NullType,
24146     NullType,
24147     NullType,
24148     NullType,
24149     NullType,
24150     NullType,
24151     NullType,
24152     NullType,
24153     NullType,
24154     NullType,
24155     NullType,
24156     NullType,
24157     NullType>
24158 {
24159     typedef detail::KernelFunctorGlobal<
24160         T0,
24161         T1,
24162         T2,
24163         T3,
24164         T4,
24165         T5,
24166         T6,
24167         T7,
24168         T8,
24169         T9,
24170         T10,
24171         T11,
24172         T12,
24173         T13,
24174         T14,
24175         T15,
24176         T16,
24177         T17,
24178         T18,
24179         T19,
24180         T20,
24181         T21,
24182         T22,
24183         T23,
24184         T24,
24185         T25,
24186         T26,
24187         T27,
24188         T28,
24189         T29,
24190         T30,
24191         T31,
24192         T32,
24193         T33,
24194         T34,
24195         T35,
24196         T36,
24197         T37,
24198         T38,
24199         T39,
24200         T40,
24201         T41,
24202         T42,
24203         T43,
24204         T44,
24205         T45,
24206         T46,
24207         T47,
24208         NullType,
24209         NullType,
24210         NullType,
24211         NullType,
24212         NullType,
24213         NullType,
24214         NullType,
24215         NullType,
24216         NullType,
24217         NullType,
24218         NullType,
24219         NullType,
24220         NullType,
24221         NullType,
24222         NullType,
24223         NullType,
24224         NullType,
24225         NullType,
24226         NullType,
24227         NullType,
24228         NullType,
24229         NullType,
24230         NullType,
24231         NullType,
24232         NullType,
24233         NullType,
24234         NullType,
24235         NullType,
24236         NullType,
24237         NullType,
24238         NullType,
24239         NullType,
24240         NullType,
24241         NullType,
24242         NullType,
24243         NullType,
24244         NullType,
24245         NullType,
24246         NullType,
24247         NullType,
24248         NullType,
24249         NullType,
24250         NullType,
24251         NullType,
24252         NullType,
24253         NullType,
24254         NullType,
24255         NullType,
24256         NullType,
24257         NullType,
24258         NullType,
24259         NullType,
24260         NullType,
24261         NullType,
24262         NullType,
24263         NullType,
24264         NullType,
24265         NullType,
24266         NullType,
24267         NullType,
24268         NullType,
24269         NullType,
24270         NullType,
24271         NullType,
24272         NullType,
24273         NullType,
24274         NullType,
24275         NullType,
24276         NullType,
24277         NullType,
24278         NullType,
24279         NullType,
24280         NullType,
24281         NullType,
24282         NullType,
24283         NullType,
24284         NullType,
24285         NullType,
24286         NullType,
24287         NullType> FunctorType;
24288 
24289     FunctorType functor_;
24290 
24291     functionImplementation_(const FunctorType &functor) :
24292         functor_(functor)
24293     {
24294     }
24295         
24296     typedef std::tr1::function<Event (
24297         const EnqueueArgs&,
24298         T0,
24299         T1,
24300         T2,
24301         T3,
24302         T4,
24303         T5,
24304         T6,
24305         T7,
24306         T8,
24307         T9,
24308         T10,
24309         T11,
24310         T12,
24311         T13,
24312         T14,
24313         T15,
24314         T16,
24315         T17,
24316         T18,
24317         T19,
24318         T20,
24319         T21,
24320         T22,
24321         T23,
24322         T24,
24323         T25,
24324         T26,
24325         T27,
24326         T28,
24327         T29,
24328         T30,
24329         T31,
24330         T32,
24331         T33,
24332         T34,
24333         T35,
24334         T36,
24335         T37,
24336         T38,
24337         T39,
24338         T40,
24339         T41,
24340         T42,
24341         T43,
24342         T44,
24343         T45,
24344         T46,
24345         T47)> type_;
24346 
24347     Event operator()(const EnqueueArgs& enqueueArgs,
24348         T0 arg0,
24349         T1 arg1,
24350         T2 arg2,
24351         T3 arg3,
24352         T4 arg4,
24353         T5 arg5,
24354         T6 arg6,
24355         T7 arg7,
24356         T8 arg8,
24357         T9 arg9,
24358         T10 arg10,
24359         T11 arg11,
24360         T12 arg12,
24361         T13 arg13,
24362         T14 arg14,
24363         T15 arg15,
24364         T16 arg16,
24365         T17 arg17,
24366         T18 arg18,
24367         T19 arg19,
24368         T20 arg20,
24369         T21 arg21,
24370         T22 arg22,
24371         T23 arg23,
24372         T24 arg24,
24373         T25 arg25,
24374         T26 arg26,
24375         T27 arg27,
24376         T28 arg28,
24377         T29 arg29,
24378         T30 arg30,
24379         T31 arg31,
24380         T32 arg32,
24381         T33 arg33,
24382         T34 arg34,
24383         T35 arg35,
24384         T36 arg36,
24385         T37 arg37,
24386         T38 arg38,
24387         T39 arg39,
24388         T40 arg40,
24389         T41 arg41,
24390         T42 arg42,
24391         T43 arg43,
24392         T44 arg44,
24393         T45 arg45,
24394         T46 arg46,
24395         T47 arg47)
24396     {
24397         return functor_(
24398             enqueueArgs,
24399             arg0,
24400             arg1,
24401             arg2,
24402             arg3,
24403             arg4,
24404             arg5,
24405             arg6,
24406             arg7,
24407             arg8,
24408             arg9,
24409             arg10,
24410             arg11,
24411             arg12,
24412             arg13,
24413             arg14,
24414             arg15,
24415             arg16,
24416             arg17,
24417             arg18,
24418             arg19,
24419             arg20,
24420             arg21,
24421             arg22,
24422             arg23,
24423             arg24,
24424             arg25,
24425             arg26,
24426             arg27,
24427             arg28,
24428             arg29,
24429             arg30,
24430             arg31,
24431             arg32,
24432             arg33,
24433             arg34,
24434             arg35,
24435             arg36,
24436             arg37,
24437             arg38,
24438             arg39,
24439             arg40,
24440             arg41,
24441             arg42,
24442             arg43,
24443             arg44,
24444             arg45,
24445             arg46,
24446             arg47);
24447     }
24448 
24449     operator type_ ()    
24450     {
24451         return type_(*this);
24452     }
24453 
24454 };
24455 
24456 template<
24457     typename T0,
24458     typename T1,
24459     typename T2,
24460     typename T3,
24461     typename T4,
24462     typename T5,
24463     typename T6,
24464     typename T7,
24465     typename T8,
24466     typename T9,
24467     typename T10,
24468     typename T11,
24469     typename T12,
24470     typename T13,
24471     typename T14,
24472     typename T15,
24473     typename T16,
24474     typename T17,
24475     typename T18,
24476     typename T19,
24477     typename T20,
24478     typename T21,
24479     typename T22,
24480     typename T23,
24481     typename T24,
24482     typename T25,
24483     typename T26,
24484     typename T27,
24485     typename T28,
24486     typename T29,
24487     typename T30,
24488     typename T31,
24489     typename T32,
24490     typename T33,
24491     typename T34,
24492     typename T35,
24493     typename T36,
24494     typename T37,
24495     typename T38,
24496     typename T39,
24497     typename T40,
24498     typename T41,
24499     typename T42,
24500     typename T43,
24501     typename T44,
24502     typename T45,
24503     typename T46,
24504     typename T47,
24505     typename T48>
24506 struct functionImplementation_<
24507     T0,
24508     T1,
24509     T2,
24510     T3,
24511     T4,
24512     T5,
24513     T6,
24514     T7,
24515     T8,
24516     T9,
24517     T10,
24518     T11,
24519     T12,
24520     T13,
24521     T14,
24522     T15,
24523     T16,
24524     T17,
24525     T18,
24526     T19,
24527     T20,
24528     T21,
24529     T22,
24530     T23,
24531     T24,
24532     T25,
24533     T26,
24534     T27,
24535     T28,
24536     T29,
24537     T30,
24538     T31,
24539     T32,
24540     T33,
24541     T34,
24542     T35,
24543     T36,
24544     T37,
24545     T38,
24546     T39,
24547     T40,
24548     T41,
24549     T42,
24550     T43,
24551     T44,
24552     T45,
24553     T46,
24554     T47,
24555     T48,
24556     NullType,
24557     NullType,
24558     NullType,
24559     NullType,
24560     NullType,
24561     NullType,
24562     NullType,
24563     NullType,
24564     NullType,
24565     NullType,
24566     NullType,
24567     NullType,
24568     NullType,
24569     NullType,
24570     NullType,
24571     NullType,
24572     NullType,
24573     NullType,
24574     NullType,
24575     NullType,
24576     NullType,
24577     NullType,
24578     NullType,
24579     NullType,
24580     NullType,
24581     NullType,
24582     NullType,
24583     NullType,
24584     NullType,
24585     NullType,
24586     NullType,
24587     NullType,
24588     NullType,
24589     NullType,
24590     NullType,
24591     NullType,
24592     NullType,
24593     NullType,
24594     NullType,
24595     NullType,
24596     NullType,
24597     NullType,
24598     NullType,
24599     NullType,
24600     NullType,
24601     NullType,
24602     NullType,
24603     NullType,
24604     NullType,
24605     NullType,
24606     NullType,
24607     NullType,
24608     NullType,
24609     NullType,
24610     NullType,
24611     NullType,
24612     NullType,
24613     NullType,
24614     NullType,
24615     NullType,
24616     NullType,
24617     NullType,
24618     NullType,
24619     NullType,
24620     NullType,
24621     NullType,
24622     NullType,
24623     NullType,
24624     NullType,
24625     NullType,
24626     NullType,
24627     NullType,
24628     NullType,
24629     NullType,
24630     NullType,
24631     NullType,
24632     NullType,
24633     NullType,
24634     NullType>
24635 {
24636     typedef detail::KernelFunctorGlobal<
24637         T0,
24638         T1,
24639         T2,
24640         T3,
24641         T4,
24642         T5,
24643         T6,
24644         T7,
24645         T8,
24646         T9,
24647         T10,
24648         T11,
24649         T12,
24650         T13,
24651         T14,
24652         T15,
24653         T16,
24654         T17,
24655         T18,
24656         T19,
24657         T20,
24658         T21,
24659         T22,
24660         T23,
24661         T24,
24662         T25,
24663         T26,
24664         T27,
24665         T28,
24666         T29,
24667         T30,
24668         T31,
24669         T32,
24670         T33,
24671         T34,
24672         T35,
24673         T36,
24674         T37,
24675         T38,
24676         T39,
24677         T40,
24678         T41,
24679         T42,
24680         T43,
24681         T44,
24682         T45,
24683         T46,
24684         T47,
24685         T48,
24686         NullType,
24687         NullType,
24688         NullType,
24689         NullType,
24690         NullType,
24691         NullType,
24692         NullType,
24693         NullType,
24694         NullType,
24695         NullType,
24696         NullType,
24697         NullType,
24698         NullType,
24699         NullType,
24700         NullType,
24701         NullType,
24702         NullType,
24703         NullType,
24704         NullType,
24705         NullType,
24706         NullType,
24707         NullType,
24708         NullType,
24709         NullType,
24710         NullType,
24711         NullType,
24712         NullType,
24713         NullType,
24714         NullType,
24715         NullType,
24716         NullType,
24717         NullType,
24718         NullType,
24719         NullType,
24720         NullType,
24721         NullType,
24722         NullType,
24723         NullType,
24724         NullType,
24725         NullType,
24726         NullType,
24727         NullType,
24728         NullType,
24729         NullType,
24730         NullType,
24731         NullType,
24732         NullType,
24733         NullType,
24734         NullType,
24735         NullType,
24736         NullType,
24737         NullType,
24738         NullType,
24739         NullType,
24740         NullType,
24741         NullType,
24742         NullType,
24743         NullType,
24744         NullType,
24745         NullType,
24746         NullType,
24747         NullType,
24748         NullType,
24749         NullType,
24750         NullType,
24751         NullType,
24752         NullType,
24753         NullType,
24754         NullType,
24755         NullType,
24756         NullType,
24757         NullType,
24758         NullType,
24759         NullType,
24760         NullType,
24761         NullType,
24762         NullType,
24763         NullType,
24764         NullType> FunctorType;
24765 
24766     FunctorType functor_;
24767 
24768     functionImplementation_(const FunctorType &functor) :
24769         functor_(functor)
24770     {
24771     }
24772         
24773     typedef std::tr1::function<Event (
24774         const EnqueueArgs&,
24775         T0,
24776         T1,
24777         T2,
24778         T3,
24779         T4,
24780         T5,
24781         T6,
24782         T7,
24783         T8,
24784         T9,
24785         T10,
24786         T11,
24787         T12,
24788         T13,
24789         T14,
24790         T15,
24791         T16,
24792         T17,
24793         T18,
24794         T19,
24795         T20,
24796         T21,
24797         T22,
24798         T23,
24799         T24,
24800         T25,
24801         T26,
24802         T27,
24803         T28,
24804         T29,
24805         T30,
24806         T31,
24807         T32,
24808         T33,
24809         T34,
24810         T35,
24811         T36,
24812         T37,
24813         T38,
24814         T39,
24815         T40,
24816         T41,
24817         T42,
24818         T43,
24819         T44,
24820         T45,
24821         T46,
24822         T47,
24823         T48)> type_;
24824 
24825     Event operator()(const EnqueueArgs& enqueueArgs,
24826         T0 arg0,
24827         T1 arg1,
24828         T2 arg2,
24829         T3 arg3,
24830         T4 arg4,
24831         T5 arg5,
24832         T6 arg6,
24833         T7 arg7,
24834         T8 arg8,
24835         T9 arg9,
24836         T10 arg10,
24837         T11 arg11,
24838         T12 arg12,
24839         T13 arg13,
24840         T14 arg14,
24841         T15 arg15,
24842         T16 arg16,
24843         T17 arg17,
24844         T18 arg18,
24845         T19 arg19,
24846         T20 arg20,
24847         T21 arg21,
24848         T22 arg22,
24849         T23 arg23,
24850         T24 arg24,
24851         T25 arg25,
24852         T26 arg26,
24853         T27 arg27,
24854         T28 arg28,
24855         T29 arg29,
24856         T30 arg30,
24857         T31 arg31,
24858         T32 arg32,
24859         T33 arg33,
24860         T34 arg34,
24861         T35 arg35,
24862         T36 arg36,
24863         T37 arg37,
24864         T38 arg38,
24865         T39 arg39,
24866         T40 arg40,
24867         T41 arg41,
24868         T42 arg42,
24869         T43 arg43,
24870         T44 arg44,
24871         T45 arg45,
24872         T46 arg46,
24873         T47 arg47,
24874         T48 arg48)
24875     {
24876         return functor_(
24877             enqueueArgs,
24878             arg0,
24879             arg1,
24880             arg2,
24881             arg3,
24882             arg4,
24883             arg5,
24884             arg6,
24885             arg7,
24886             arg8,
24887             arg9,
24888             arg10,
24889             arg11,
24890             arg12,
24891             arg13,
24892             arg14,
24893             arg15,
24894             arg16,
24895             arg17,
24896             arg18,
24897             arg19,
24898             arg20,
24899             arg21,
24900             arg22,
24901             arg23,
24902             arg24,
24903             arg25,
24904             arg26,
24905             arg27,
24906             arg28,
24907             arg29,
24908             arg30,
24909             arg31,
24910             arg32,
24911             arg33,
24912             arg34,
24913             arg35,
24914             arg36,
24915             arg37,
24916             arg38,
24917             arg39,
24918             arg40,
24919             arg41,
24920             arg42,
24921             arg43,
24922             arg44,
24923             arg45,
24924             arg46,
24925             arg47,
24926             arg48);
24927     }
24928 
24929     operator type_ ()    
24930     {
24931         return type_(*this);
24932     }
24933 
24934 };
24935 
24936 template<
24937     typename T0,
24938     typename T1,
24939     typename T2,
24940     typename T3,
24941     typename T4,
24942     typename T5,
24943     typename T6,
24944     typename T7,
24945     typename T8,
24946     typename T9,
24947     typename T10,
24948     typename T11,
24949     typename T12,
24950     typename T13,
24951     typename T14,
24952     typename T15,
24953     typename T16,
24954     typename T17,
24955     typename T18,
24956     typename T19,
24957     typename T20,
24958     typename T21,
24959     typename T22,
24960     typename T23,
24961     typename T24,
24962     typename T25,
24963     typename T26,
24964     typename T27,
24965     typename T28,
24966     typename T29,
24967     typename T30,
24968     typename T31,
24969     typename T32,
24970     typename T33,
24971     typename T34,
24972     typename T35,
24973     typename T36,
24974     typename T37,
24975     typename T38,
24976     typename T39,
24977     typename T40,
24978     typename T41,
24979     typename T42,
24980     typename T43,
24981     typename T44,
24982     typename T45,
24983     typename T46,
24984     typename T47,
24985     typename T48,
24986     typename T49>
24987 struct functionImplementation_<
24988     T0,
24989     T1,
24990     T2,
24991     T3,
24992     T4,
24993     T5,
24994     T6,
24995     T7,
24996     T8,
24997     T9,
24998     T10,
24999     T11,
25000     T12,
25001     T13,
25002     T14,
25003     T15,
25004     T16,
25005     T17,
25006     T18,
25007     T19,
25008     T20,
25009     T21,
25010     T22,
25011     T23,
25012     T24,
25013     T25,
25014     T26,
25015     T27,
25016     T28,
25017     T29,
25018     T30,
25019     T31,
25020     T32,
25021     T33,
25022     T34,
25023     T35,
25024     T36,
25025     T37,
25026     T38,
25027     T39,
25028     T40,
25029     T41,
25030     T42,
25031     T43,
25032     T44,
25033     T45,
25034     T46,
25035     T47,
25036     T48,
25037     T49,
25038     NullType,
25039     NullType,
25040     NullType,
25041     NullType,
25042     NullType,
25043     NullType,
25044     NullType,
25045     NullType,
25046     NullType,
25047     NullType,
25048     NullType,
25049     NullType,
25050     NullType,
25051     NullType,
25052     NullType,
25053     NullType,
25054     NullType,
25055     NullType,
25056     NullType,
25057     NullType,
25058     NullType,
25059     NullType,
25060     NullType,
25061     NullType,
25062     NullType,
25063     NullType,
25064     NullType,
25065     NullType,
25066     NullType,
25067     NullType,
25068     NullType,
25069     NullType,
25070     NullType,
25071     NullType,
25072     NullType,
25073     NullType,
25074     NullType,
25075     NullType,
25076     NullType,
25077     NullType,
25078     NullType,
25079     NullType,
25080     NullType,
25081     NullType,
25082     NullType,
25083     NullType,
25084     NullType,
25085     NullType,
25086     NullType,
25087     NullType,
25088     NullType,
25089     NullType,
25090     NullType,
25091     NullType,
25092     NullType,
25093     NullType,
25094     NullType,
25095     NullType,
25096     NullType,
25097     NullType,
25098     NullType,
25099     NullType,
25100     NullType,
25101     NullType,
25102     NullType,
25103     NullType,
25104     NullType,
25105     NullType,
25106     NullType,
25107     NullType,
25108     NullType,
25109     NullType,
25110     NullType,
25111     NullType,
25112     NullType,
25113     NullType,
25114     NullType,
25115     NullType>
25116 {
25117     typedef detail::KernelFunctorGlobal<
25118         T0,
25119         T1,
25120         T2,
25121         T3,
25122         T4,
25123         T5,
25124         T6,
25125         T7,
25126         T8,
25127         T9,
25128         T10,
25129         T11,
25130         T12,
25131         T13,
25132         T14,
25133         T15,
25134         T16,
25135         T17,
25136         T18,
25137         T19,
25138         T20,
25139         T21,
25140         T22,
25141         T23,
25142         T24,
25143         T25,
25144         T26,
25145         T27,
25146         T28,
25147         T29,
25148         T30,
25149         T31,
25150         T32,
25151         T33,
25152         T34,
25153         T35,
25154         T36,
25155         T37,
25156         T38,
25157         T39,
25158         T40,
25159         T41,
25160         T42,
25161         T43,
25162         T44,
25163         T45,
25164         T46,
25165         T47,
25166         T48,
25167         T49,
25168         NullType,
25169         NullType,
25170         NullType,
25171         NullType,
25172         NullType,
25173         NullType,
25174         NullType,
25175         NullType,
25176         NullType,
25177         NullType,
25178         NullType,
25179         NullType,
25180         NullType,
25181         NullType,
25182         NullType,
25183         NullType,
25184         NullType,
25185         NullType,
25186         NullType,
25187         NullType,
25188         NullType,
25189         NullType,
25190         NullType,
25191         NullType,
25192         NullType,
25193         NullType,
25194         NullType,
25195         NullType,
25196         NullType,
25197         NullType,
25198         NullType,
25199         NullType,
25200         NullType,
25201         NullType,
25202         NullType,
25203         NullType,
25204         NullType,
25205         NullType,
25206         NullType,
25207         NullType,
25208         NullType,
25209         NullType,
25210         NullType,
25211         NullType,
25212         NullType,
25213         NullType,
25214         NullType,
25215         NullType,
25216         NullType,
25217         NullType,
25218         NullType,
25219         NullType,
25220         NullType,
25221         NullType,
25222         NullType,
25223         NullType,
25224         NullType,
25225         NullType,
25226         NullType,
25227         NullType,
25228         NullType,
25229         NullType,
25230         NullType,
25231         NullType,
25232         NullType,
25233         NullType,
25234         NullType,
25235         NullType,
25236         NullType,
25237         NullType,
25238         NullType,
25239         NullType,
25240         NullType,
25241         NullType,
25242         NullType,
25243         NullType,
25244         NullType,
25245         NullType> FunctorType;
25246 
25247     FunctorType functor_;
25248 
25249     functionImplementation_(const FunctorType &functor) :
25250         functor_(functor)
25251     {
25252     }
25253         
25254     typedef std::tr1::function<Event (
25255         const EnqueueArgs&,
25256         T0,
25257         T1,
25258         T2,
25259         T3,
25260         T4,
25261         T5,
25262         T6,
25263         T7,
25264         T8,
25265         T9,
25266         T10,
25267         T11,
25268         T12,
25269         T13,
25270         T14,
25271         T15,
25272         T16,
25273         T17,
25274         T18,
25275         T19,
25276         T20,
25277         T21,
25278         T22,
25279         T23,
25280         T24,
25281         T25,
25282         T26,
25283         T27,
25284         T28,
25285         T29,
25286         T30,
25287         T31,
25288         T32,
25289         T33,
25290         T34,
25291         T35,
25292         T36,
25293         T37,
25294         T38,
25295         T39,
25296         T40,
25297         T41,
25298         T42,
25299         T43,
25300         T44,
25301         T45,
25302         T46,
25303         T47,
25304         T48,
25305         T49)> type_;
25306 
25307     Event operator()(const EnqueueArgs& enqueueArgs,
25308         T0 arg0,
25309         T1 arg1,
25310         T2 arg2,
25311         T3 arg3,
25312         T4 arg4,
25313         T5 arg5,
25314         T6 arg6,
25315         T7 arg7,
25316         T8 arg8,
25317         T9 arg9,
25318         T10 arg10,
25319         T11 arg11,
25320         T12 arg12,
25321         T13 arg13,
25322         T14 arg14,
25323         T15 arg15,
25324         T16 arg16,
25325         T17 arg17,
25326         T18 arg18,
25327         T19 arg19,
25328         T20 arg20,
25329         T21 arg21,
25330         T22 arg22,
25331         T23 arg23,
25332         T24 arg24,
25333         T25 arg25,
25334         T26 arg26,
25335         T27 arg27,
25336         T28 arg28,
25337         T29 arg29,
25338         T30 arg30,
25339         T31 arg31,
25340         T32 arg32,
25341         T33 arg33,
25342         T34 arg34,
25343         T35 arg35,
25344         T36 arg36,
25345         T37 arg37,
25346         T38 arg38,
25347         T39 arg39,
25348         T40 arg40,
25349         T41 arg41,
25350         T42 arg42,
25351         T43 arg43,
25352         T44 arg44,
25353         T45 arg45,
25354         T46 arg46,
25355         T47 arg47,
25356         T48 arg48,
25357         T49 arg49)
25358     {
25359         return functor_(
25360             enqueueArgs,
25361             arg0,
25362             arg1,
25363             arg2,
25364             arg3,
25365             arg4,
25366             arg5,
25367             arg6,
25368             arg7,
25369             arg8,
25370             arg9,
25371             arg10,
25372             arg11,
25373             arg12,
25374             arg13,
25375             arg14,
25376             arg15,
25377             arg16,
25378             arg17,
25379             arg18,
25380             arg19,
25381             arg20,
25382             arg21,
25383             arg22,
25384             arg23,
25385             arg24,
25386             arg25,
25387             arg26,
25388             arg27,
25389             arg28,
25390             arg29,
25391             arg30,
25392             arg31,
25393             arg32,
25394             arg33,
25395             arg34,
25396             arg35,
25397             arg36,
25398             arg37,
25399             arg38,
25400             arg39,
25401             arg40,
25402             arg41,
25403             arg42,
25404             arg43,
25405             arg44,
25406             arg45,
25407             arg46,
25408             arg47,
25409             arg48,
25410             arg49);
25411     }
25412 
25413     operator type_ ()    
25414     {
25415         return type_(*this);
25416     }
25417 
25418 };
25419 
25420 template<
25421     typename T0,
25422     typename T1,
25423     typename T2,
25424     typename T3,
25425     typename T4,
25426     typename T5,
25427     typename T6,
25428     typename T7,
25429     typename T8,
25430     typename T9,
25431     typename T10,
25432     typename T11,
25433     typename T12,
25434     typename T13,
25435     typename T14,
25436     typename T15,
25437     typename T16,
25438     typename T17,
25439     typename T18,
25440     typename T19,
25441     typename T20,
25442     typename T21,
25443     typename T22,
25444     typename T23,
25445     typename T24,
25446     typename T25,
25447     typename T26,
25448     typename T27,
25449     typename T28,
25450     typename T29,
25451     typename T30,
25452     typename T31,
25453     typename T32,
25454     typename T33,
25455     typename T34,
25456     typename T35,
25457     typename T36,
25458     typename T37,
25459     typename T38,
25460     typename T39,
25461     typename T40,
25462     typename T41,
25463     typename T42,
25464     typename T43,
25465     typename T44,
25466     typename T45,
25467     typename T46,
25468     typename T47,
25469     typename T48,
25470     typename T49,
25471     typename T50>
25472 struct functionImplementation_<
25473     T0,
25474     T1,
25475     T2,
25476     T3,
25477     T4,
25478     T5,
25479     T6,
25480     T7,
25481     T8,
25482     T9,
25483     T10,
25484     T11,
25485     T12,
25486     T13,
25487     T14,
25488     T15,
25489     T16,
25490     T17,
25491     T18,
25492     T19,
25493     T20,
25494     T21,
25495     T22,
25496     T23,
25497     T24,
25498     T25,
25499     T26,
25500     T27,
25501     T28,
25502     T29,
25503     T30,
25504     T31,
25505     T32,
25506     T33,
25507     T34,
25508     T35,
25509     T36,
25510     T37,
25511     T38,
25512     T39,
25513     T40,
25514     T41,
25515     T42,
25516     T43,
25517     T44,
25518     T45,
25519     T46,
25520     T47,
25521     T48,
25522     T49,
25523     T50,
25524     NullType,
25525     NullType,
25526     NullType,
25527     NullType,
25528     NullType,
25529     NullType,
25530     NullType,
25531     NullType,
25532     NullType,
25533     NullType,
25534     NullType,
25535     NullType,
25536     NullType,
25537     NullType,
25538     NullType,
25539     NullType,
25540     NullType,
25541     NullType,
25542     NullType,
25543     NullType,
25544     NullType,
25545     NullType,
25546     NullType,
25547     NullType,
25548     NullType,
25549     NullType,
25550     NullType,
25551     NullType,
25552     NullType,
25553     NullType,
25554     NullType,
25555     NullType,
25556     NullType,
25557     NullType,
25558     NullType,
25559     NullType,
25560     NullType,
25561     NullType,
25562     NullType,
25563     NullType,
25564     NullType,
25565     NullType,
25566     NullType,
25567     NullType,
25568     NullType,
25569     NullType,
25570     NullType,
25571     NullType,
25572     NullType,
25573     NullType,
25574     NullType,
25575     NullType,
25576     NullType,
25577     NullType,
25578     NullType,
25579     NullType,
25580     NullType,
25581     NullType,
25582     NullType,
25583     NullType,
25584     NullType,
25585     NullType,
25586     NullType,
25587     NullType,
25588     NullType,
25589     NullType,
25590     NullType,
25591     NullType,
25592     NullType,
25593     NullType,
25594     NullType,
25595     NullType,
25596     NullType,
25597     NullType,
25598     NullType,
25599     NullType,
25600     NullType>
25601 {
25602     typedef detail::KernelFunctorGlobal<
25603         T0,
25604         T1,
25605         T2,
25606         T3,
25607         T4,
25608         T5,
25609         T6,
25610         T7,
25611         T8,
25612         T9,
25613         T10,
25614         T11,
25615         T12,
25616         T13,
25617         T14,
25618         T15,
25619         T16,
25620         T17,
25621         T18,
25622         T19,
25623         T20,
25624         T21,
25625         T22,
25626         T23,
25627         T24,
25628         T25,
25629         T26,
25630         T27,
25631         T28,
25632         T29,
25633         T30,
25634         T31,
25635         T32,
25636         T33,
25637         T34,
25638         T35,
25639         T36,
25640         T37,
25641         T38,
25642         T39,
25643         T40,
25644         T41,
25645         T42,
25646         T43,
25647         T44,
25648         T45,
25649         T46,
25650         T47,
25651         T48,
25652         T49,
25653         T50,
25654         NullType,
25655         NullType,
25656         NullType,
25657         NullType,
25658         NullType,
25659         NullType,
25660         NullType,
25661         NullType,
25662         NullType,
25663         NullType,
25664         NullType,
25665         NullType,
25666         NullType,
25667         NullType,
25668         NullType,
25669         NullType,
25670         NullType,
25671         NullType,
25672         NullType,
25673         NullType,
25674         NullType,
25675         NullType,
25676         NullType,
25677         NullType,
25678         NullType,
25679         NullType,
25680         NullType,
25681         NullType,
25682         NullType,
25683         NullType,
25684         NullType,
25685         NullType,
25686         NullType,
25687         NullType,
25688         NullType,
25689         NullType,
25690         NullType,
25691         NullType,
25692         NullType,
25693         NullType,
25694         NullType,
25695         NullType,
25696         NullType,
25697         NullType,
25698         NullType,
25699         NullType,
25700         NullType,
25701         NullType,
25702         NullType,
25703         NullType,
25704         NullType,
25705         NullType,
25706         NullType,
25707         NullType,
25708         NullType,
25709         NullType,
25710         NullType,
25711         NullType,
25712         NullType,
25713         NullType,
25714         NullType,
25715         NullType,
25716         NullType,
25717         NullType,
25718         NullType,
25719         NullType,
25720         NullType,
25721         NullType,
25722         NullType,
25723         NullType,
25724         NullType,
25725         NullType,
25726         NullType,
25727         NullType,
25728         NullType,
25729         NullType,
25730         NullType> FunctorType;
25731 
25732     FunctorType functor_;
25733 
25734     functionImplementation_(const FunctorType &functor) :
25735         functor_(functor)
25736     {
25737     }
25738         
25739     typedef std::tr1::function<Event (
25740         const EnqueueArgs&,
25741         T0,
25742         T1,
25743         T2,
25744         T3,
25745         T4,
25746         T5,
25747         T6,
25748         T7,
25749         T8,
25750         T9,
25751         T10,
25752         T11,
25753         T12,
25754         T13,
25755         T14,
25756         T15,
25757         T16,
25758         T17,
25759         T18,
25760         T19,
25761         T20,
25762         T21,
25763         T22,
25764         T23,
25765         T24,
25766         T25,
25767         T26,
25768         T27,
25769         T28,
25770         T29,
25771         T30,
25772         T31,
25773         T32,
25774         T33,
25775         T34,
25776         T35,
25777         T36,
25778         T37,
25779         T38,
25780         T39,
25781         T40,
25782         T41,
25783         T42,
25784         T43,
25785         T44,
25786         T45,
25787         T46,
25788         T47,
25789         T48,
25790         T49,
25791         T50)> type_;
25792 
25793     Event operator()(const EnqueueArgs& enqueueArgs,
25794         T0 arg0,
25795         T1 arg1,
25796         T2 arg2,
25797         T3 arg3,
25798         T4 arg4,
25799         T5 arg5,
25800         T6 arg6,
25801         T7 arg7,
25802         T8 arg8,
25803         T9 arg9,
25804         T10 arg10,
25805         T11 arg11,
25806         T12 arg12,
25807         T13 arg13,
25808         T14 arg14,
25809         T15 arg15,
25810         T16 arg16,
25811         T17 arg17,
25812         T18 arg18,
25813         T19 arg19,
25814         T20 arg20,
25815         T21 arg21,
25816         T22 arg22,
25817         T23 arg23,
25818         T24 arg24,
25819         T25 arg25,
25820         T26 arg26,
25821         T27 arg27,
25822         T28 arg28,
25823         T29 arg29,
25824         T30 arg30,
25825         T31 arg31,
25826         T32 arg32,
25827         T33 arg33,
25828         T34 arg34,
25829         T35 arg35,
25830         T36 arg36,
25831         T37 arg37,
25832         T38 arg38,
25833         T39 arg39,
25834         T40 arg40,
25835         T41 arg41,
25836         T42 arg42,
25837         T43 arg43,
25838         T44 arg44,
25839         T45 arg45,
25840         T46 arg46,
25841         T47 arg47,
25842         T48 arg48,
25843         T49 arg49,
25844         T50 arg50)
25845     {
25846         return functor_(
25847             enqueueArgs,
25848             arg0,
25849             arg1,
25850             arg2,
25851             arg3,
25852             arg4,
25853             arg5,
25854             arg6,
25855             arg7,
25856             arg8,
25857             arg9,
25858             arg10,
25859             arg11,
25860             arg12,
25861             arg13,
25862             arg14,
25863             arg15,
25864             arg16,
25865             arg17,
25866             arg18,
25867             arg19,
25868             arg20,
25869             arg21,
25870             arg22,
25871             arg23,
25872             arg24,
25873             arg25,
25874             arg26,
25875             arg27,
25876             arg28,
25877             arg29,
25878             arg30,
25879             arg31,
25880             arg32,
25881             arg33,
25882             arg34,
25883             arg35,
25884             arg36,
25885             arg37,
25886             arg38,
25887             arg39,
25888             arg40,
25889             arg41,
25890             arg42,
25891             arg43,
25892             arg44,
25893             arg45,
25894             arg46,
25895             arg47,
25896             arg48,
25897             arg49,
25898             arg50);
25899     }
25900 
25901     operator type_ ()    
25902     {
25903         return type_(*this);
25904     }
25905 
25906 };
25907 
25908 template<
25909     typename T0,
25910     typename T1,
25911     typename T2,
25912     typename T3,
25913     typename T4,
25914     typename T5,
25915     typename T6,
25916     typename T7,
25917     typename T8,
25918     typename T9,
25919     typename T10,
25920     typename T11,
25921     typename T12,
25922     typename T13,
25923     typename T14,
25924     typename T15,
25925     typename T16,
25926     typename T17,
25927     typename T18,
25928     typename T19,
25929     typename T20,
25930     typename T21,
25931     typename T22,
25932     typename T23,
25933     typename T24,
25934     typename T25,
25935     typename T26,
25936     typename T27,
25937     typename T28,
25938     typename T29,
25939     typename T30,
25940     typename T31,
25941     typename T32,
25942     typename T33,
25943     typename T34,
25944     typename T35,
25945     typename T36,
25946     typename T37,
25947     typename T38,
25948     typename T39,
25949     typename T40,
25950     typename T41,
25951     typename T42,
25952     typename T43,
25953     typename T44,
25954     typename T45,
25955     typename T46,
25956     typename T47,
25957     typename T48,
25958     typename T49,
25959     typename T50,
25960     typename T51>
25961 struct functionImplementation_<
25962     T0,
25963     T1,
25964     T2,
25965     T3,
25966     T4,
25967     T5,
25968     T6,
25969     T7,
25970     T8,
25971     T9,
25972     T10,
25973     T11,
25974     T12,
25975     T13,
25976     T14,
25977     T15,
25978     T16,
25979     T17,
25980     T18,
25981     T19,
25982     T20,
25983     T21,
25984     T22,
25985     T23,
25986     T24,
25987     T25,
25988     T26,
25989     T27,
25990     T28,
25991     T29,
25992     T30,
25993     T31,
25994     T32,
25995     T33,
25996     T34,
25997     T35,
25998     T36,
25999     T37,
26000     T38,
26001     T39,
26002     T40,
26003     T41,
26004     T42,
26005     T43,
26006     T44,
26007     T45,
26008     T46,
26009     T47,
26010     T48,
26011     T49,
26012     T50,
26013     T51,
26014     NullType,
26015     NullType,
26016     NullType,
26017     NullType,
26018     NullType,
26019     NullType,
26020     NullType,
26021     NullType,
26022     NullType,
26023     NullType,
26024     NullType,
26025     NullType,
26026     NullType,
26027     NullType,
26028     NullType,
26029     NullType,
26030     NullType,
26031     NullType,
26032     NullType,
26033     NullType,
26034     NullType,
26035     NullType,
26036     NullType,
26037     NullType,
26038     NullType,
26039     NullType,
26040     NullType,
26041     NullType,
26042     NullType,
26043     NullType,
26044     NullType,
26045     NullType,
26046     NullType,
26047     NullType,
26048     NullType,
26049     NullType,
26050     NullType,
26051     NullType,
26052     NullType,
26053     NullType,
26054     NullType,
26055     NullType,
26056     NullType,
26057     NullType,
26058     NullType,
26059     NullType,
26060     NullType,
26061     NullType,
26062     NullType,
26063     NullType,
26064     NullType,
26065     NullType,
26066     NullType,
26067     NullType,
26068     NullType,
26069     NullType,
26070     NullType,
26071     NullType,
26072     NullType,
26073     NullType,
26074     NullType,
26075     NullType,
26076     NullType,
26077     NullType,
26078     NullType,
26079     NullType,
26080     NullType,
26081     NullType,
26082     NullType,
26083     NullType,
26084     NullType,
26085     NullType,
26086     NullType,
26087     NullType,
26088     NullType,
26089     NullType>
26090 {
26091     typedef detail::KernelFunctorGlobal<
26092         T0,
26093         T1,
26094         T2,
26095         T3,
26096         T4,
26097         T5,
26098         T6,
26099         T7,
26100         T8,
26101         T9,
26102         T10,
26103         T11,
26104         T12,
26105         T13,
26106         T14,
26107         T15,
26108         T16,
26109         T17,
26110         T18,
26111         T19,
26112         T20,
26113         T21,
26114         T22,
26115         T23,
26116         T24,
26117         T25,
26118         T26,
26119         T27,
26120         T28,
26121         T29,
26122         T30,
26123         T31,
26124         T32,
26125         T33,
26126         T34,
26127         T35,
26128         T36,
26129         T37,
26130         T38,
26131         T39,
26132         T40,
26133         T41,
26134         T42,
26135         T43,
26136         T44,
26137         T45,
26138         T46,
26139         T47,
26140         T48,
26141         T49,
26142         T50,
26143         T51,
26144         NullType,
26145         NullType,
26146         NullType,
26147         NullType,
26148         NullType,
26149         NullType,
26150         NullType,
26151         NullType,
26152         NullType,
26153         NullType,
26154         NullType,
26155         NullType,
26156         NullType,
26157         NullType,
26158         NullType,
26159         NullType,
26160         NullType,
26161         NullType,
26162         NullType,
26163         NullType,
26164         NullType,
26165         NullType,
26166         NullType,
26167         NullType,
26168         NullType,
26169         NullType,
26170         NullType,
26171         NullType,
26172         NullType,
26173         NullType,
26174         NullType,
26175         NullType,
26176         NullType,
26177         NullType,
26178         NullType,
26179         NullType,
26180         NullType,
26181         NullType,
26182         NullType,
26183         NullType,
26184         NullType,
26185         NullType,
26186         NullType,
26187         NullType,
26188         NullType,
26189         NullType,
26190         NullType,
26191         NullType,
26192         NullType,
26193         NullType,
26194         NullType,
26195         NullType,
26196         NullType,
26197         NullType,
26198         NullType,
26199         NullType,
26200         NullType,
26201         NullType,
26202         NullType,
26203         NullType,
26204         NullType,
26205         NullType,
26206         NullType,
26207         NullType,
26208         NullType,
26209         NullType,
26210         NullType,
26211         NullType,
26212         NullType,
26213         NullType,
26214         NullType,
26215         NullType,
26216         NullType,
26217         NullType,
26218         NullType,
26219         NullType> FunctorType;
26220 
26221     FunctorType functor_;
26222 
26223     functionImplementation_(const FunctorType &functor) :
26224         functor_(functor)
26225     {
26226     }
26227         
26228     typedef std::tr1::function<Event (
26229         const EnqueueArgs&,
26230         T0,
26231         T1,
26232         T2,
26233         T3,
26234         T4,
26235         T5,
26236         T6,
26237         T7,
26238         T8,
26239         T9,
26240         T10,
26241         T11,
26242         T12,
26243         T13,
26244         T14,
26245         T15,
26246         T16,
26247         T17,
26248         T18,
26249         T19,
26250         T20,
26251         T21,
26252         T22,
26253         T23,
26254         T24,
26255         T25,
26256         T26,
26257         T27,
26258         T28,
26259         T29,
26260         T30,
26261         T31,
26262         T32,
26263         T33,
26264         T34,
26265         T35,
26266         T36,
26267         T37,
26268         T38,
26269         T39,
26270         T40,
26271         T41,
26272         T42,
26273         T43,
26274         T44,
26275         T45,
26276         T46,
26277         T47,
26278         T48,
26279         T49,
26280         T50,
26281         T51)> type_;
26282 
26283     Event operator()(const EnqueueArgs& enqueueArgs,
26284         T0 arg0,
26285         T1 arg1,
26286         T2 arg2,
26287         T3 arg3,
26288         T4 arg4,
26289         T5 arg5,
26290         T6 arg6,
26291         T7 arg7,
26292         T8 arg8,
26293         T9 arg9,
26294         T10 arg10,
26295         T11 arg11,
26296         T12 arg12,
26297         T13 arg13,
26298         T14 arg14,
26299         T15 arg15,
26300         T16 arg16,
26301         T17 arg17,
26302         T18 arg18,
26303         T19 arg19,
26304         T20 arg20,
26305         T21 arg21,
26306         T22 arg22,
26307         T23 arg23,
26308         T24 arg24,
26309         T25 arg25,
26310         T26 arg26,
26311         T27 arg27,
26312         T28 arg28,
26313         T29 arg29,
26314         T30 arg30,
26315         T31 arg31,
26316         T32 arg32,
26317         T33 arg33,
26318         T34 arg34,
26319         T35 arg35,
26320         T36 arg36,
26321         T37 arg37,
26322         T38 arg38,
26323         T39 arg39,
26324         T40 arg40,
26325         T41 arg41,
26326         T42 arg42,
26327         T43 arg43,
26328         T44 arg44,
26329         T45 arg45,
26330         T46 arg46,
26331         T47 arg47,
26332         T48 arg48,
26333         T49 arg49,
26334         T50 arg50,
26335         T51 arg51)
26336     {
26337         return functor_(
26338             enqueueArgs,
26339             arg0,
26340             arg1,
26341             arg2,
26342             arg3,
26343             arg4,
26344             arg5,
26345             arg6,
26346             arg7,
26347             arg8,
26348             arg9,
26349             arg10,
26350             arg11,
26351             arg12,
26352             arg13,
26353             arg14,
26354             arg15,
26355             arg16,
26356             arg17,
26357             arg18,
26358             arg19,
26359             arg20,
26360             arg21,
26361             arg22,
26362             arg23,
26363             arg24,
26364             arg25,
26365             arg26,
26366             arg27,
26367             arg28,
26368             arg29,
26369             arg30,
26370             arg31,
26371             arg32,
26372             arg33,
26373             arg34,
26374             arg35,
26375             arg36,
26376             arg37,
26377             arg38,
26378             arg39,
26379             arg40,
26380             arg41,
26381             arg42,
26382             arg43,
26383             arg44,
26384             arg45,
26385             arg46,
26386             arg47,
26387             arg48,
26388             arg49,
26389             arg50,
26390             arg51);
26391     }
26392 
26393     operator type_ ()    
26394     {
26395         return type_(*this);
26396     }
26397 
26398 };
26399 
26400 template<
26401     typename T0,
26402     typename T1,
26403     typename T2,
26404     typename T3,
26405     typename T4,
26406     typename T5,
26407     typename T6,
26408     typename T7,
26409     typename T8,
26410     typename T9,
26411     typename T10,
26412     typename T11,
26413     typename T12,
26414     typename T13,
26415     typename T14,
26416     typename T15,
26417     typename T16,
26418     typename T17,
26419     typename T18,
26420     typename T19,
26421     typename T20,
26422     typename T21,
26423     typename T22,
26424     typename T23,
26425     typename T24,
26426     typename T25,
26427     typename T26,
26428     typename T27,
26429     typename T28,
26430     typename T29,
26431     typename T30,
26432     typename T31,
26433     typename T32,
26434     typename T33,
26435     typename T34,
26436     typename T35,
26437     typename T36,
26438     typename T37,
26439     typename T38,
26440     typename T39,
26441     typename T40,
26442     typename T41,
26443     typename T42,
26444     typename T43,
26445     typename T44,
26446     typename T45,
26447     typename T46,
26448     typename T47,
26449     typename T48,
26450     typename T49,
26451     typename T50,
26452     typename T51,
26453     typename T52>
26454 struct functionImplementation_<
26455     T0,
26456     T1,
26457     T2,
26458     T3,
26459     T4,
26460     T5,
26461     T6,
26462     T7,
26463     T8,
26464     T9,
26465     T10,
26466     T11,
26467     T12,
26468     T13,
26469     T14,
26470     T15,
26471     T16,
26472     T17,
26473     T18,
26474     T19,
26475     T20,
26476     T21,
26477     T22,
26478     T23,
26479     T24,
26480     T25,
26481     T26,
26482     T27,
26483     T28,
26484     T29,
26485     T30,
26486     T31,
26487     T32,
26488     T33,
26489     T34,
26490     T35,
26491     T36,
26492     T37,
26493     T38,
26494     T39,
26495     T40,
26496     T41,
26497     T42,
26498     T43,
26499     T44,
26500     T45,
26501     T46,
26502     T47,
26503     T48,
26504     T49,
26505     T50,
26506     T51,
26507     T52,
26508     NullType,
26509     NullType,
26510     NullType,
26511     NullType,
26512     NullType,
26513     NullType,
26514     NullType,
26515     NullType,
26516     NullType,
26517     NullType,
26518     NullType,
26519     NullType,
26520     NullType,
26521     NullType,
26522     NullType,
26523     NullType,
26524     NullType,
26525     NullType,
26526     NullType,
26527     NullType,
26528     NullType,
26529     NullType,
26530     NullType,
26531     NullType,
26532     NullType,
26533     NullType,
26534     NullType,
26535     NullType,
26536     NullType,
26537     NullType,
26538     NullType,
26539     NullType,
26540     NullType,
26541     NullType,
26542     NullType,
26543     NullType,
26544     NullType,
26545     NullType,
26546     NullType,
26547     NullType,
26548     NullType,
26549     NullType,
26550     NullType,
26551     NullType,
26552     NullType,
26553     NullType,
26554     NullType,
26555     NullType,
26556     NullType,
26557     NullType,
26558     NullType,
26559     NullType,
26560     NullType,
26561     NullType,
26562     NullType,
26563     NullType,
26564     NullType,
26565     NullType,
26566     NullType,
26567     NullType,
26568     NullType,
26569     NullType,
26570     NullType,
26571     NullType,
26572     NullType,
26573     NullType,
26574     NullType,
26575     NullType,
26576     NullType,
26577     NullType,
26578     NullType,
26579     NullType,
26580     NullType,
26581     NullType,
26582     NullType>
26583 {
26584     typedef detail::KernelFunctorGlobal<
26585         T0,
26586         T1,
26587         T2,
26588         T3,
26589         T4,
26590         T5,
26591         T6,
26592         T7,
26593         T8,
26594         T9,
26595         T10,
26596         T11,
26597         T12,
26598         T13,
26599         T14,
26600         T15,
26601         T16,
26602         T17,
26603         T18,
26604         T19,
26605         T20,
26606         T21,
26607         T22,
26608         T23,
26609         T24,
26610         T25,
26611         T26,
26612         T27,
26613         T28,
26614         T29,
26615         T30,
26616         T31,
26617         T32,
26618         T33,
26619         T34,
26620         T35,
26621         T36,
26622         T37,
26623         T38,
26624         T39,
26625         T40,
26626         T41,
26627         T42,
26628         T43,
26629         T44,
26630         T45,
26631         T46,
26632         T47,
26633         T48,
26634         T49,
26635         T50,
26636         T51,
26637         T52,
26638         NullType,
26639         NullType,
26640         NullType,
26641         NullType,
26642         NullType,
26643         NullType,
26644         NullType,
26645         NullType,
26646         NullType,
26647         NullType,
26648         NullType,
26649         NullType,
26650         NullType,
26651         NullType,
26652         NullType,
26653         NullType,
26654         NullType,
26655         NullType,
26656         NullType,
26657         NullType,
26658         NullType,
26659         NullType,
26660         NullType,
26661         NullType,
26662         NullType,
26663         NullType,
26664         NullType,
26665         NullType,
26666         NullType,
26667         NullType,
26668         NullType,
26669         NullType,
26670         NullType,
26671         NullType,
26672         NullType,
26673         NullType,
26674         NullType,
26675         NullType,
26676         NullType,
26677         NullType,
26678         NullType,
26679         NullType,
26680         NullType,
26681         NullType,
26682         NullType,
26683         NullType,
26684         NullType,
26685         NullType,
26686         NullType,
26687         NullType,
26688         NullType,
26689         NullType,
26690         NullType,
26691         NullType,
26692         NullType,
26693         NullType,
26694         NullType,
26695         NullType,
26696         NullType,
26697         NullType,
26698         NullType,
26699         NullType,
26700         NullType,
26701         NullType,
26702         NullType,
26703         NullType,
26704         NullType,
26705         NullType,
26706         NullType,
26707         NullType,
26708         NullType,
26709         NullType,
26710         NullType,
26711         NullType,
26712         NullType> FunctorType;
26713 
26714     FunctorType functor_;
26715 
26716     functionImplementation_(const FunctorType &functor) :
26717         functor_(functor)
26718     {
26719     }
26720         
26721     typedef std::tr1::function<Event (
26722         const EnqueueArgs&,
26723         T0,
26724         T1,
26725         T2,
26726         T3,
26727         T4,
26728         T5,
26729         T6,
26730         T7,
26731         T8,
26732         T9,
26733         T10,
26734         T11,
26735         T12,
26736         T13,
26737         T14,
26738         T15,
26739         T16,
26740         T17,
26741         T18,
26742         T19,
26743         T20,
26744         T21,
26745         T22,
26746         T23,
26747         T24,
26748         T25,
26749         T26,
26750         T27,
26751         T28,
26752         T29,
26753         T30,
26754         T31,
26755         T32,
26756         T33,
26757         T34,
26758         T35,
26759         T36,
26760         T37,
26761         T38,
26762         T39,
26763         T40,
26764         T41,
26765         T42,
26766         T43,
26767         T44,
26768         T45,
26769         T46,
26770         T47,
26771         T48,
26772         T49,
26773         T50,
26774         T51,
26775         T52)> type_;
26776 
26777     Event operator()(const EnqueueArgs& enqueueArgs,
26778         T0 arg0,
26779         T1 arg1,
26780         T2 arg2,
26781         T3 arg3,
26782         T4 arg4,
26783         T5 arg5,
26784         T6 arg6,
26785         T7 arg7,
26786         T8 arg8,
26787         T9 arg9,
26788         T10 arg10,
26789         T11 arg11,
26790         T12 arg12,
26791         T13 arg13,
26792         T14 arg14,
26793         T15 arg15,
26794         T16 arg16,
26795         T17 arg17,
26796         T18 arg18,
26797         T19 arg19,
26798         T20 arg20,
26799         T21 arg21,
26800         T22 arg22,
26801         T23 arg23,
26802         T24 arg24,
26803         T25 arg25,
26804         T26 arg26,
26805         T27 arg27,
26806         T28 arg28,
26807         T29 arg29,
26808         T30 arg30,
26809         T31 arg31,
26810         T32 arg32,
26811         T33 arg33,
26812         T34 arg34,
26813         T35 arg35,
26814         T36 arg36,
26815         T37 arg37,
26816         T38 arg38,
26817         T39 arg39,
26818         T40 arg40,
26819         T41 arg41,
26820         T42 arg42,
26821         T43 arg43,
26822         T44 arg44,
26823         T45 arg45,
26824         T46 arg46,
26825         T47 arg47,
26826         T48 arg48,
26827         T49 arg49,
26828         T50 arg50,
26829         T51 arg51,
26830         T52 arg52)
26831     {
26832         return functor_(
26833             enqueueArgs,
26834             arg0,
26835             arg1,
26836             arg2,
26837             arg3,
26838             arg4,
26839             arg5,
26840             arg6,
26841             arg7,
26842             arg8,
26843             arg9,
26844             arg10,
26845             arg11,
26846             arg12,
26847             arg13,
26848             arg14,
26849             arg15,
26850             arg16,
26851             arg17,
26852             arg18,
26853             arg19,
26854             arg20,
26855             arg21,
26856             arg22,
26857             arg23,
26858             arg24,
26859             arg25,
26860             arg26,
26861             arg27,
26862             arg28,
26863             arg29,
26864             arg30,
26865             arg31,
26866             arg32,
26867             arg33,
26868             arg34,
26869             arg35,
26870             arg36,
26871             arg37,
26872             arg38,
26873             arg39,
26874             arg40,
26875             arg41,
26876             arg42,
26877             arg43,
26878             arg44,
26879             arg45,
26880             arg46,
26881             arg47,
26882             arg48,
26883             arg49,
26884             arg50,
26885             arg51,
26886             arg52);
26887     }
26888 
26889     operator type_ ()    
26890     {
26891         return type_(*this);
26892     }
26893 
26894 };
26895 
26896 template<
26897     typename T0,
26898     typename T1,
26899     typename T2,
26900     typename T3,
26901     typename T4,
26902     typename T5,
26903     typename T6,
26904     typename T7,
26905     typename T8,
26906     typename T9,
26907     typename T10,
26908     typename T11,
26909     typename T12,
26910     typename T13,
26911     typename T14,
26912     typename T15,
26913     typename T16,
26914     typename T17,
26915     typename T18,
26916     typename T19,
26917     typename T20,
26918     typename T21,
26919     typename T22,
26920     typename T23,
26921     typename T24,
26922     typename T25,
26923     typename T26,
26924     typename T27,
26925     typename T28,
26926     typename T29,
26927     typename T30,
26928     typename T31,
26929     typename T32,
26930     typename T33,
26931     typename T34,
26932     typename T35,
26933     typename T36,
26934     typename T37,
26935     typename T38,
26936     typename T39,
26937     typename T40,
26938     typename T41,
26939     typename T42,
26940     typename T43,
26941     typename T44,
26942     typename T45,
26943     typename T46,
26944     typename T47,
26945     typename T48,
26946     typename T49,
26947     typename T50,
26948     typename T51,
26949     typename T52,
26950     typename T53>
26951 struct functionImplementation_<
26952     T0,
26953     T1,
26954     T2,
26955     T3,
26956     T4,
26957     T5,
26958     T6,
26959     T7,
26960     T8,
26961     T9,
26962     T10,
26963     T11,
26964     T12,
26965     T13,
26966     T14,
26967     T15,
26968     T16,
26969     T17,
26970     T18,
26971     T19,
26972     T20,
26973     T21,
26974     T22,
26975     T23,
26976     T24,
26977     T25,
26978     T26,
26979     T27,
26980     T28,
26981     T29,
26982     T30,
26983     T31,
26984     T32,
26985     T33,
26986     T34,
26987     T35,
26988     T36,
26989     T37,
26990     T38,
26991     T39,
26992     T40,
26993     T41,
26994     T42,
26995     T43,
26996     T44,
26997     T45,
26998     T46,
26999     T47,
27000     T48,
27001     T49,
27002     T50,
27003     T51,
27004     T52,
27005     T53,
27006     NullType,
27007     NullType,
27008     NullType,
27009     NullType,
27010     NullType,
27011     NullType,
27012     NullType,
27013     NullType,
27014     NullType,
27015     NullType,
27016     NullType,
27017     NullType,
27018     NullType,
27019     NullType,
27020     NullType,
27021     NullType,
27022     NullType,
27023     NullType,
27024     NullType,
27025     NullType,
27026     NullType,
27027     NullType,
27028     NullType,
27029     NullType,
27030     NullType,
27031     NullType,
27032     NullType,
27033     NullType,
27034     NullType,
27035     NullType,
27036     NullType,
27037     NullType,
27038     NullType,
27039     NullType,
27040     NullType,
27041     NullType,
27042     NullType,
27043     NullType,
27044     NullType,
27045     NullType,
27046     NullType,
27047     NullType,
27048     NullType,
27049     NullType,
27050     NullType,
27051     NullType,
27052     NullType,
27053     NullType,
27054     NullType,
27055     NullType,
27056     NullType,
27057     NullType,
27058     NullType,
27059     NullType,
27060     NullType,
27061     NullType,
27062     NullType,
27063     NullType,
27064     NullType,
27065     NullType,
27066     NullType,
27067     NullType,
27068     NullType,
27069     NullType,
27070     NullType,
27071     NullType,
27072     NullType,
27073     NullType,
27074     NullType,
27075     NullType,
27076     NullType,
27077     NullType,
27078     NullType,
27079     NullType>
27080 {
27081     typedef detail::KernelFunctorGlobal<
27082         T0,
27083         T1,
27084         T2,
27085         T3,
27086         T4,
27087         T5,
27088         T6,
27089         T7,
27090         T8,
27091         T9,
27092         T10,
27093         T11,
27094         T12,
27095         T13,
27096         T14,
27097         T15,
27098         T16,
27099         T17,
27100         T18,
27101         T19,
27102         T20,
27103         T21,
27104         T22,
27105         T23,
27106         T24,
27107         T25,
27108         T26,
27109         T27,
27110         T28,
27111         T29,
27112         T30,
27113         T31,
27114         T32,
27115         T33,
27116         T34,
27117         T35,
27118         T36,
27119         T37,
27120         T38,
27121         T39,
27122         T40,
27123         T41,
27124         T42,
27125         T43,
27126         T44,
27127         T45,
27128         T46,
27129         T47,
27130         T48,
27131         T49,
27132         T50,
27133         T51,
27134         T52,
27135         T53,
27136         NullType,
27137         NullType,
27138         NullType,
27139         NullType,
27140         NullType,
27141         NullType,
27142         NullType,
27143         NullType,
27144         NullType,
27145         NullType,
27146         NullType,
27147         NullType,
27148         NullType,
27149         NullType,
27150         NullType,
27151         NullType,
27152         NullType,
27153         NullType,
27154         NullType,
27155         NullType,
27156         NullType,
27157         NullType,
27158         NullType,
27159         NullType,
27160         NullType,
27161         NullType,
27162         NullType,
27163         NullType,
27164         NullType,
27165         NullType,
27166         NullType,
27167         NullType,
27168         NullType,
27169         NullType,
27170         NullType,
27171         NullType,
27172         NullType,
27173         NullType,
27174         NullType,
27175         NullType,
27176         NullType,
27177         NullType,
27178         NullType,
27179         NullType,
27180         NullType,
27181         NullType,
27182         NullType,
27183         NullType,
27184         NullType,
27185         NullType,
27186         NullType,
27187         NullType,
27188         NullType,
27189         NullType,
27190         NullType,
27191         NullType,
27192         NullType,
27193         NullType,
27194         NullType,
27195         NullType,
27196         NullType,
27197         NullType,
27198         NullType,
27199         NullType,
27200         NullType,
27201         NullType,
27202         NullType,
27203         NullType,
27204         NullType,
27205         NullType,
27206         NullType,
27207         NullType,
27208         NullType,
27209         NullType> FunctorType;
27210 
27211     FunctorType functor_;
27212 
27213     functionImplementation_(const FunctorType &functor) :
27214         functor_(functor)
27215     {
27216     }
27217         
27218     typedef std::tr1::function<Event (
27219         const EnqueueArgs&,
27220         T0,
27221         T1,
27222         T2,
27223         T3,
27224         T4,
27225         T5,
27226         T6,
27227         T7,
27228         T8,
27229         T9,
27230         T10,
27231         T11,
27232         T12,
27233         T13,
27234         T14,
27235         T15,
27236         T16,
27237         T17,
27238         T18,
27239         T19,
27240         T20,
27241         T21,
27242         T22,
27243         T23,
27244         T24,
27245         T25,
27246         T26,
27247         T27,
27248         T28,
27249         T29,
27250         T30,
27251         T31,
27252         T32,
27253         T33,
27254         T34,
27255         T35,
27256         T36,
27257         T37,
27258         T38,
27259         T39,
27260         T40,
27261         T41,
27262         T42,
27263         T43,
27264         T44,
27265         T45,
27266         T46,
27267         T47,
27268         T48,
27269         T49,
27270         T50,
27271         T51,
27272         T52,
27273         T53)> type_;
27274 
27275     Event operator()(const EnqueueArgs& enqueueArgs,
27276         T0 arg0,
27277         T1 arg1,
27278         T2 arg2,
27279         T3 arg3,
27280         T4 arg4,
27281         T5 arg5,
27282         T6 arg6,
27283         T7 arg7,
27284         T8 arg8,
27285         T9 arg9,
27286         T10 arg10,
27287         T11 arg11,
27288         T12 arg12,
27289         T13 arg13,
27290         T14 arg14,
27291         T15 arg15,
27292         T16 arg16,
27293         T17 arg17,
27294         T18 arg18,
27295         T19 arg19,
27296         T20 arg20,
27297         T21 arg21,
27298         T22 arg22,
27299         T23 arg23,
27300         T24 arg24,
27301         T25 arg25,
27302         T26 arg26,
27303         T27 arg27,
27304         T28 arg28,
27305         T29 arg29,
27306         T30 arg30,
27307         T31 arg31,
27308         T32 arg32,
27309         T33 arg33,
27310         T34 arg34,
27311         T35 arg35,
27312         T36 arg36,
27313         T37 arg37,
27314         T38 arg38,
27315         T39 arg39,
27316         T40 arg40,
27317         T41 arg41,
27318         T42 arg42,
27319         T43 arg43,
27320         T44 arg44,
27321         T45 arg45,
27322         T46 arg46,
27323         T47 arg47,
27324         T48 arg48,
27325         T49 arg49,
27326         T50 arg50,
27327         T51 arg51,
27328         T52 arg52,
27329         T53 arg53)
27330     {
27331         return functor_(
27332             enqueueArgs,
27333             arg0,
27334             arg1,
27335             arg2,
27336             arg3,
27337             arg4,
27338             arg5,
27339             arg6,
27340             arg7,
27341             arg8,
27342             arg9,
27343             arg10,
27344             arg11,
27345             arg12,
27346             arg13,
27347             arg14,
27348             arg15,
27349             arg16,
27350             arg17,
27351             arg18,
27352             arg19,
27353             arg20,
27354             arg21,
27355             arg22,
27356             arg23,
27357             arg24,
27358             arg25,
27359             arg26,
27360             arg27,
27361             arg28,
27362             arg29,
27363             arg30,
27364             arg31,
27365             arg32,
27366             arg33,
27367             arg34,
27368             arg35,
27369             arg36,
27370             arg37,
27371             arg38,
27372             arg39,
27373             arg40,
27374             arg41,
27375             arg42,
27376             arg43,
27377             arg44,
27378             arg45,
27379             arg46,
27380             arg47,
27381             arg48,
27382             arg49,
27383             arg50,
27384             arg51,
27385             arg52,
27386             arg53);
27387     }
27388 
27389     operator type_ ()    
27390     {
27391         return type_(*this);
27392     }
27393 
27394 };
27395 
27396 template<
27397     typename T0,
27398     typename T1,
27399     typename T2,
27400     typename T3,
27401     typename T4,
27402     typename T5,
27403     typename T6,
27404     typename T7,
27405     typename T8,
27406     typename T9,
27407     typename T10,
27408     typename T11,
27409     typename T12,
27410     typename T13,
27411     typename T14,
27412     typename T15,
27413     typename T16,
27414     typename T17,
27415     typename T18,
27416     typename T19,
27417     typename T20,
27418     typename T21,
27419     typename T22,
27420     typename T23,
27421     typename T24,
27422     typename T25,
27423     typename T26,
27424     typename T27,
27425     typename T28,
27426     typename T29,
27427     typename T30,
27428     typename T31,
27429     typename T32,
27430     typename T33,
27431     typename T34,
27432     typename T35,
27433     typename T36,
27434     typename T37,
27435     typename T38,
27436     typename T39,
27437     typename T40,
27438     typename T41,
27439     typename T42,
27440     typename T43,
27441     typename T44,
27442     typename T45,
27443     typename T46,
27444     typename T47,
27445     typename T48,
27446     typename T49,
27447     typename T50,
27448     typename T51,
27449     typename T52,
27450     typename T53,
27451     typename T54>
27452 struct functionImplementation_<
27453     T0,
27454     T1,
27455     T2,
27456     T3,
27457     T4,
27458     T5,
27459     T6,
27460     T7,
27461     T8,
27462     T9,
27463     T10,
27464     T11,
27465     T12,
27466     T13,
27467     T14,
27468     T15,
27469     T16,
27470     T17,
27471     T18,
27472     T19,
27473     T20,
27474     T21,
27475     T22,
27476     T23,
27477     T24,
27478     T25,
27479     T26,
27480     T27,
27481     T28,
27482     T29,
27483     T30,
27484     T31,
27485     T32,
27486     T33,
27487     T34,
27488     T35,
27489     T36,
27490     T37,
27491     T38,
27492     T39,
27493     T40,
27494     T41,
27495     T42,
27496     T43,
27497     T44,
27498     T45,
27499     T46,
27500     T47,
27501     T48,
27502     T49,
27503     T50,
27504     T51,
27505     T52,
27506     T53,
27507     T54,
27508     NullType,
27509     NullType,
27510     NullType,
27511     NullType,
27512     NullType,
27513     NullType,
27514     NullType,
27515     NullType,
27516     NullType,
27517     NullType,
27518     NullType,
27519     NullType,
27520     NullType,
27521     NullType,
27522     NullType,
27523     NullType,
27524     NullType,
27525     NullType,
27526     NullType,
27527     NullType,
27528     NullType,
27529     NullType,
27530     NullType,
27531     NullType,
27532     NullType,
27533     NullType,
27534     NullType,
27535     NullType,
27536     NullType,
27537     NullType,
27538     NullType,
27539     NullType,
27540     NullType,
27541     NullType,
27542     NullType,
27543     NullType,
27544     NullType,
27545     NullType,
27546     NullType,
27547     NullType,
27548     NullType,
27549     NullType,
27550     NullType,
27551     NullType,
27552     NullType,
27553     NullType,
27554     NullType,
27555     NullType,
27556     NullType,
27557     NullType,
27558     NullType,
27559     NullType,
27560     NullType,
27561     NullType,
27562     NullType,
27563     NullType,
27564     NullType,
27565     NullType,
27566     NullType,
27567     NullType,
27568     NullType,
27569     NullType,
27570     NullType,
27571     NullType,
27572     NullType,
27573     NullType,
27574     NullType,
27575     NullType,
27576     NullType,
27577     NullType,
27578     NullType,
27579     NullType,
27580     NullType>
27581 {
27582     typedef detail::KernelFunctorGlobal<
27583         T0,
27584         T1,
27585         T2,
27586         T3,
27587         T4,
27588         T5,
27589         T6,
27590         T7,
27591         T8,
27592         T9,
27593         T10,
27594         T11,
27595         T12,
27596         T13,
27597         T14,
27598         T15,
27599         T16,
27600         T17,
27601         T18,
27602         T19,
27603         T20,
27604         T21,
27605         T22,
27606         T23,
27607         T24,
27608         T25,
27609         T26,
27610         T27,
27611         T28,
27612         T29,
27613         T30,
27614         T31,
27615         T32,
27616         T33,
27617         T34,
27618         T35,
27619         T36,
27620         T37,
27621         T38,
27622         T39,
27623         T40,
27624         T41,
27625         T42,
27626         T43,
27627         T44,
27628         T45,
27629         T46,
27630         T47,
27631         T48,
27632         T49,
27633         T50,
27634         T51,
27635         T52,
27636         T53,
27637         T54,
27638         NullType,
27639         NullType,
27640         NullType,
27641         NullType,
27642         NullType,
27643         NullType,
27644         NullType,
27645         NullType,
27646         NullType,
27647         NullType,
27648         NullType,
27649         NullType,
27650         NullType,
27651         NullType,
27652         NullType,
27653         NullType,
27654         NullType,
27655         NullType,
27656         NullType,
27657         NullType,
27658         NullType,
27659         NullType,
27660         NullType,
27661         NullType,
27662         NullType,
27663         NullType,
27664         NullType,
27665         NullType,
27666         NullType,
27667         NullType,
27668         NullType,
27669         NullType,
27670         NullType,
27671         NullType,
27672         NullType,
27673         NullType,
27674         NullType,
27675         NullType,
27676         NullType,
27677         NullType,
27678         NullType,
27679         NullType,
27680         NullType,
27681         NullType,
27682         NullType,
27683         NullType,
27684         NullType,
27685         NullType,
27686         NullType,
27687         NullType,
27688         NullType,
27689         NullType,
27690         NullType,
27691         NullType,
27692         NullType,
27693         NullType,
27694         NullType,
27695         NullType,
27696         NullType,
27697         NullType,
27698         NullType,
27699         NullType,
27700         NullType,
27701         NullType,
27702         NullType,
27703         NullType,
27704         NullType,
27705         NullType,
27706         NullType,
27707         NullType,
27708         NullType,
27709         NullType,
27710         NullType> FunctorType;
27711 
27712     FunctorType functor_;
27713 
27714     functionImplementation_(const FunctorType &functor) :
27715         functor_(functor)
27716     {
27717     }
27718         
27719     typedef std::tr1::function<Event (
27720         const EnqueueArgs&,
27721         T0,
27722         T1,
27723         T2,
27724         T3,
27725         T4,
27726         T5,
27727         T6,
27728         T7,
27729         T8,
27730         T9,
27731         T10,
27732         T11,
27733         T12,
27734         T13,
27735         T14,
27736         T15,
27737         T16,
27738         T17,
27739         T18,
27740         T19,
27741         T20,
27742         T21,
27743         T22,
27744         T23,
27745         T24,
27746         T25,
27747         T26,
27748         T27,
27749         T28,
27750         T29,
27751         T30,
27752         T31,
27753         T32,
27754         T33,
27755         T34,
27756         T35,
27757         T36,
27758         T37,
27759         T38,
27760         T39,
27761         T40,
27762         T41,
27763         T42,
27764         T43,
27765         T44,
27766         T45,
27767         T46,
27768         T47,
27769         T48,
27770         T49,
27771         T50,
27772         T51,
27773         T52,
27774         T53,
27775         T54)> type_;
27776 
27777     Event operator()(const EnqueueArgs& enqueueArgs,
27778         T0 arg0,
27779         T1 arg1,
27780         T2 arg2,
27781         T3 arg3,
27782         T4 arg4,
27783         T5 arg5,
27784         T6 arg6,
27785         T7 arg7,
27786         T8 arg8,
27787         T9 arg9,
27788         T10 arg10,
27789         T11 arg11,
27790         T12 arg12,
27791         T13 arg13,
27792         T14 arg14,
27793         T15 arg15,
27794         T16 arg16,
27795         T17 arg17,
27796         T18 arg18,
27797         T19 arg19,
27798         T20 arg20,
27799         T21 arg21,
27800         T22 arg22,
27801         T23 arg23,
27802         T24 arg24,
27803         T25 arg25,
27804         T26 arg26,
27805         T27 arg27,
27806         T28 arg28,
27807         T29 arg29,
27808         T30 arg30,
27809         T31 arg31,
27810         T32 arg32,
27811         T33 arg33,
27812         T34 arg34,
27813         T35 arg35,
27814         T36 arg36,
27815         T37 arg37,
27816         T38 arg38,
27817         T39 arg39,
27818         T40 arg40,
27819         T41 arg41,
27820         T42 arg42,
27821         T43 arg43,
27822         T44 arg44,
27823         T45 arg45,
27824         T46 arg46,
27825         T47 arg47,
27826         T48 arg48,
27827         T49 arg49,
27828         T50 arg50,
27829         T51 arg51,
27830         T52 arg52,
27831         T53 arg53,
27832         T54 arg54)
27833     {
27834         return functor_(
27835             enqueueArgs,
27836             arg0,
27837             arg1,
27838             arg2,
27839             arg3,
27840             arg4,
27841             arg5,
27842             arg6,
27843             arg7,
27844             arg8,
27845             arg9,
27846             arg10,
27847             arg11,
27848             arg12,
27849             arg13,
27850             arg14,
27851             arg15,
27852             arg16,
27853             arg17,
27854             arg18,
27855             arg19,
27856             arg20,
27857             arg21,
27858             arg22,
27859             arg23,
27860             arg24,
27861             arg25,
27862             arg26,
27863             arg27,
27864             arg28,
27865             arg29,
27866             arg30,
27867             arg31,
27868             arg32,
27869             arg33,
27870             arg34,
27871             arg35,
27872             arg36,
27873             arg37,
27874             arg38,
27875             arg39,
27876             arg40,
27877             arg41,
27878             arg42,
27879             arg43,
27880             arg44,
27881             arg45,
27882             arg46,
27883             arg47,
27884             arg48,
27885             arg49,
27886             arg50,
27887             arg51,
27888             arg52,
27889             arg53,
27890             arg54);
27891     }
27892 
27893     operator type_ ()    
27894     {
27895         return type_(*this);
27896     }
27897 
27898 };
27899 
27900 template<
27901     typename T0,
27902     typename T1,
27903     typename T2,
27904     typename T3,
27905     typename T4,
27906     typename T5,
27907     typename T6,
27908     typename T7,
27909     typename T8,
27910     typename T9,
27911     typename T10,
27912     typename T11,
27913     typename T12,
27914     typename T13,
27915     typename T14,
27916     typename T15,
27917     typename T16,
27918     typename T17,
27919     typename T18,
27920     typename T19,
27921     typename T20,
27922     typename T21,
27923     typename T22,
27924     typename T23,
27925     typename T24,
27926     typename T25,
27927     typename T26,
27928     typename T27,
27929     typename T28,
27930     typename T29,
27931     typename T30,
27932     typename T31,
27933     typename T32,
27934     typename T33,
27935     typename T34,
27936     typename T35,
27937     typename T36,
27938     typename T37,
27939     typename T38,
27940     typename T39,
27941     typename T40,
27942     typename T41,
27943     typename T42,
27944     typename T43,
27945     typename T44,
27946     typename T45,
27947     typename T46,
27948     typename T47,
27949     typename T48,
27950     typename T49,
27951     typename T50,
27952     typename T51,
27953     typename T52,
27954     typename T53,
27955     typename T54,
27956     typename T55>
27957 struct functionImplementation_<
27958     T0,
27959     T1,
27960     T2,
27961     T3,
27962     T4,
27963     T5,
27964     T6,
27965     T7,
27966     T8,
27967     T9,
27968     T10,
27969     T11,
27970     T12,
27971     T13,
27972     T14,
27973     T15,
27974     T16,
27975     T17,
27976     T18,
27977     T19,
27978     T20,
27979     T21,
27980     T22,
27981     T23,
27982     T24,
27983     T25,
27984     T26,
27985     T27,
27986     T28,
27987     T29,
27988     T30,
27989     T31,
27990     T32,
27991     T33,
27992     T34,
27993     T35,
27994     T36,
27995     T37,
27996     T38,
27997     T39,
27998     T40,
27999     T41,
28000     T42,
28001     T43,
28002     T44,
28003     T45,
28004     T46,
28005     T47,
28006     T48,
28007     T49,
28008     T50,
28009     T51,
28010     T52,
28011     T53,
28012     T54,
28013     T55,
28014     NullType,
28015     NullType,
28016     NullType,
28017     NullType,
28018     NullType,
28019     NullType,
28020     NullType,
28021     NullType,
28022     NullType,
28023     NullType,
28024     NullType,
28025     NullType,
28026     NullType,
28027     NullType,
28028     NullType,
28029     NullType,
28030     NullType,
28031     NullType,
28032     NullType,
28033     NullType,
28034     NullType,
28035     NullType,
28036     NullType,
28037     NullType,
28038     NullType,
28039     NullType,
28040     NullType,
28041     NullType,
28042     NullType,
28043     NullType,
28044     NullType,
28045     NullType,
28046     NullType,
28047     NullType,
28048     NullType,
28049     NullType,
28050     NullType,
28051     NullType,
28052     NullType,
28053     NullType,
28054     NullType,
28055     NullType,
28056     NullType,
28057     NullType,
28058     NullType,
28059     NullType,
28060     NullType,
28061     NullType,
28062     NullType,
28063     NullType,
28064     NullType,
28065     NullType,
28066     NullType,
28067     NullType,
28068     NullType,
28069     NullType,
28070     NullType,
28071     NullType,
28072     NullType,
28073     NullType,
28074     NullType,
28075     NullType,
28076     NullType,
28077     NullType,
28078     NullType,
28079     NullType,
28080     NullType,
28081     NullType,
28082     NullType,
28083     NullType,
28084     NullType,
28085     NullType>
28086 {
28087     typedef detail::KernelFunctorGlobal<
28088         T0,
28089         T1,
28090         T2,
28091         T3,
28092         T4,
28093         T5,
28094         T6,
28095         T7,
28096         T8,
28097         T9,
28098         T10,
28099         T11,
28100         T12,
28101         T13,
28102         T14,
28103         T15,
28104         T16,
28105         T17,
28106         T18,
28107         T19,
28108         T20,
28109         T21,
28110         T22,
28111         T23,
28112         T24,
28113         T25,
28114         T26,
28115         T27,
28116         T28,
28117         T29,
28118         T30,
28119         T31,
28120         T32,
28121         T33,
28122         T34,
28123         T35,
28124         T36,
28125         T37,
28126         T38,
28127         T39,
28128         T40,
28129         T41,
28130         T42,
28131         T43,
28132         T44,
28133         T45,
28134         T46,
28135         T47,
28136         T48,
28137         T49,
28138         T50,
28139         T51,
28140         T52,
28141         T53,
28142         T54,
28143         T55,
28144         NullType,
28145         NullType,
28146         NullType,
28147         NullType,
28148         NullType,
28149         NullType,
28150         NullType,
28151         NullType,
28152         NullType,
28153         NullType,
28154         NullType,
28155         NullType,
28156         NullType,
28157         NullType,
28158         NullType,
28159         NullType,
28160         NullType,
28161         NullType,
28162         NullType,
28163         NullType,
28164         NullType,
28165         NullType,
28166         NullType,
28167         NullType,
28168         NullType,
28169         NullType,
28170         NullType,
28171         NullType,
28172         NullType,
28173         NullType,
28174         NullType,
28175         NullType,
28176         NullType,
28177         NullType,
28178         NullType,
28179         NullType,
28180         NullType,
28181         NullType,
28182         NullType,
28183         NullType,
28184         NullType,
28185         NullType,
28186         NullType,
28187         NullType,
28188         NullType,
28189         NullType,
28190         NullType,
28191         NullType,
28192         NullType,
28193         NullType,
28194         NullType,
28195         NullType,
28196         NullType,
28197         NullType,
28198         NullType,
28199         NullType,
28200         NullType,
28201         NullType,
28202         NullType,
28203         NullType,
28204         NullType,
28205         NullType,
28206         NullType,
28207         NullType,
28208         NullType,
28209         NullType,
28210         NullType,
28211         NullType,
28212         NullType,
28213         NullType,
28214         NullType,
28215         NullType> FunctorType;
28216 
28217     FunctorType functor_;
28218 
28219     functionImplementation_(const FunctorType &functor) :
28220         functor_(functor)
28221     {
28222     }
28223         
28224     typedef std::tr1::function<Event (
28225         const EnqueueArgs&,
28226         T0,
28227         T1,
28228         T2,
28229         T3,
28230         T4,
28231         T5,
28232         T6,
28233         T7,
28234         T8,
28235         T9,
28236         T10,
28237         T11,
28238         T12,
28239         T13,
28240         T14,
28241         T15,
28242         T16,
28243         T17,
28244         T18,
28245         T19,
28246         T20,
28247         T21,
28248         T22,
28249         T23,
28250         T24,
28251         T25,
28252         T26,
28253         T27,
28254         T28,
28255         T29,
28256         T30,
28257         T31,
28258         T32,
28259         T33,
28260         T34,
28261         T35,
28262         T36,
28263         T37,
28264         T38,
28265         T39,
28266         T40,
28267         T41,
28268         T42,
28269         T43,
28270         T44,
28271         T45,
28272         T46,
28273         T47,
28274         T48,
28275         T49,
28276         T50,
28277         T51,
28278         T52,
28279         T53,
28280         T54,
28281         T55)> type_;
28282 
28283     Event operator()(const EnqueueArgs& enqueueArgs,
28284         T0 arg0,
28285         T1 arg1,
28286         T2 arg2,
28287         T3 arg3,
28288         T4 arg4,
28289         T5 arg5,
28290         T6 arg6,
28291         T7 arg7,
28292         T8 arg8,
28293         T9 arg9,
28294         T10 arg10,
28295         T11 arg11,
28296         T12 arg12,
28297         T13 arg13,
28298         T14 arg14,
28299         T15 arg15,
28300         T16 arg16,
28301         T17 arg17,
28302         T18 arg18,
28303         T19 arg19,
28304         T20 arg20,
28305         T21 arg21,
28306         T22 arg22,
28307         T23 arg23,
28308         T24 arg24,
28309         T25 arg25,
28310         T26 arg26,
28311         T27 arg27,
28312         T28 arg28,
28313         T29 arg29,
28314         T30 arg30,
28315         T31 arg31,
28316         T32 arg32,
28317         T33 arg33,
28318         T34 arg34,
28319         T35 arg35,
28320         T36 arg36,
28321         T37 arg37,
28322         T38 arg38,
28323         T39 arg39,
28324         T40 arg40,
28325         T41 arg41,
28326         T42 arg42,
28327         T43 arg43,
28328         T44 arg44,
28329         T45 arg45,
28330         T46 arg46,
28331         T47 arg47,
28332         T48 arg48,
28333         T49 arg49,
28334         T50 arg50,
28335         T51 arg51,
28336         T52 arg52,
28337         T53 arg53,
28338         T54 arg54,
28339         T55 arg55)
28340     {
28341         return functor_(
28342             enqueueArgs,
28343             arg0,
28344             arg1,
28345             arg2,
28346             arg3,
28347             arg4,
28348             arg5,
28349             arg6,
28350             arg7,
28351             arg8,
28352             arg9,
28353             arg10,
28354             arg11,
28355             arg12,
28356             arg13,
28357             arg14,
28358             arg15,
28359             arg16,
28360             arg17,
28361             arg18,
28362             arg19,
28363             arg20,
28364             arg21,
28365             arg22,
28366             arg23,
28367             arg24,
28368             arg25,
28369             arg26,
28370             arg27,
28371             arg28,
28372             arg29,
28373             arg30,
28374             arg31,
28375             arg32,
28376             arg33,
28377             arg34,
28378             arg35,
28379             arg36,
28380             arg37,
28381             arg38,
28382             arg39,
28383             arg40,
28384             arg41,
28385             arg42,
28386             arg43,
28387             arg44,
28388             arg45,
28389             arg46,
28390             arg47,
28391             arg48,
28392             arg49,
28393             arg50,
28394             arg51,
28395             arg52,
28396             arg53,
28397             arg54,
28398             arg55);
28399     }
28400 
28401     operator type_ ()    
28402     {
28403         return type_(*this);
28404     }
28405 
28406 };
28407 
28408 template<
28409     typename T0,
28410     typename T1,
28411     typename T2,
28412     typename T3,
28413     typename T4,
28414     typename T5,
28415     typename T6,
28416     typename T7,
28417     typename T8,
28418     typename T9,
28419     typename T10,
28420     typename T11,
28421     typename T12,
28422     typename T13,
28423     typename T14,
28424     typename T15,
28425     typename T16,
28426     typename T17,
28427     typename T18,
28428     typename T19,
28429     typename T20,
28430     typename T21,
28431     typename T22,
28432     typename T23,
28433     typename T24,
28434     typename T25,
28435     typename T26,
28436     typename T27,
28437     typename T28,
28438     typename T29,
28439     typename T30,
28440     typename T31,
28441     typename T32,
28442     typename T33,
28443     typename T34,
28444     typename T35,
28445     typename T36,
28446     typename T37,
28447     typename T38,
28448     typename T39,
28449     typename T40,
28450     typename T41,
28451     typename T42,
28452     typename T43,
28453     typename T44,
28454     typename T45,
28455     typename T46,
28456     typename T47,
28457     typename T48,
28458     typename T49,
28459     typename T50,
28460     typename T51,
28461     typename T52,
28462     typename T53,
28463     typename T54,
28464     typename T55,
28465     typename T56>
28466 struct functionImplementation_<
28467     T0,
28468     T1,
28469     T2,
28470     T3,
28471     T4,
28472     T5,
28473     T6,
28474     T7,
28475     T8,
28476     T9,
28477     T10,
28478     T11,
28479     T12,
28480     T13,
28481     T14,
28482     T15,
28483     T16,
28484     T17,
28485     T18,
28486     T19,
28487     T20,
28488     T21,
28489     T22,
28490     T23,
28491     T24,
28492     T25,
28493     T26,
28494     T27,
28495     T28,
28496     T29,
28497     T30,
28498     T31,
28499     T32,
28500     T33,
28501     T34,
28502     T35,
28503     T36,
28504     T37,
28505     T38,
28506     T39,
28507     T40,
28508     T41,
28509     T42,
28510     T43,
28511     T44,
28512     T45,
28513     T46,
28514     T47,
28515     T48,
28516     T49,
28517     T50,
28518     T51,
28519     T52,
28520     T53,
28521     T54,
28522     T55,
28523     T56,
28524     NullType,
28525     NullType,
28526     NullType,
28527     NullType,
28528     NullType,
28529     NullType,
28530     NullType,
28531     NullType,
28532     NullType,
28533     NullType,
28534     NullType,
28535     NullType,
28536     NullType,
28537     NullType,
28538     NullType,
28539     NullType,
28540     NullType,
28541     NullType,
28542     NullType,
28543     NullType,
28544     NullType,
28545     NullType,
28546     NullType,
28547     NullType,
28548     NullType,
28549     NullType,
28550     NullType,
28551     NullType,
28552     NullType,
28553     NullType,
28554     NullType,
28555     NullType,
28556     NullType,
28557     NullType,
28558     NullType,
28559     NullType,
28560     NullType,
28561     NullType,
28562     NullType,
28563     NullType,
28564     NullType,
28565     NullType,
28566     NullType,
28567     NullType,
28568     NullType,
28569     NullType,
28570     NullType,
28571     NullType,
28572     NullType,
28573     NullType,
28574     NullType,
28575     NullType,
28576     NullType,
28577     NullType,
28578     NullType,
28579     NullType,
28580     NullType,
28581     NullType,
28582     NullType,
28583     NullType,
28584     NullType,
28585     NullType,
28586     NullType,
28587     NullType,
28588     NullType,
28589     NullType,
28590     NullType,
28591     NullType,
28592     NullType,
28593     NullType,
28594     NullType>
28595 {
28596     typedef detail::KernelFunctorGlobal<
28597         T0,
28598         T1,
28599         T2,
28600         T3,
28601         T4,
28602         T5,
28603         T6,
28604         T7,
28605         T8,
28606         T9,
28607         T10,
28608         T11,
28609         T12,
28610         T13,
28611         T14,
28612         T15,
28613         T16,
28614         T17,
28615         T18,
28616         T19,
28617         T20,
28618         T21,
28619         T22,
28620         T23,
28621         T24,
28622         T25,
28623         T26,
28624         T27,
28625         T28,
28626         T29,
28627         T30,
28628         T31,
28629         T32,
28630         T33,
28631         T34,
28632         T35,
28633         T36,
28634         T37,
28635         T38,
28636         T39,
28637         T40,
28638         T41,
28639         T42,
28640         T43,
28641         T44,
28642         T45,
28643         T46,
28644         T47,
28645         T48,
28646         T49,
28647         T50,
28648         T51,
28649         T52,
28650         T53,
28651         T54,
28652         T55,
28653         T56,
28654         NullType,
28655         NullType,
28656         NullType,
28657         NullType,
28658         NullType,
28659         NullType,
28660         NullType,
28661         NullType,
28662         NullType,
28663         NullType,
28664         NullType,
28665         NullType,
28666         NullType,
28667         NullType,
28668         NullType,
28669         NullType,
28670         NullType,
28671         NullType,
28672         NullType,
28673         NullType,
28674         NullType,
28675         NullType,
28676         NullType,
28677         NullType,
28678         NullType,
28679         NullType,
28680         NullType,
28681         NullType,
28682         NullType,
28683         NullType,
28684         NullType,
28685         NullType,
28686         NullType,
28687         NullType,
28688         NullType,
28689         NullType,
28690         NullType,
28691         NullType,
28692         NullType,
28693         NullType,
28694         NullType,
28695         NullType,
28696         NullType,
28697         NullType,
28698         NullType,
28699         NullType,
28700         NullType,
28701         NullType,
28702         NullType,
28703         NullType,
28704         NullType,
28705         NullType,
28706         NullType,
28707         NullType,
28708         NullType,
28709         NullType,
28710         NullType,
28711         NullType,
28712         NullType,
28713         NullType,
28714         NullType,
28715         NullType,
28716         NullType,
28717         NullType,
28718         NullType,
28719         NullType,
28720         NullType,
28721         NullType,
28722         NullType,
28723         NullType,
28724         NullType> FunctorType;
28725 
28726     FunctorType functor_;
28727 
28728     functionImplementation_(const FunctorType &functor) :
28729         functor_(functor)
28730     {
28731     }
28732         
28733     typedef std::tr1::function<Event (
28734         const EnqueueArgs&,
28735         T0,
28736         T1,
28737         T2,
28738         T3,
28739         T4,
28740         T5,
28741         T6,
28742         T7,
28743         T8,
28744         T9,
28745         T10,
28746         T11,
28747         T12,
28748         T13,
28749         T14,
28750         T15,
28751         T16,
28752         T17,
28753         T18,
28754         T19,
28755         T20,
28756         T21,
28757         T22,
28758         T23,
28759         T24,
28760         T25,
28761         T26,
28762         T27,
28763         T28,
28764         T29,
28765         T30,
28766         T31,
28767         T32,
28768         T33,
28769         T34,
28770         T35,
28771         T36,
28772         T37,
28773         T38,
28774         T39,
28775         T40,
28776         T41,
28777         T42,
28778         T43,
28779         T44,
28780         T45,
28781         T46,
28782         T47,
28783         T48,
28784         T49,
28785         T50,
28786         T51,
28787         T52,
28788         T53,
28789         T54,
28790         T55,
28791         T56)> type_;
28792 
28793     Event operator()(const EnqueueArgs& enqueueArgs,
28794         T0 arg0,
28795         T1 arg1,
28796         T2 arg2,
28797         T3 arg3,
28798         T4 arg4,
28799         T5 arg5,
28800         T6 arg6,
28801         T7 arg7,
28802         T8 arg8,
28803         T9 arg9,
28804         T10 arg10,
28805         T11 arg11,
28806         T12 arg12,
28807         T13 arg13,
28808         T14 arg14,
28809         T15 arg15,
28810         T16 arg16,
28811         T17 arg17,
28812         T18 arg18,
28813         T19 arg19,
28814         T20 arg20,
28815         T21 arg21,
28816         T22 arg22,
28817         T23 arg23,
28818         T24 arg24,
28819         T25 arg25,
28820         T26 arg26,
28821         T27 arg27,
28822         T28 arg28,
28823         T29 arg29,
28824         T30 arg30,
28825         T31 arg31,
28826         T32 arg32,
28827         T33 arg33,
28828         T34 arg34,
28829         T35 arg35,
28830         T36 arg36,
28831         T37 arg37,
28832         T38 arg38,
28833         T39 arg39,
28834         T40 arg40,
28835         T41 arg41,
28836         T42 arg42,
28837         T43 arg43,
28838         T44 arg44,
28839         T45 arg45,
28840         T46 arg46,
28841         T47 arg47,
28842         T48 arg48,
28843         T49 arg49,
28844         T50 arg50,
28845         T51 arg51,
28846         T52 arg52,
28847         T53 arg53,
28848         T54 arg54,
28849         T55 arg55,
28850         T56 arg56)
28851     {
28852         return functor_(
28853             enqueueArgs,
28854             arg0,
28855             arg1,
28856             arg2,
28857             arg3,
28858             arg4,
28859             arg5,
28860             arg6,
28861             arg7,
28862             arg8,
28863             arg9,
28864             arg10,
28865             arg11,
28866             arg12,
28867             arg13,
28868             arg14,
28869             arg15,
28870             arg16,
28871             arg17,
28872             arg18,
28873             arg19,
28874             arg20,
28875             arg21,
28876             arg22,
28877             arg23,
28878             arg24,
28879             arg25,
28880             arg26,
28881             arg27,
28882             arg28,
28883             arg29,
28884             arg30,
28885             arg31,
28886             arg32,
28887             arg33,
28888             arg34,
28889             arg35,
28890             arg36,
28891             arg37,
28892             arg38,
28893             arg39,
28894             arg40,
28895             arg41,
28896             arg42,
28897             arg43,
28898             arg44,
28899             arg45,
28900             arg46,
28901             arg47,
28902             arg48,
28903             arg49,
28904             arg50,
28905             arg51,
28906             arg52,
28907             arg53,
28908             arg54,
28909             arg55,
28910             arg56);
28911     }
28912 
28913     operator type_ ()    
28914     {
28915         return type_(*this);
28916     }
28917 
28918 };
28919 
28920 template<
28921     typename T0,
28922     typename T1,
28923     typename T2,
28924     typename T3,
28925     typename T4,
28926     typename T5,
28927     typename T6,
28928     typename T7,
28929     typename T8,
28930     typename T9,
28931     typename T10,
28932     typename T11,
28933     typename T12,
28934     typename T13,
28935     typename T14,
28936     typename T15,
28937     typename T16,
28938     typename T17,
28939     typename T18,
28940     typename T19,
28941     typename T20,
28942     typename T21,
28943     typename T22,
28944     typename T23,
28945     typename T24,
28946     typename T25,
28947     typename T26,
28948     typename T27,
28949     typename T28,
28950     typename T29,
28951     typename T30,
28952     typename T31,
28953     typename T32,
28954     typename T33,
28955     typename T34,
28956     typename T35,
28957     typename T36,
28958     typename T37,
28959     typename T38,
28960     typename T39,
28961     typename T40,
28962     typename T41,
28963     typename T42,
28964     typename T43,
28965     typename T44,
28966     typename T45,
28967     typename T46,
28968     typename T47,
28969     typename T48,
28970     typename T49,
28971     typename T50,
28972     typename T51,
28973     typename T52,
28974     typename T53,
28975     typename T54,
28976     typename T55,
28977     typename T56,
28978     typename T57>
28979 struct functionImplementation_<
28980     T0,
28981     T1,
28982     T2,
28983     T3,
28984     T4,
28985     T5,
28986     T6,
28987     T7,
28988     T8,
28989     T9,
28990     T10,
28991     T11,
28992     T12,
28993     T13,
28994     T14,
28995     T15,
28996     T16,
28997     T17,
28998     T18,
28999     T19,
29000     T20,
29001     T21,
29002     T22,
29003     T23,
29004     T24,
29005     T25,
29006     T26,
29007     T27,
29008     T28,
29009     T29,
29010     T30,
29011     T31,
29012     T32,
29013     T33,
29014     T34,
29015     T35,
29016     T36,
29017     T37,
29018     T38,
29019     T39,
29020     T40,
29021     T41,
29022     T42,
29023     T43,
29024     T44,
29025     T45,
29026     T46,
29027     T47,
29028     T48,
29029     T49,
29030     T50,
29031     T51,
29032     T52,
29033     T53,
29034     T54,
29035     T55,
29036     T56,
29037     T57,
29038     NullType,
29039     NullType,
29040     NullType,
29041     NullType,
29042     NullType,
29043     NullType,
29044     NullType,
29045     NullType,
29046     NullType,
29047     NullType,
29048     NullType,
29049     NullType,
29050     NullType,
29051     NullType,
29052     NullType,
29053     NullType,
29054     NullType,
29055     NullType,
29056     NullType,
29057     NullType,
29058     NullType,
29059     NullType,
29060     NullType,
29061     NullType,
29062     NullType,
29063     NullType,
29064     NullType,
29065     NullType,
29066     NullType,
29067     NullType,
29068     NullType,
29069     NullType,
29070     NullType,
29071     NullType,
29072     NullType,
29073     NullType,
29074     NullType,
29075     NullType,
29076     NullType,
29077     NullType,
29078     NullType,
29079     NullType,
29080     NullType,
29081     NullType,
29082     NullType,
29083     NullType,
29084     NullType,
29085     NullType,
29086     NullType,
29087     NullType,
29088     NullType,
29089     NullType,
29090     NullType,
29091     NullType,
29092     NullType,
29093     NullType,
29094     NullType,
29095     NullType,
29096     NullType,
29097     NullType,
29098     NullType,
29099     NullType,
29100     NullType,
29101     NullType,
29102     NullType,
29103     NullType,
29104     NullType,
29105     NullType,
29106     NullType,
29107     NullType>
29108 {
29109     typedef detail::KernelFunctorGlobal<
29110         T0,
29111         T1,
29112         T2,
29113         T3,
29114         T4,
29115         T5,
29116         T6,
29117         T7,
29118         T8,
29119         T9,
29120         T10,
29121         T11,
29122         T12,
29123         T13,
29124         T14,
29125         T15,
29126         T16,
29127         T17,
29128         T18,
29129         T19,
29130         T20,
29131         T21,
29132         T22,
29133         T23,
29134         T24,
29135         T25,
29136         T26,
29137         T27,
29138         T28,
29139         T29,
29140         T30,
29141         T31,
29142         T32,
29143         T33,
29144         T34,
29145         T35,
29146         T36,
29147         T37,
29148         T38,
29149         T39,
29150         T40,
29151         T41,
29152         T42,
29153         T43,
29154         T44,
29155         T45,
29156         T46,
29157         T47,
29158         T48,
29159         T49,
29160         T50,
29161         T51,
29162         T52,
29163         T53,
29164         T54,
29165         T55,
29166         T56,
29167         T57,
29168         NullType,
29169         NullType,
29170         NullType,
29171         NullType,
29172         NullType,
29173         NullType,
29174         NullType,
29175         NullType,
29176         NullType,
29177         NullType,
29178         NullType,
29179         NullType,
29180         NullType,
29181         NullType,
29182         NullType,
29183         NullType,
29184         NullType,
29185         NullType,
29186         NullType,
29187         NullType,
29188         NullType,
29189         NullType,
29190         NullType,
29191         NullType,
29192         NullType,
29193         NullType,
29194         NullType,
29195         NullType,
29196         NullType,
29197         NullType,
29198         NullType,
29199         NullType,
29200         NullType,
29201         NullType,
29202         NullType,
29203         NullType,
29204         NullType,
29205         NullType,
29206         NullType,
29207         NullType,
29208         NullType,
29209         NullType,
29210         NullType,
29211         NullType,
29212         NullType,
29213         NullType,
29214         NullType,
29215         NullType,
29216         NullType,
29217         NullType,
29218         NullType,
29219         NullType,
29220         NullType,
29221         NullType,
29222         NullType,
29223         NullType,
29224         NullType,
29225         NullType,
29226         NullType,
29227         NullType,
29228         NullType,
29229         NullType,
29230         NullType,
29231         NullType,
29232         NullType,
29233         NullType,
29234         NullType,
29235         NullType,
29236         NullType,
29237         NullType> FunctorType;
29238 
29239     FunctorType functor_;
29240 
29241     functionImplementation_(const FunctorType &functor) :
29242         functor_(functor)
29243     {
29244     }
29245         
29246     typedef std::tr1::function<Event (
29247         const EnqueueArgs&,
29248         T0,
29249         T1,
29250         T2,
29251         T3,
29252         T4,
29253         T5,
29254         T6,
29255         T7,
29256         T8,
29257         T9,
29258         T10,
29259         T11,
29260         T12,
29261         T13,
29262         T14,
29263         T15,
29264         T16,
29265         T17,
29266         T18,
29267         T19,
29268         T20,
29269         T21,
29270         T22,
29271         T23,
29272         T24,
29273         T25,
29274         T26,
29275         T27,
29276         T28,
29277         T29,
29278         T30,
29279         T31,
29280         T32,
29281         T33,
29282         T34,
29283         T35,
29284         T36,
29285         T37,
29286         T38,
29287         T39,
29288         T40,
29289         T41,
29290         T42,
29291         T43,
29292         T44,
29293         T45,
29294         T46,
29295         T47,
29296         T48,
29297         T49,
29298         T50,
29299         T51,
29300         T52,
29301         T53,
29302         T54,
29303         T55,
29304         T56,
29305         T57)> type_;
29306 
29307     Event operator()(const EnqueueArgs& enqueueArgs,
29308         T0 arg0,
29309         T1 arg1,
29310         T2 arg2,
29311         T3 arg3,
29312         T4 arg4,
29313         T5 arg5,
29314         T6 arg6,
29315         T7 arg7,
29316         T8 arg8,
29317         T9 arg9,
29318         T10 arg10,
29319         T11 arg11,
29320         T12 arg12,
29321         T13 arg13,
29322         T14 arg14,
29323         T15 arg15,
29324         T16 arg16,
29325         T17 arg17,
29326         T18 arg18,
29327         T19 arg19,
29328         T20 arg20,
29329         T21 arg21,
29330         T22 arg22,
29331         T23 arg23,
29332         T24 arg24,
29333         T25 arg25,
29334         T26 arg26,
29335         T27 arg27,
29336         T28 arg28,
29337         T29 arg29,
29338         T30 arg30,
29339         T31 arg31,
29340         T32 arg32,
29341         T33 arg33,
29342         T34 arg34,
29343         T35 arg35,
29344         T36 arg36,
29345         T37 arg37,
29346         T38 arg38,
29347         T39 arg39,
29348         T40 arg40,
29349         T41 arg41,
29350         T42 arg42,
29351         T43 arg43,
29352         T44 arg44,
29353         T45 arg45,
29354         T46 arg46,
29355         T47 arg47,
29356         T48 arg48,
29357         T49 arg49,
29358         T50 arg50,
29359         T51 arg51,
29360         T52 arg52,
29361         T53 arg53,
29362         T54 arg54,
29363         T55 arg55,
29364         T56 arg56,
29365         T57 arg57)
29366     {
29367         return functor_(
29368             enqueueArgs,
29369             arg0,
29370             arg1,
29371             arg2,
29372             arg3,
29373             arg4,
29374             arg5,
29375             arg6,
29376             arg7,
29377             arg8,
29378             arg9,
29379             arg10,
29380             arg11,
29381             arg12,
29382             arg13,
29383             arg14,
29384             arg15,
29385             arg16,
29386             arg17,
29387             arg18,
29388             arg19,
29389             arg20,
29390             arg21,
29391             arg22,
29392             arg23,
29393             arg24,
29394             arg25,
29395             arg26,
29396             arg27,
29397             arg28,
29398             arg29,
29399             arg30,
29400             arg31,
29401             arg32,
29402             arg33,
29403             arg34,
29404             arg35,
29405             arg36,
29406             arg37,
29407             arg38,
29408             arg39,
29409             arg40,
29410             arg41,
29411             arg42,
29412             arg43,
29413             arg44,
29414             arg45,
29415             arg46,
29416             arg47,
29417             arg48,
29418             arg49,
29419             arg50,
29420             arg51,
29421             arg52,
29422             arg53,
29423             arg54,
29424             arg55,
29425             arg56,
29426             arg57);
29427     }
29428 
29429     operator type_ ()    
29430     {
29431         return type_(*this);
29432     }
29433 
29434 };
29435 
29436 template<
29437     typename T0,
29438     typename T1,
29439     typename T2,
29440     typename T3,
29441     typename T4,
29442     typename T5,
29443     typename T6,
29444     typename T7,
29445     typename T8,
29446     typename T9,
29447     typename T10,
29448     typename T11,
29449     typename T12,
29450     typename T13,
29451     typename T14,
29452     typename T15,
29453     typename T16,
29454     typename T17,
29455     typename T18,
29456     typename T19,
29457     typename T20,
29458     typename T21,
29459     typename T22,
29460     typename T23,
29461     typename T24,
29462     typename T25,
29463     typename T26,
29464     typename T27,
29465     typename T28,
29466     typename T29,
29467     typename T30,
29468     typename T31,
29469     typename T32,
29470     typename T33,
29471     typename T34,
29472     typename T35,
29473     typename T36,
29474     typename T37,
29475     typename T38,
29476     typename T39,
29477     typename T40,
29478     typename T41,
29479     typename T42,
29480     typename T43,
29481     typename T44,
29482     typename T45,
29483     typename T46,
29484     typename T47,
29485     typename T48,
29486     typename T49,
29487     typename T50,
29488     typename T51,
29489     typename T52,
29490     typename T53,
29491     typename T54,
29492     typename T55,
29493     typename T56,
29494     typename T57,
29495     typename T58>
29496 struct functionImplementation_<
29497     T0,
29498     T1,
29499     T2,
29500     T3,
29501     T4,
29502     T5,
29503     T6,
29504     T7,
29505     T8,
29506     T9,
29507     T10,
29508     T11,
29509     T12,
29510     T13,
29511     T14,
29512     T15,
29513     T16,
29514     T17,
29515     T18,
29516     T19,
29517     T20,
29518     T21,
29519     T22,
29520     T23,
29521     T24,
29522     T25,
29523     T26,
29524     T27,
29525     T28,
29526     T29,
29527     T30,
29528     T31,
29529     T32,
29530     T33,
29531     T34,
29532     T35,
29533     T36,
29534     T37,
29535     T38,
29536     T39,
29537     T40,
29538     T41,
29539     T42,
29540     T43,
29541     T44,
29542     T45,
29543     T46,
29544     T47,
29545     T48,
29546     T49,
29547     T50,
29548     T51,
29549     T52,
29550     T53,
29551     T54,
29552     T55,
29553     T56,
29554     T57,
29555     T58,
29556     NullType,
29557     NullType,
29558     NullType,
29559     NullType,
29560     NullType,
29561     NullType,
29562     NullType,
29563     NullType,
29564     NullType,
29565     NullType,
29566     NullType,
29567     NullType,
29568     NullType,
29569     NullType,
29570     NullType,
29571     NullType,
29572     NullType,
29573     NullType,
29574     NullType,
29575     NullType,
29576     NullType,
29577     NullType,
29578     NullType,
29579     NullType,
29580     NullType,
29581     NullType,
29582     NullType,
29583     NullType,
29584     NullType,
29585     NullType,
29586     NullType,
29587     NullType,
29588     NullType,
29589     NullType,
29590     NullType,
29591     NullType,
29592     NullType,
29593     NullType,
29594     NullType,
29595     NullType,
29596     NullType,
29597     NullType,
29598     NullType,
29599     NullType,
29600     NullType,
29601     NullType,
29602     NullType,
29603     NullType,
29604     NullType,
29605     NullType,
29606     NullType,
29607     NullType,
29608     NullType,
29609     NullType,
29610     NullType,
29611     NullType,
29612     NullType,
29613     NullType,
29614     NullType,
29615     NullType,
29616     NullType,
29617     NullType,
29618     NullType,
29619     NullType,
29620     NullType,
29621     NullType,
29622     NullType,
29623     NullType,
29624     NullType>
29625 {
29626     typedef detail::KernelFunctorGlobal<
29627         T0,
29628         T1,
29629         T2,
29630         T3,
29631         T4,
29632         T5,
29633         T6,
29634         T7,
29635         T8,
29636         T9,
29637         T10,
29638         T11,
29639         T12,
29640         T13,
29641         T14,
29642         T15,
29643         T16,
29644         T17,
29645         T18,
29646         T19,
29647         T20,
29648         T21,
29649         T22,
29650         T23,
29651         T24,
29652         T25,
29653         T26,
29654         T27,
29655         T28,
29656         T29,
29657         T30,
29658         T31,
29659         T32,
29660         T33,
29661         T34,
29662         T35,
29663         T36,
29664         T37,
29665         T38,
29666         T39,
29667         T40,
29668         T41,
29669         T42,
29670         T43,
29671         T44,
29672         T45,
29673         T46,
29674         T47,
29675         T48,
29676         T49,
29677         T50,
29678         T51,
29679         T52,
29680         T53,
29681         T54,
29682         T55,
29683         T56,
29684         T57,
29685         T58,
29686         NullType,
29687         NullType,
29688         NullType,
29689         NullType,
29690         NullType,
29691         NullType,
29692         NullType,
29693         NullType,
29694         NullType,
29695         NullType,
29696         NullType,
29697         NullType,
29698         NullType,
29699         NullType,
29700         NullType,
29701         NullType,
29702         NullType,
29703         NullType,
29704         NullType,
29705         NullType,
29706         NullType,
29707         NullType,
29708         NullType,
29709         NullType,
29710         NullType,
29711         NullType,
29712         NullType,
29713         NullType,
29714         NullType,
29715         NullType,
29716         NullType,
29717         NullType,
29718         NullType,
29719         NullType,
29720         NullType,
29721         NullType,
29722         NullType,
29723         NullType,
29724         NullType,
29725         NullType,
29726         NullType,
29727         NullType,
29728         NullType,
29729         NullType,
29730         NullType,
29731         NullType,
29732         NullType,
29733         NullType,
29734         NullType,
29735         NullType,
29736         NullType,
29737         NullType,
29738         NullType,
29739         NullType,
29740         NullType,
29741         NullType,
29742         NullType,
29743         NullType,
29744         NullType,
29745         NullType,
29746         NullType,
29747         NullType,
29748         NullType,
29749         NullType,
29750         NullType,
29751         NullType,
29752         NullType,
29753         NullType,
29754         NullType> FunctorType;
29755 
29756     FunctorType functor_;
29757 
29758     functionImplementation_(const FunctorType &functor) :
29759         functor_(functor)
29760     {
29761     }
29762         
29763     typedef std::tr1::function<Event (
29764         const EnqueueArgs&,
29765         T0,
29766         T1,
29767         T2,
29768         T3,
29769         T4,
29770         T5,
29771         T6,
29772         T7,
29773         T8,
29774         T9,
29775         T10,
29776         T11,
29777         T12,
29778         T13,
29779         T14,
29780         T15,
29781         T16,
29782         T17,
29783         T18,
29784         T19,
29785         T20,
29786         T21,
29787         T22,
29788         T23,
29789         T24,
29790         T25,
29791         T26,
29792         T27,
29793         T28,
29794         T29,
29795         T30,
29796         T31,
29797         T32,
29798         T33,
29799         T34,
29800         T35,
29801         T36,
29802         T37,
29803         T38,
29804         T39,
29805         T40,
29806         T41,
29807         T42,
29808         T43,
29809         T44,
29810         T45,
29811         T46,
29812         T47,
29813         T48,
29814         T49,
29815         T50,
29816         T51,
29817         T52,
29818         T53,
29819         T54,
29820         T55,
29821         T56,
29822         T57,
29823         T58)> type_;
29824 
29825     Event operator()(const EnqueueArgs& enqueueArgs,
29826         T0 arg0,
29827         T1 arg1,
29828         T2 arg2,
29829         T3 arg3,
29830         T4 arg4,
29831         T5 arg5,
29832         T6 arg6,
29833         T7 arg7,
29834         T8 arg8,
29835         T9 arg9,
29836         T10 arg10,
29837         T11 arg11,
29838         T12 arg12,
29839         T13 arg13,
29840         T14 arg14,
29841         T15 arg15,
29842         T16 arg16,
29843         T17 arg17,
29844         T18 arg18,
29845         T19 arg19,
29846         T20 arg20,
29847         T21 arg21,
29848         T22 arg22,
29849         T23 arg23,
29850         T24 arg24,
29851         T25 arg25,
29852         T26 arg26,
29853         T27 arg27,
29854         T28 arg28,
29855         T29 arg29,
29856         T30 arg30,
29857         T31 arg31,
29858         T32 arg32,
29859         T33 arg33,
29860         T34 arg34,
29861         T35 arg35,
29862         T36 arg36,
29863         T37 arg37,
29864         T38 arg38,
29865         T39 arg39,
29866         T40 arg40,
29867         T41 arg41,
29868         T42 arg42,
29869         T43 arg43,
29870         T44 arg44,
29871         T45 arg45,
29872         T46 arg46,
29873         T47 arg47,
29874         T48 arg48,
29875         T49 arg49,
29876         T50 arg50,
29877         T51 arg51,
29878         T52 arg52,
29879         T53 arg53,
29880         T54 arg54,
29881         T55 arg55,
29882         T56 arg56,
29883         T57 arg57,
29884         T58 arg58)
29885     {
29886         return functor_(
29887             enqueueArgs,
29888             arg0,
29889             arg1,
29890             arg2,
29891             arg3,
29892             arg4,
29893             arg5,
29894             arg6,
29895             arg7,
29896             arg8,
29897             arg9,
29898             arg10,
29899             arg11,
29900             arg12,
29901             arg13,
29902             arg14,
29903             arg15,
29904             arg16,
29905             arg17,
29906             arg18,
29907             arg19,
29908             arg20,
29909             arg21,
29910             arg22,
29911             arg23,
29912             arg24,
29913             arg25,
29914             arg26,
29915             arg27,
29916             arg28,
29917             arg29,
29918             arg30,
29919             arg31,
29920             arg32,
29921             arg33,
29922             arg34,
29923             arg35,
29924             arg36,
29925             arg37,
29926             arg38,
29927             arg39,
29928             arg40,
29929             arg41,
29930             arg42,
29931             arg43,
29932             arg44,
29933             arg45,
29934             arg46,
29935             arg47,
29936             arg48,
29937             arg49,
29938             arg50,
29939             arg51,
29940             arg52,
29941             arg53,
29942             arg54,
29943             arg55,
29944             arg56,
29945             arg57,
29946             arg58);
29947     }
29948 
29949     operator type_ ()    
29950     {
29951         return type_(*this);
29952     }
29953 
29954 };
29955 
29956 template<
29957     typename T0,
29958     typename T1,
29959     typename T2,
29960     typename T3,
29961     typename T4,
29962     typename T5,
29963     typename T6,
29964     typename T7,
29965     typename T8,
29966     typename T9,
29967     typename T10,
29968     typename T11,
29969     typename T12,
29970     typename T13,
29971     typename T14,
29972     typename T15,
29973     typename T16,
29974     typename T17,
29975     typename T18,
29976     typename T19,
29977     typename T20,
29978     typename T21,
29979     typename T22,
29980     typename T23,
29981     typename T24,
29982     typename T25,
29983     typename T26,
29984     typename T27,
29985     typename T28,
29986     typename T29,
29987     typename T30,
29988     typename T31,
29989     typename T32,
29990     typename T33,
29991     typename T34,
29992     typename T35,
29993     typename T36,
29994     typename T37,
29995     typename T38,
29996     typename T39,
29997     typename T40,
29998     typename T41,
29999     typename T42,
30000     typename T43,
30001     typename T44,
30002     typename T45,
30003     typename T46,
30004     typename T47,
30005     typename T48,
30006     typename T49,
30007     typename T50,
30008     typename T51,
30009     typename T52,
30010     typename T53,
30011     typename T54,
30012     typename T55,
30013     typename T56,
30014     typename T57,
30015     typename T58,
30016     typename T59>
30017 struct functionImplementation_<
30018     T0,
30019     T1,
30020     T2,
30021     T3,
30022     T4,
30023     T5,
30024     T6,
30025     T7,
30026     T8,
30027     T9,
30028     T10,
30029     T11,
30030     T12,
30031     T13,
30032     T14,
30033     T15,
30034     T16,
30035     T17,
30036     T18,
30037     T19,
30038     T20,
30039     T21,
30040     T22,
30041     T23,
30042     T24,
30043     T25,
30044     T26,
30045     T27,
30046     T28,
30047     T29,
30048     T30,
30049     T31,
30050     T32,
30051     T33,
30052     T34,
30053     T35,
30054     T36,
30055     T37,
30056     T38,
30057     T39,
30058     T40,
30059     T41,
30060     T42,
30061     T43,
30062     T44,
30063     T45,
30064     T46,
30065     T47,
30066     T48,
30067     T49,
30068     T50,
30069     T51,
30070     T52,
30071     T53,
30072     T54,
30073     T55,
30074     T56,
30075     T57,
30076     T58,
30077     T59,
30078     NullType,
30079     NullType,
30080     NullType,
30081     NullType,
30082     NullType,
30083     NullType,
30084     NullType,
30085     NullType,
30086     NullType,
30087     NullType,
30088     NullType,
30089     NullType,
30090     NullType,
30091     NullType,
30092     NullType,
30093     NullType,
30094     NullType,
30095     NullType,
30096     NullType,
30097     NullType,
30098     NullType,
30099     NullType,
30100     NullType,
30101     NullType,
30102     NullType,
30103     NullType,
30104     NullType,
30105     NullType,
30106     NullType,
30107     NullType,
30108     NullType,
30109     NullType,
30110     NullType,
30111     NullType,
30112     NullType,
30113     NullType,
30114     NullType,
30115     NullType,
30116     NullType,
30117     NullType,
30118     NullType,
30119     NullType,
30120     NullType,
30121     NullType,
30122     NullType,
30123     NullType,
30124     NullType,
30125     NullType,
30126     NullType,
30127     NullType,
30128     NullType,
30129     NullType,
30130     NullType,
30131     NullType,
30132     NullType,
30133     NullType,
30134     NullType,
30135     NullType,
30136     NullType,
30137     NullType,
30138     NullType,
30139     NullType,
30140     NullType,
30141     NullType,
30142     NullType,
30143     NullType,
30144     NullType,
30145     NullType>
30146 {
30147     typedef detail::KernelFunctorGlobal<
30148         T0,
30149         T1,
30150         T2,
30151         T3,
30152         T4,
30153         T5,
30154         T6,
30155         T7,
30156         T8,
30157         T9,
30158         T10,
30159         T11,
30160         T12,
30161         T13,
30162         T14,
30163         T15,
30164         T16,
30165         T17,
30166         T18,
30167         T19,
30168         T20,
30169         T21,
30170         T22,
30171         T23,
30172         T24,
30173         T25,
30174         T26,
30175         T27,
30176         T28,
30177         T29,
30178         T30,
30179         T31,
30180         T32,
30181         T33,
30182         T34,
30183         T35,
30184         T36,
30185         T37,
30186         T38,
30187         T39,
30188         T40,
30189         T41,
30190         T42,
30191         T43,
30192         T44,
30193         T45,
30194         T46,
30195         T47,
30196         T48,
30197         T49,
30198         T50,
30199         T51,
30200         T52,
30201         T53,
30202         T54,
30203         T55,
30204         T56,
30205         T57,
30206         T58,
30207         T59,
30208         NullType,
30209         NullType,
30210         NullType,
30211         NullType,
30212         NullType,
30213         NullType,
30214         NullType,
30215         NullType,
30216         NullType,
30217         NullType,
30218         NullType,
30219         NullType,
30220         NullType,
30221         NullType,
30222         NullType,
30223         NullType,
30224         NullType,
30225         NullType,
30226         NullType,
30227         NullType,
30228         NullType,
30229         NullType,
30230         NullType,
30231         NullType,
30232         NullType,
30233         NullType,
30234         NullType,
30235         NullType,
30236         NullType,
30237         NullType,
30238         NullType,
30239         NullType,
30240         NullType,
30241         NullType,
30242         NullType,
30243         NullType,
30244         NullType,
30245         NullType,
30246         NullType,
30247         NullType,
30248         NullType,
30249         NullType,
30250         NullType,
30251         NullType,
30252         NullType,
30253         NullType,
30254         NullType,
30255         NullType,
30256         NullType,
30257         NullType,
30258         NullType,
30259         NullType,
30260         NullType,
30261         NullType,
30262         NullType,
30263         NullType,
30264         NullType,
30265         NullType,
30266         NullType,
30267         NullType,
30268         NullType,
30269         NullType,
30270         NullType,
30271         NullType,
30272         NullType,
30273         NullType,
30274         NullType,
30275         NullType> FunctorType;
30276 
30277     FunctorType functor_;
30278 
30279     functionImplementation_(const FunctorType &functor) :
30280         functor_(functor)
30281     {
30282     }
30283         
30284     typedef std::tr1::function<Event (
30285         const EnqueueArgs&,
30286         T0,
30287         T1,
30288         T2,
30289         T3,
30290         T4,
30291         T5,
30292         T6,
30293         T7,
30294         T8,
30295         T9,
30296         T10,
30297         T11,
30298         T12,
30299         T13,
30300         T14,
30301         T15,
30302         T16,
30303         T17,
30304         T18,
30305         T19,
30306         T20,
30307         T21,
30308         T22,
30309         T23,
30310         T24,
30311         T25,
30312         T26,
30313         T27,
30314         T28,
30315         T29,
30316         T30,
30317         T31,
30318         T32,
30319         T33,
30320         T34,
30321         T35,
30322         T36,
30323         T37,
30324         T38,
30325         T39,
30326         T40,
30327         T41,
30328         T42,
30329         T43,
30330         T44,
30331         T45,
30332         T46,
30333         T47,
30334         T48,
30335         T49,
30336         T50,
30337         T51,
30338         T52,
30339         T53,
30340         T54,
30341         T55,
30342         T56,
30343         T57,
30344         T58,
30345         T59)> type_;
30346 
30347     Event operator()(const EnqueueArgs& enqueueArgs,
30348         T0 arg0,
30349         T1 arg1,
30350         T2 arg2,
30351         T3 arg3,
30352         T4 arg4,
30353         T5 arg5,
30354         T6 arg6,
30355         T7 arg7,
30356         T8 arg8,
30357         T9 arg9,
30358         T10 arg10,
30359         T11 arg11,
30360         T12 arg12,
30361         T13 arg13,
30362         T14 arg14,
30363         T15 arg15,
30364         T16 arg16,
30365         T17 arg17,
30366         T18 arg18,
30367         T19 arg19,
30368         T20 arg20,
30369         T21 arg21,
30370         T22 arg22,
30371         T23 arg23,
30372         T24 arg24,
30373         T25 arg25,
30374         T26 arg26,
30375         T27 arg27,
30376         T28 arg28,
30377         T29 arg29,
30378         T30 arg30,
30379         T31 arg31,
30380         T32 arg32,
30381         T33 arg33,
30382         T34 arg34,
30383         T35 arg35,
30384         T36 arg36,
30385         T37 arg37,
30386         T38 arg38,
30387         T39 arg39,
30388         T40 arg40,
30389         T41 arg41,
30390         T42 arg42,
30391         T43 arg43,
30392         T44 arg44,
30393         T45 arg45,
30394         T46 arg46,
30395         T47 arg47,
30396         T48 arg48,
30397         T49 arg49,
30398         T50 arg50,
30399         T51 arg51,
30400         T52 arg52,
30401         T53 arg53,
30402         T54 arg54,
30403         T55 arg55,
30404         T56 arg56,
30405         T57 arg57,
30406         T58 arg58,
30407         T59 arg59)
30408     {
30409         return functor_(
30410             enqueueArgs,
30411             arg0,
30412             arg1,
30413             arg2,
30414             arg3,
30415             arg4,
30416             arg5,
30417             arg6,
30418             arg7,
30419             arg8,
30420             arg9,
30421             arg10,
30422             arg11,
30423             arg12,
30424             arg13,
30425             arg14,
30426             arg15,
30427             arg16,
30428             arg17,
30429             arg18,
30430             arg19,
30431             arg20,
30432             arg21,
30433             arg22,
30434             arg23,
30435             arg24,
30436             arg25,
30437             arg26,
30438             arg27,
30439             arg28,
30440             arg29,
30441             arg30,
30442             arg31,
30443             arg32,
30444             arg33,
30445             arg34,
30446             arg35,
30447             arg36,
30448             arg37,
30449             arg38,
30450             arg39,
30451             arg40,
30452             arg41,
30453             arg42,
30454             arg43,
30455             arg44,
30456             arg45,
30457             arg46,
30458             arg47,
30459             arg48,
30460             arg49,
30461             arg50,
30462             arg51,
30463             arg52,
30464             arg53,
30465             arg54,
30466             arg55,
30467             arg56,
30468             arg57,
30469             arg58,
30470             arg59);
30471     }
30472 
30473     operator type_ ()    
30474     {
30475         return type_(*this);
30476     }
30477 
30478 };
30479 
30480 template<
30481     typename T0,
30482     typename T1,
30483     typename T2,
30484     typename T3,
30485     typename T4,
30486     typename T5,
30487     typename T6,
30488     typename T7,
30489     typename T8,
30490     typename T9,
30491     typename T10,
30492     typename T11,
30493     typename T12,
30494     typename T13,
30495     typename T14,
30496     typename T15,
30497     typename T16,
30498     typename T17,
30499     typename T18,
30500     typename T19,
30501     typename T20,
30502     typename T21,
30503     typename T22,
30504     typename T23,
30505     typename T24,
30506     typename T25,
30507     typename T26,
30508     typename T27,
30509     typename T28,
30510     typename T29,
30511     typename T30,
30512     typename T31,
30513     typename T32,
30514     typename T33,
30515     typename T34,
30516     typename T35,
30517     typename T36,
30518     typename T37,
30519     typename T38,
30520     typename T39,
30521     typename T40,
30522     typename T41,
30523     typename T42,
30524     typename T43,
30525     typename T44,
30526     typename T45,
30527     typename T46,
30528     typename T47,
30529     typename T48,
30530     typename T49,
30531     typename T50,
30532     typename T51,
30533     typename T52,
30534     typename T53,
30535     typename T54,
30536     typename T55,
30537     typename T56,
30538     typename T57,
30539     typename T58,
30540     typename T59,
30541     typename T60>
30542 struct functionImplementation_<
30543     T0,
30544     T1,
30545     T2,
30546     T3,
30547     T4,
30548     T5,
30549     T6,
30550     T7,
30551     T8,
30552     T9,
30553     T10,
30554     T11,
30555     T12,
30556     T13,
30557     T14,
30558     T15,
30559     T16,
30560     T17,
30561     T18,
30562     T19,
30563     T20,
30564     T21,
30565     T22,
30566     T23,
30567     T24,
30568     T25,
30569     T26,
30570     T27,
30571     T28,
30572     T29,
30573     T30,
30574     T31,
30575     T32,
30576     T33,
30577     T34,
30578     T35,
30579     T36,
30580     T37,
30581     T38,
30582     T39,
30583     T40,
30584     T41,
30585     T42,
30586     T43,
30587     T44,
30588     T45,
30589     T46,
30590     T47,
30591     T48,
30592     T49,
30593     T50,
30594     T51,
30595     T52,
30596     T53,
30597     T54,
30598     T55,
30599     T56,
30600     T57,
30601     T58,
30602     T59,
30603     T60,
30604     NullType,
30605     NullType,
30606     NullType,
30607     NullType,
30608     NullType,
30609     NullType,
30610     NullType,
30611     NullType,
30612     NullType,
30613     NullType,
30614     NullType,
30615     NullType,
30616     NullType,
30617     NullType,
30618     NullType,
30619     NullType,
30620     NullType,
30621     NullType,
30622     NullType,
30623     NullType,
30624     NullType,
30625     NullType,
30626     NullType,
30627     NullType,
30628     NullType,
30629     NullType,
30630     NullType,
30631     NullType,
30632     NullType,
30633     NullType,
30634     NullType,
30635     NullType,
30636     NullType,
30637     NullType,
30638     NullType,
30639     NullType,
30640     NullType,
30641     NullType,
30642     NullType,
30643     NullType,
30644     NullType,
30645     NullType,
30646     NullType,
30647     NullType,
30648     NullType,
30649     NullType,
30650     NullType,
30651     NullType,
30652     NullType,
30653     NullType,
30654     NullType,
30655     NullType,
30656     NullType,
30657     NullType,
30658     NullType,
30659     NullType,
30660     NullType,
30661     NullType,
30662     NullType,
30663     NullType,
30664     NullType,
30665     NullType,
30666     NullType,
30667     NullType,
30668     NullType,
30669     NullType,
30670     NullType>
30671 {
30672     typedef detail::KernelFunctorGlobal<
30673         T0,
30674         T1,
30675         T2,
30676         T3,
30677         T4,
30678         T5,
30679         T6,
30680         T7,
30681         T8,
30682         T9,
30683         T10,
30684         T11,
30685         T12,
30686         T13,
30687         T14,
30688         T15,
30689         T16,
30690         T17,
30691         T18,
30692         T19,
30693         T20,
30694         T21,
30695         T22,
30696         T23,
30697         T24,
30698         T25,
30699         T26,
30700         T27,
30701         T28,
30702         T29,
30703         T30,
30704         T31,
30705         T32,
30706         T33,
30707         T34,
30708         T35,
30709         T36,
30710         T37,
30711         T38,
30712         T39,
30713         T40,
30714         T41,
30715         T42,
30716         T43,
30717         T44,
30718         T45,
30719         T46,
30720         T47,
30721         T48,
30722         T49,
30723         T50,
30724         T51,
30725         T52,
30726         T53,
30727         T54,
30728         T55,
30729         T56,
30730         T57,
30731         T58,
30732         T59,
30733         T60,
30734         NullType,
30735         NullType,
30736         NullType,
30737         NullType,
30738         NullType,
30739         NullType,
30740         NullType,
30741         NullType,
30742         NullType,
30743         NullType,
30744         NullType,
30745         NullType,
30746         NullType,
30747         NullType,
30748         NullType,
30749         NullType,
30750         NullType,
30751         NullType,
30752         NullType,
30753         NullType,
30754         NullType,
30755         NullType,
30756         NullType,
30757         NullType,
30758         NullType,
30759         NullType,
30760         NullType,
30761         NullType,
30762         NullType,
30763         NullType,
30764         NullType,
30765         NullType,
30766         NullType,
30767         NullType,
30768         NullType,
30769         NullType,
30770         NullType,
30771         NullType,
30772         NullType,
30773         NullType,
30774         NullType,
30775         NullType,
30776         NullType,
30777         NullType,
30778         NullType,
30779         NullType,
30780         NullType,
30781         NullType,
30782         NullType,
30783         NullType,
30784         NullType,
30785         NullType,
30786         NullType,
30787         NullType,
30788         NullType,
30789         NullType,
30790         NullType,
30791         NullType,
30792         NullType,
30793         NullType,
30794         NullType,
30795         NullType,
30796         NullType,
30797         NullType,
30798         NullType,
30799         NullType,
30800         NullType> FunctorType;
30801 
30802     FunctorType functor_;
30803 
30804     functionImplementation_(const FunctorType &functor) :
30805         functor_(functor)
30806     {
30807     }
30808         
30809     typedef std::tr1::function<Event (
30810         const EnqueueArgs&,
30811         T0,
30812         T1,
30813         T2,
30814         T3,
30815         T4,
30816         T5,
30817         T6,
30818         T7,
30819         T8,
30820         T9,
30821         T10,
30822         T11,
30823         T12,
30824         T13,
30825         T14,
30826         T15,
30827         T16,
30828         T17,
30829         T18,
30830         T19,
30831         T20,
30832         T21,
30833         T22,
30834         T23,
30835         T24,
30836         T25,
30837         T26,
30838         T27,
30839         T28,
30840         T29,
30841         T30,
30842         T31,
30843         T32,
30844         T33,
30845         T34,
30846         T35,
30847         T36,
30848         T37,
30849         T38,
30850         T39,
30851         T40,
30852         T41,
30853         T42,
30854         T43,
30855         T44,
30856         T45,
30857         T46,
30858         T47,
30859         T48,
30860         T49,
30861         T50,
30862         T51,
30863         T52,
30864         T53,
30865         T54,
30866         T55,
30867         T56,
30868         T57,
30869         T58,
30870         T59,
30871         T60)> type_;
30872 
30873     Event operator()(const EnqueueArgs& enqueueArgs,
30874         T0 arg0,
30875         T1 arg1,
30876         T2 arg2,
30877         T3 arg3,
30878         T4 arg4,
30879         T5 arg5,
30880         T6 arg6,
30881         T7 arg7,
30882         T8 arg8,
30883         T9 arg9,
30884         T10 arg10,
30885         T11 arg11,
30886         T12 arg12,
30887         T13 arg13,
30888         T14 arg14,
30889         T15 arg15,
30890         T16 arg16,
30891         T17 arg17,
30892         T18 arg18,
30893         T19 arg19,
30894         T20 arg20,
30895         T21 arg21,
30896         T22 arg22,
30897         T23 arg23,
30898         T24 arg24,
30899         T25 arg25,
30900         T26 arg26,
30901         T27 arg27,
30902         T28 arg28,
30903         T29 arg29,
30904         T30 arg30,
30905         T31 arg31,
30906         T32 arg32,
30907         T33 arg33,
30908         T34 arg34,
30909         T35 arg35,
30910         T36 arg36,
30911         T37 arg37,
30912         T38 arg38,
30913         T39 arg39,
30914         T40 arg40,
30915         T41 arg41,
30916         T42 arg42,
30917         T43 arg43,
30918         T44 arg44,
30919         T45 arg45,
30920         T46 arg46,
30921         T47 arg47,
30922         T48 arg48,
30923         T49 arg49,
30924         T50 arg50,
30925         T51 arg51,
30926         T52 arg52,
30927         T53 arg53,
30928         T54 arg54,
30929         T55 arg55,
30930         T56 arg56,
30931         T57 arg57,
30932         T58 arg58,
30933         T59 arg59,
30934         T60 arg60)
30935     {
30936         return functor_(
30937             enqueueArgs,
30938             arg0,
30939             arg1,
30940             arg2,
30941             arg3,
30942             arg4,
30943             arg5,
30944             arg6,
30945             arg7,
30946             arg8,
30947             arg9,
30948             arg10,
30949             arg11,
30950             arg12,
30951             arg13,
30952             arg14,
30953             arg15,
30954             arg16,
30955             arg17,
30956             arg18,
30957             arg19,
30958             arg20,
30959             arg21,
30960             arg22,
30961             arg23,
30962             arg24,
30963             arg25,
30964             arg26,
30965             arg27,
30966             arg28,
30967             arg29,
30968             arg30,
30969             arg31,
30970             arg32,
30971             arg33,
30972             arg34,
30973             arg35,
30974             arg36,
30975             arg37,
30976             arg38,
30977             arg39,
30978             arg40,
30979             arg41,
30980             arg42,
30981             arg43,
30982             arg44,
30983             arg45,
30984             arg46,
30985             arg47,
30986             arg48,
30987             arg49,
30988             arg50,
30989             arg51,
30990             arg52,
30991             arg53,
30992             arg54,
30993             arg55,
30994             arg56,
30995             arg57,
30996             arg58,
30997             arg59,
30998             arg60);
30999     }
31000 
31001     operator type_ ()    
31002     {
31003         return type_(*this);
31004     }
31005 
31006 };
31007 
31008 template<
31009     typename T0,
31010     typename T1,
31011     typename T2,
31012     typename T3,
31013     typename T4,
31014     typename T5,
31015     typename T6,
31016     typename T7,
31017     typename T8,
31018     typename T9,
31019     typename T10,
31020     typename T11,
31021     typename T12,
31022     typename T13,
31023     typename T14,
31024     typename T15,
31025     typename T16,
31026     typename T17,
31027     typename T18,
31028     typename T19,
31029     typename T20,
31030     typename T21,
31031     typename T22,
31032     typename T23,
31033     typename T24,
31034     typename T25,
31035     typename T26,
31036     typename T27,
31037     typename T28,
31038     typename T29,
31039     typename T30,
31040     typename T31,
31041     typename T32,
31042     typename T33,
31043     typename T34,
31044     typename T35,
31045     typename T36,
31046     typename T37,
31047     typename T38,
31048     typename T39,
31049     typename T40,
31050     typename T41,
31051     typename T42,
31052     typename T43,
31053     typename T44,
31054     typename T45,
31055     typename T46,
31056     typename T47,
31057     typename T48,
31058     typename T49,
31059     typename T50,
31060     typename T51,
31061     typename T52,
31062     typename T53,
31063     typename T54,
31064     typename T55,
31065     typename T56,
31066     typename T57,
31067     typename T58,
31068     typename T59,
31069     typename T60,
31070     typename T61>
31071 struct functionImplementation_<
31072     T0,
31073     T1,
31074     T2,
31075     T3,
31076     T4,
31077     T5,
31078     T6,
31079     T7,
31080     T8,
31081     T9,
31082     T10,
31083     T11,
31084     T12,
31085     T13,
31086     T14,
31087     T15,
31088     T16,
31089     T17,
31090     T18,
31091     T19,
31092     T20,
31093     T21,
31094     T22,
31095     T23,
31096     T24,
31097     T25,
31098     T26,
31099     T27,
31100     T28,
31101     T29,
31102     T30,
31103     T31,
31104     T32,
31105     T33,
31106     T34,
31107     T35,
31108     T36,
31109     T37,
31110     T38,
31111     T39,
31112     T40,
31113     T41,
31114     T42,
31115     T43,
31116     T44,
31117     T45,
31118     T46,
31119     T47,
31120     T48,
31121     T49,
31122     T50,
31123     T51,
31124     T52,
31125     T53,
31126     T54,
31127     T55,
31128     T56,
31129     T57,
31130     T58,
31131     T59,
31132     T60,
31133     T61,
31134     NullType,
31135     NullType,
31136     NullType,
31137     NullType,
31138     NullType,
31139     NullType,
31140     NullType,
31141     NullType,
31142     NullType,
31143     NullType,
31144     NullType,
31145     NullType,
31146     NullType,
31147     NullType,
31148     NullType,
31149     NullType,
31150     NullType,
31151     NullType,
31152     NullType,
31153     NullType,
31154     NullType,
31155     NullType,
31156     NullType,
31157     NullType,
31158     NullType,
31159     NullType,
31160     NullType,
31161     NullType,
31162     NullType,
31163     NullType,
31164     NullType,
31165     NullType,
31166     NullType,
31167     NullType,
31168     NullType,
31169     NullType,
31170     NullType,
31171     NullType,
31172     NullType,
31173     NullType,
31174     NullType,
31175     NullType,
31176     NullType,
31177     NullType,
31178     NullType,
31179     NullType,
31180     NullType,
31181     NullType,
31182     NullType,
31183     NullType,
31184     NullType,
31185     NullType,
31186     NullType,
31187     NullType,
31188     NullType,
31189     NullType,
31190     NullType,
31191     NullType,
31192     NullType,
31193     NullType,
31194     NullType,
31195     NullType,
31196     NullType,
31197     NullType,
31198     NullType,
31199     NullType>
31200 {
31201     typedef detail::KernelFunctorGlobal<
31202         T0,
31203         T1,
31204         T2,
31205         T3,
31206         T4,
31207         T5,
31208         T6,
31209         T7,
31210         T8,
31211         T9,
31212         T10,
31213         T11,
31214         T12,
31215         T13,
31216         T14,
31217         T15,
31218         T16,
31219         T17,
31220         T18,
31221         T19,
31222         T20,
31223         T21,
31224         T22,
31225         T23,
31226         T24,
31227         T25,
31228         T26,
31229         T27,
31230         T28,
31231         T29,
31232         T30,
31233         T31,
31234         T32,
31235         T33,
31236         T34,
31237         T35,
31238         T36,
31239         T37,
31240         T38,
31241         T39,
31242         T40,
31243         T41,
31244         T42,
31245         T43,
31246         T44,
31247         T45,
31248         T46,
31249         T47,
31250         T48,
31251         T49,
31252         T50,
31253         T51,
31254         T52,
31255         T53,
31256         T54,
31257         T55,
31258         T56,
31259         T57,
31260         T58,
31261         T59,
31262         T60,
31263         T61,
31264         NullType,
31265         NullType,
31266         NullType,
31267         NullType,
31268         NullType,
31269         NullType,
31270         NullType,
31271         NullType,
31272         NullType,
31273         NullType,
31274         NullType,
31275         NullType,
31276         NullType,
31277         NullType,
31278         NullType,
31279         NullType,
31280         NullType,
31281         NullType,
31282         NullType,
31283         NullType,
31284         NullType,
31285         NullType,
31286         NullType,
31287         NullType,
31288         NullType,
31289         NullType,
31290         NullType,
31291         NullType,
31292         NullType,
31293         NullType,
31294         NullType,
31295         NullType,
31296         NullType,
31297         NullType,
31298         NullType,
31299         NullType,
31300         NullType,
31301         NullType,
31302         NullType,
31303         NullType,
31304         NullType,
31305         NullType,
31306         NullType,
31307         NullType,
31308         NullType,
31309         NullType,
31310         NullType,
31311         NullType,
31312         NullType,
31313         NullType,
31314         NullType,
31315         NullType,
31316         NullType,
31317         NullType,
31318         NullType,
31319         NullType,
31320         NullType,
31321         NullType,
31322         NullType,
31323         NullType,
31324         NullType,
31325         NullType,
31326         NullType,
31327         NullType,
31328         NullType,
31329         NullType> FunctorType;
31330 
31331     FunctorType functor_;
31332 
31333     functionImplementation_(const FunctorType &functor) :
31334         functor_(functor)
31335     {
31336     }
31337         
31338     typedef std::tr1::function<Event (
31339         const EnqueueArgs&,
31340         T0,
31341         T1,
31342         T2,
31343         T3,
31344         T4,
31345         T5,
31346         T6,
31347         T7,
31348         T8,
31349         T9,
31350         T10,
31351         T11,
31352         T12,
31353         T13,
31354         T14,
31355         T15,
31356         T16,
31357         T17,
31358         T18,
31359         T19,
31360         T20,
31361         T21,
31362         T22,
31363         T23,
31364         T24,
31365         T25,
31366         T26,
31367         T27,
31368         T28,
31369         T29,
31370         T30,
31371         T31,
31372         T32,
31373         T33,
31374         T34,
31375         T35,
31376         T36,
31377         T37,
31378         T38,
31379         T39,
31380         T40,
31381         T41,
31382         T42,
31383         T43,
31384         T44,
31385         T45,
31386         T46,
31387         T47,
31388         T48,
31389         T49,
31390         T50,
31391         T51,
31392         T52,
31393         T53,
31394         T54,
31395         T55,
31396         T56,
31397         T57,
31398         T58,
31399         T59,
31400         T60,
31401         T61)> type_;
31402 
31403     Event operator()(const EnqueueArgs& enqueueArgs,
31404         T0 arg0,
31405         T1 arg1,
31406         T2 arg2,
31407         T3 arg3,
31408         T4 arg4,
31409         T5 arg5,
31410         T6 arg6,
31411         T7 arg7,
31412         T8 arg8,
31413         T9 arg9,
31414         T10 arg10,
31415         T11 arg11,
31416         T12 arg12,
31417         T13 arg13,
31418         T14 arg14,
31419         T15 arg15,
31420         T16 arg16,
31421         T17 arg17,
31422         T18 arg18,
31423         T19 arg19,
31424         T20 arg20,
31425         T21 arg21,
31426         T22 arg22,
31427         T23 arg23,
31428         T24 arg24,
31429         T25 arg25,
31430         T26 arg26,
31431         T27 arg27,
31432         T28 arg28,
31433         T29 arg29,
31434         T30 arg30,
31435         T31 arg31,
31436         T32 arg32,
31437         T33 arg33,
31438         T34 arg34,
31439         T35 arg35,
31440         T36 arg36,
31441         T37 arg37,
31442         T38 arg38,
31443         T39 arg39,
31444         T40 arg40,
31445         T41 arg41,
31446         T42 arg42,
31447         T43 arg43,
31448         T44 arg44,
31449         T45 arg45,
31450         T46 arg46,
31451         T47 arg47,
31452         T48 arg48,
31453         T49 arg49,
31454         T50 arg50,
31455         T51 arg51,
31456         T52 arg52,
31457         T53 arg53,
31458         T54 arg54,
31459         T55 arg55,
31460         T56 arg56,
31461         T57 arg57,
31462         T58 arg58,
31463         T59 arg59,
31464         T60 arg60,
31465         T61 arg61)
31466     {
31467         return functor_(
31468             enqueueArgs,
31469             arg0,
31470             arg1,
31471             arg2,
31472             arg3,
31473             arg4,
31474             arg5,
31475             arg6,
31476             arg7,
31477             arg8,
31478             arg9,
31479             arg10,
31480             arg11,
31481             arg12,
31482             arg13,
31483             arg14,
31484             arg15,
31485             arg16,
31486             arg17,
31487             arg18,
31488             arg19,
31489             arg20,
31490             arg21,
31491             arg22,
31492             arg23,
31493             arg24,
31494             arg25,
31495             arg26,
31496             arg27,
31497             arg28,
31498             arg29,
31499             arg30,
31500             arg31,
31501             arg32,
31502             arg33,
31503             arg34,
31504             arg35,
31505             arg36,
31506             arg37,
31507             arg38,
31508             arg39,
31509             arg40,
31510             arg41,
31511             arg42,
31512             arg43,
31513             arg44,
31514             arg45,
31515             arg46,
31516             arg47,
31517             arg48,
31518             arg49,
31519             arg50,
31520             arg51,
31521             arg52,
31522             arg53,
31523             arg54,
31524             arg55,
31525             arg56,
31526             arg57,
31527             arg58,
31528             arg59,
31529             arg60,
31530             arg61);
31531     }
31532 
31533     operator type_ ()    
31534     {
31535         return type_(*this);
31536     }
31537 
31538 };
31539 
31540 template<
31541     typename T0,
31542     typename T1,
31543     typename T2,
31544     typename T3,
31545     typename T4,
31546     typename T5,
31547     typename T6,
31548     typename T7,
31549     typename T8,
31550     typename T9,
31551     typename T10,
31552     typename T11,
31553     typename T12,
31554     typename T13,
31555     typename T14,
31556     typename T15,
31557     typename T16,
31558     typename T17,
31559     typename T18,
31560     typename T19,
31561     typename T20,
31562     typename T21,
31563     typename T22,
31564     typename T23,
31565     typename T24,
31566     typename T25,
31567     typename T26,
31568     typename T27,
31569     typename T28,
31570     typename T29,
31571     typename T30,
31572     typename T31,
31573     typename T32,
31574     typename T33,
31575     typename T34,
31576     typename T35,
31577     typename T36,
31578     typename T37,
31579     typename T38,
31580     typename T39,
31581     typename T40,
31582     typename T41,
31583     typename T42,
31584     typename T43,
31585     typename T44,
31586     typename T45,
31587     typename T46,
31588     typename T47,
31589     typename T48,
31590     typename T49,
31591     typename T50,
31592     typename T51,
31593     typename T52,
31594     typename T53,
31595     typename T54,
31596     typename T55,
31597     typename T56,
31598     typename T57,
31599     typename T58,
31600     typename T59,
31601     typename T60,
31602     typename T61,
31603     typename T62>
31604 struct functionImplementation_<
31605     T0,
31606     T1,
31607     T2,
31608     T3,
31609     T4,
31610     T5,
31611     T6,
31612     T7,
31613     T8,
31614     T9,
31615     T10,
31616     T11,
31617     T12,
31618     T13,
31619     T14,
31620     T15,
31621     T16,
31622     T17,
31623     T18,
31624     T19,
31625     T20,
31626     T21,
31627     T22,
31628     T23,
31629     T24,
31630     T25,
31631     T26,
31632     T27,
31633     T28,
31634     T29,
31635     T30,
31636     T31,
31637     T32,
31638     T33,
31639     T34,
31640     T35,
31641     T36,
31642     T37,
31643     T38,
31644     T39,
31645     T40,
31646     T41,
31647     T42,
31648     T43,
31649     T44,
31650     T45,
31651     T46,
31652     T47,
31653     T48,
31654     T49,
31655     T50,
31656     T51,
31657     T52,
31658     T53,
31659     T54,
31660     T55,
31661     T56,
31662     T57,
31663     T58,
31664     T59,
31665     T60,
31666     T61,
31667     T62,
31668     NullType,
31669     NullType,
31670     NullType,
31671     NullType,
31672     NullType,
31673     NullType,
31674     NullType,
31675     NullType,
31676     NullType,
31677     NullType,
31678     NullType,
31679     NullType,
31680     NullType,
31681     NullType,
31682     NullType,
31683     NullType,
31684     NullType,
31685     NullType,
31686     NullType,
31687     NullType,
31688     NullType,
31689     NullType,
31690     NullType,
31691     NullType,
31692     NullType,
31693     NullType,
31694     NullType,
31695     NullType,
31696     NullType,
31697     NullType,
31698     NullType,
31699     NullType,
31700     NullType,
31701     NullType,
31702     NullType,
31703     NullType,
31704     NullType,
31705     NullType,
31706     NullType,
31707     NullType,
31708     NullType,
31709     NullType,
31710     NullType,
31711     NullType,
31712     NullType,
31713     NullType,
31714     NullType,
31715     NullType,
31716     NullType,
31717     NullType,
31718     NullType,
31719     NullType,
31720     NullType,
31721     NullType,
31722     NullType,
31723     NullType,
31724     NullType,
31725     NullType,
31726     NullType,
31727     NullType,
31728     NullType,
31729     NullType,
31730     NullType,
31731     NullType,
31732     NullType>
31733 {
31734     typedef detail::KernelFunctorGlobal<
31735         T0,
31736         T1,
31737         T2,
31738         T3,
31739         T4,
31740         T5,
31741         T6,
31742         T7,
31743         T8,
31744         T9,
31745         T10,
31746         T11,
31747         T12,
31748         T13,
31749         T14,
31750         T15,
31751         T16,
31752         T17,
31753         T18,
31754         T19,
31755         T20,
31756         T21,
31757         T22,
31758         T23,
31759         T24,
31760         T25,
31761         T26,
31762         T27,
31763         T28,
31764         T29,
31765         T30,
31766         T31,
31767         T32,
31768         T33,
31769         T34,
31770         T35,
31771         T36,
31772         T37,
31773         T38,
31774         T39,
31775         T40,
31776         T41,
31777         T42,
31778         T43,
31779         T44,
31780         T45,
31781         T46,
31782         T47,
31783         T48,
31784         T49,
31785         T50,
31786         T51,
31787         T52,
31788         T53,
31789         T54,
31790         T55,
31791         T56,
31792         T57,
31793         T58,
31794         T59,
31795         T60,
31796         T61,
31797         T62,
31798         NullType,
31799         NullType,
31800         NullType,
31801         NullType,
31802         NullType,
31803         NullType,
31804         NullType,
31805         NullType,
31806         NullType,
31807         NullType,
31808         NullType,
31809         NullType,
31810         NullType,
31811         NullType,
31812         NullType,
31813         NullType,
31814         NullType,
31815         NullType,
31816         NullType,
31817         NullType,
31818         NullType,
31819         NullType,
31820         NullType,
31821         NullType,
31822         NullType,
31823         NullType,
31824         NullType,
31825         NullType,
31826         NullType,
31827         NullType,
31828         NullType,
31829         NullType,
31830         NullType,
31831         NullType,
31832         NullType,
31833         NullType,
31834         NullType,
31835         NullType,
31836         NullType,
31837         NullType,
31838         NullType,
31839         NullType,
31840         NullType,
31841         NullType,
31842         NullType,
31843         NullType,
31844         NullType,
31845         NullType,
31846         NullType,
31847         NullType,
31848         NullType,
31849         NullType,
31850         NullType,
31851         NullType,
31852         NullType,
31853         NullType,
31854         NullType,
31855         NullType,
31856         NullType,
31857         NullType,
31858         NullType,
31859         NullType,
31860         NullType,
31861         NullType,
31862         NullType> FunctorType;
31863 
31864     FunctorType functor_;
31865 
31866     functionImplementation_(const FunctorType &functor) :
31867         functor_(functor)
31868     {
31869     }
31870         
31871     typedef std::tr1::function<Event (
31872         const EnqueueArgs&,
31873         T0,
31874         T1,
31875         T2,
31876         T3,
31877         T4,
31878         T5,
31879         T6,
31880         T7,
31881         T8,
31882         T9,
31883         T10,
31884         T11,
31885         T12,
31886         T13,
31887         T14,
31888         T15,
31889         T16,
31890         T17,
31891         T18,
31892         T19,
31893         T20,
31894         T21,
31895         T22,
31896         T23,
31897         T24,
31898         T25,
31899         T26,
31900         T27,
31901         T28,
31902         T29,
31903         T30,
31904         T31,
31905         T32,
31906         T33,
31907         T34,
31908         T35,
31909         T36,
31910         T37,
31911         T38,
31912         T39,
31913         T40,
31914         T41,
31915         T42,
31916         T43,
31917         T44,
31918         T45,
31919         T46,
31920         T47,
31921         T48,
31922         T49,
31923         T50,
31924         T51,
31925         T52,
31926         T53,
31927         T54,
31928         T55,
31929         T56,
31930         T57,
31931         T58,
31932         T59,
31933         T60,
31934         T61,
31935         T62)> type_;
31936 
31937     Event operator()(const EnqueueArgs& enqueueArgs,
31938         T0 arg0,
31939         T1 arg1,
31940         T2 arg2,
31941         T3 arg3,
31942         T4 arg4,
31943         T5 arg5,
31944         T6 arg6,
31945         T7 arg7,
31946         T8 arg8,
31947         T9 arg9,
31948         T10 arg10,
31949         T11 arg11,
31950         T12 arg12,
31951         T13 arg13,
31952         T14 arg14,
31953         T15 arg15,
31954         T16 arg16,
31955         T17 arg17,
31956         T18 arg18,
31957         T19 arg19,
31958         T20 arg20,
31959         T21 arg21,
31960         T22 arg22,
31961         T23 arg23,
31962         T24 arg24,
31963         T25 arg25,
31964         T26 arg26,
31965         T27 arg27,
31966         T28 arg28,
31967         T29 arg29,
31968         T30 arg30,
31969         T31 arg31,
31970         T32 arg32,
31971         T33 arg33,
31972         T34 arg34,
31973         T35 arg35,
31974         T36 arg36,
31975         T37 arg37,
31976         T38 arg38,
31977         T39 arg39,
31978         T40 arg40,
31979         T41 arg41,
31980         T42 arg42,
31981         T43 arg43,
31982         T44 arg44,
31983         T45 arg45,
31984         T46 arg46,
31985         T47 arg47,
31986         T48 arg48,
31987         T49 arg49,
31988         T50 arg50,
31989         T51 arg51,
31990         T52 arg52,
31991         T53 arg53,
31992         T54 arg54,
31993         T55 arg55,
31994         T56 arg56,
31995         T57 arg57,
31996         T58 arg58,
31997         T59 arg59,
31998         T60 arg60,
31999         T61 arg61,
32000         T62 arg62)
32001     {
32002         return functor_(
32003             enqueueArgs,
32004             arg0,
32005             arg1,
32006             arg2,
32007             arg3,
32008             arg4,
32009             arg5,
32010             arg6,
32011             arg7,
32012             arg8,
32013             arg9,
32014             arg10,
32015             arg11,
32016             arg12,
32017             arg13,
32018             arg14,
32019             arg15,
32020             arg16,
32021             arg17,
32022             arg18,
32023             arg19,
32024             arg20,
32025             arg21,
32026             arg22,
32027             arg23,
32028             arg24,
32029             arg25,
32030             arg26,
32031             arg27,
32032             arg28,
32033             arg29,
32034             arg30,
32035             arg31,
32036             arg32,
32037             arg33,
32038             arg34,
32039             arg35,
32040             arg36,
32041             arg37,
32042             arg38,
32043             arg39,
32044             arg40,
32045             arg41,
32046             arg42,
32047             arg43,
32048             arg44,
32049             arg45,
32050             arg46,
32051             arg47,
32052             arg48,
32053             arg49,
32054             arg50,
32055             arg51,
32056             arg52,
32057             arg53,
32058             arg54,
32059             arg55,
32060             arg56,
32061             arg57,
32062             arg58,
32063             arg59,
32064             arg60,
32065             arg61,
32066             arg62);
32067     }
32068 
32069     operator type_ ()    
32070     {
32071         return type_(*this);
32072     }
32073 
32074 };
32075 
32076 template<
32077     typename T0,
32078     typename T1,
32079     typename T2,
32080     typename T3,
32081     typename T4,
32082     typename T5,
32083     typename T6,
32084     typename T7,
32085     typename T8,
32086     typename T9,
32087     typename T10,
32088     typename T11,
32089     typename T12,
32090     typename T13,
32091     typename T14,
32092     typename T15,
32093     typename T16,
32094     typename T17,
32095     typename T18,
32096     typename T19,
32097     typename T20,
32098     typename T21,
32099     typename T22,
32100     typename T23,
32101     typename T24,
32102     typename T25,
32103     typename T26,
32104     typename T27,
32105     typename T28,
32106     typename T29,
32107     typename T30,
32108     typename T31,
32109     typename T32,
32110     typename T33,
32111     typename T34,
32112     typename T35,
32113     typename T36,
32114     typename T37,
32115     typename T38,
32116     typename T39,
32117     typename T40,
32118     typename T41,
32119     typename T42,
32120     typename T43,
32121     typename T44,
32122     typename T45,
32123     typename T46,
32124     typename T47,
32125     typename T48,
32126     typename T49,
32127     typename T50,
32128     typename T51,
32129     typename T52,
32130     typename T53,
32131     typename T54,
32132     typename T55,
32133     typename T56,
32134     typename T57,
32135     typename T58,
32136     typename T59,
32137     typename T60,
32138     typename T61,
32139     typename T62,
32140     typename T63>
32141 struct functionImplementation_<
32142     T0,
32143     T1,
32144     T2,
32145     T3,
32146     T4,
32147     T5,
32148     T6,
32149     T7,
32150     T8,
32151     T9,
32152     T10,
32153     T11,
32154     T12,
32155     T13,
32156     T14,
32157     T15,
32158     T16,
32159     T17,
32160     T18,
32161     T19,
32162     T20,
32163     T21,
32164     T22,
32165     T23,
32166     T24,
32167     T25,
32168     T26,
32169     T27,
32170     T28,
32171     T29,
32172     T30,
32173     T31,
32174     T32,
32175     T33,
32176     T34,
32177     T35,
32178     T36,
32179     T37,
32180     T38,
32181     T39,
32182     T40,
32183     T41,
32184     T42,
32185     T43,
32186     T44,
32187     T45,
32188     T46,
32189     T47,
32190     T48,
32191     T49,
32192     T50,
32193     T51,
32194     T52,
32195     T53,
32196     T54,
32197     T55,
32198     T56,
32199     T57,
32200     T58,
32201     T59,
32202     T60,
32203     T61,
32204     T62,
32205     T63,
32206     NullType,
32207     NullType,
32208     NullType,
32209     NullType,
32210     NullType,
32211     NullType,
32212     NullType,
32213     NullType,
32214     NullType,
32215     NullType,
32216     NullType,
32217     NullType,
32218     NullType,
32219     NullType,
32220     NullType,
32221     NullType,
32222     NullType,
32223     NullType,
32224     NullType,
32225     NullType,
32226     NullType,
32227     NullType,
32228     NullType,
32229     NullType,
32230     NullType,
32231     NullType,
32232     NullType,
32233     NullType,
32234     NullType,
32235     NullType,
32236     NullType,
32237     NullType,
32238     NullType,
32239     NullType,
32240     NullType,
32241     NullType,
32242     NullType,
32243     NullType,
32244     NullType,
32245     NullType,
32246     NullType,
32247     NullType,
32248     NullType,
32249     NullType,
32250     NullType,
32251     NullType,
32252     NullType,
32253     NullType,
32254     NullType,
32255     NullType,
32256     NullType,
32257     NullType,
32258     NullType,
32259     NullType,
32260     NullType,
32261     NullType,
32262     NullType,
32263     NullType,
32264     NullType,
32265     NullType,
32266     NullType,
32267     NullType,
32268     NullType,
32269     NullType>
32270 {
32271     typedef detail::KernelFunctorGlobal<
32272         T0,
32273         T1,
32274         T2,
32275         T3,
32276         T4,
32277         T5,
32278         T6,
32279         T7,
32280         T8,
32281         T9,
32282         T10,
32283         T11,
32284         T12,
32285         T13,
32286         T14,
32287         T15,
32288         T16,
32289         T17,
32290         T18,
32291         T19,
32292         T20,
32293         T21,
32294         T22,
32295         T23,
32296         T24,
32297         T25,
32298         T26,
32299         T27,
32300         T28,
32301         T29,
32302         T30,
32303         T31,
32304         T32,
32305         T33,
32306         T34,
32307         T35,
32308         T36,
32309         T37,
32310         T38,
32311         T39,
32312         T40,
32313         T41,
32314         T42,
32315         T43,
32316         T44,
32317         T45,
32318         T46,
32319         T47,
32320         T48,
32321         T49,
32322         T50,
32323         T51,
32324         T52,
32325         T53,
32326         T54,
32327         T55,
32328         T56,
32329         T57,
32330         T58,
32331         T59,
32332         T60,
32333         T61,
32334         T62,
32335         T63,
32336         NullType,
32337         NullType,
32338         NullType,
32339         NullType,
32340         NullType,
32341         NullType,
32342         NullType,
32343         NullType,
32344         NullType,
32345         NullType,
32346         NullType,
32347         NullType,
32348         NullType,
32349         NullType,
32350         NullType,
32351         NullType,
32352         NullType,
32353         NullType,
32354         NullType,
32355         NullType,
32356         NullType,
32357         NullType,
32358         NullType,
32359         NullType,
32360         NullType,
32361         NullType,
32362         NullType,
32363         NullType,
32364         NullType,
32365         NullType,
32366         NullType,
32367         NullType,
32368         NullType,
32369         NullType,
32370         NullType,
32371         NullType,
32372         NullType,
32373         NullType,
32374         NullType,
32375         NullType,
32376         NullType,
32377         NullType,
32378         NullType,
32379         NullType,
32380         NullType,
32381         NullType,
32382         NullType,
32383         NullType,
32384         NullType,
32385         NullType,
32386         NullType,
32387         NullType,
32388         NullType,
32389         NullType,
32390         NullType,
32391         NullType,
32392         NullType,
32393         NullType,
32394         NullType,
32395         NullType,
32396         NullType,
32397         NullType,
32398         NullType,
32399         NullType> FunctorType;
32400 
32401     FunctorType functor_;
32402 
32403     functionImplementation_(const FunctorType &functor) :
32404         functor_(functor)
32405     {
32406     }
32407         
32408     typedef std::tr1::function<Event (
32409         const EnqueueArgs&,
32410         T0,
32411         T1,
32412         T2,
32413         T3,
32414         T4,
32415         T5,
32416         T6,
32417         T7,
32418         T8,
32419         T9,
32420         T10,
32421         T11,
32422         T12,
32423         T13,
32424         T14,
32425         T15,
32426         T16,
32427         T17,
32428         T18,
32429         T19,
32430         T20,
32431         T21,
32432         T22,
32433         T23,
32434         T24,
32435         T25,
32436         T26,
32437         T27,
32438         T28,
32439         T29,
32440         T30,
32441         T31,
32442         T32,
32443         T33,
32444         T34,
32445         T35,
32446         T36,
32447         T37,
32448         T38,
32449         T39,
32450         T40,
32451         T41,
32452         T42,
32453         T43,
32454         T44,
32455         T45,
32456         T46,
32457         T47,
32458         T48,
32459         T49,
32460         T50,
32461         T51,
32462         T52,
32463         T53,
32464         T54,
32465         T55,
32466         T56,
32467         T57,
32468         T58,
32469         T59,
32470         T60,
32471         T61,
32472         T62,
32473         T63)> type_;
32474 
32475     Event operator()(const EnqueueArgs& enqueueArgs,
32476         T0 arg0,
32477         T1 arg1,
32478         T2 arg2,
32479         T3 arg3,
32480         T4 arg4,
32481         T5 arg5,
32482         T6 arg6,
32483         T7 arg7,
32484         T8 arg8,
32485         T9 arg9,
32486         T10 arg10,
32487         T11 arg11,
32488         T12 arg12,
32489         T13 arg13,
32490         T14 arg14,
32491         T15 arg15,
32492         T16 arg16,
32493         T17 arg17,
32494         T18 arg18,
32495         T19 arg19,
32496         T20 arg20,
32497         T21 arg21,
32498         T22 arg22,
32499         T23 arg23,
32500         T24 arg24,
32501         T25 arg25,
32502         T26 arg26,
32503         T27 arg27,
32504         T28 arg28,
32505         T29 arg29,
32506         T30 arg30,
32507         T31 arg31,
32508         T32 arg32,
32509         T33 arg33,
32510         T34 arg34,
32511         T35 arg35,
32512         T36 arg36,
32513         T37 arg37,
32514         T38 arg38,
32515         T39 arg39,
32516         T40 arg40,
32517         T41 arg41,
32518         T42 arg42,
32519         T43 arg43,
32520         T44 arg44,
32521         T45 arg45,
32522         T46 arg46,
32523         T47 arg47,
32524         T48 arg48,
32525         T49 arg49,
32526         T50 arg50,
32527         T51 arg51,
32528         T52 arg52,
32529         T53 arg53,
32530         T54 arg54,
32531         T55 arg55,
32532         T56 arg56,
32533         T57 arg57,
32534         T58 arg58,
32535         T59 arg59,
32536         T60 arg60,
32537         T61 arg61,
32538         T62 arg62,
32539         T63 arg63)
32540     {
32541         return functor_(
32542             enqueueArgs,
32543             arg0,
32544             arg1,
32545             arg2,
32546             arg3,
32547             arg4,
32548             arg5,
32549             arg6,
32550             arg7,
32551             arg8,
32552             arg9,
32553             arg10,
32554             arg11,
32555             arg12,
32556             arg13,
32557             arg14,
32558             arg15,
32559             arg16,
32560             arg17,
32561             arg18,
32562             arg19,
32563             arg20,
32564             arg21,
32565             arg22,
32566             arg23,
32567             arg24,
32568             arg25,
32569             arg26,
32570             arg27,
32571             arg28,
32572             arg29,
32573             arg30,
32574             arg31,
32575             arg32,
32576             arg33,
32577             arg34,
32578             arg35,
32579             arg36,
32580             arg37,
32581             arg38,
32582             arg39,
32583             arg40,
32584             arg41,
32585             arg42,
32586             arg43,
32587             arg44,
32588             arg45,
32589             arg46,
32590             arg47,
32591             arg48,
32592             arg49,
32593             arg50,
32594             arg51,
32595             arg52,
32596             arg53,
32597             arg54,
32598             arg55,
32599             arg56,
32600             arg57,
32601             arg58,
32602             arg59,
32603             arg60,
32604             arg61,
32605             arg62,
32606             arg63);
32607     }
32608 
32609     operator type_ ()    
32610     {
32611         return type_(*this);
32612     }
32613 
32614 };
32615 
32616 template<
32617     typename T0,
32618     typename T1,
32619     typename T2,
32620     typename T3,
32621     typename T4,
32622     typename T5,
32623     typename T6,
32624     typename T7,
32625     typename T8,
32626     typename T9,
32627     typename T10,
32628     typename T11,
32629     typename T12,
32630     typename T13,
32631     typename T14,
32632     typename T15,
32633     typename T16,
32634     typename T17,
32635     typename T18,
32636     typename T19,
32637     typename T20,
32638     typename T21,
32639     typename T22,
32640     typename T23,
32641     typename T24,
32642     typename T25,
32643     typename T26,
32644     typename T27,
32645     typename T28,
32646     typename T29,
32647     typename T30,
32648     typename T31,
32649     typename T32,
32650     typename T33,
32651     typename T34,
32652     typename T35,
32653     typename T36,
32654     typename T37,
32655     typename T38,
32656     typename T39,
32657     typename T40,
32658     typename T41,
32659     typename T42,
32660     typename T43,
32661     typename T44,
32662     typename T45,
32663     typename T46,
32664     typename T47,
32665     typename T48,
32666     typename T49,
32667     typename T50,
32668     typename T51,
32669     typename T52,
32670     typename T53,
32671     typename T54,
32672     typename T55,
32673     typename T56,
32674     typename T57,
32675     typename T58,
32676     typename T59,
32677     typename T60,
32678     typename T61,
32679     typename T62,
32680     typename T63,
32681     typename T64>
32682 struct functionImplementation_<
32683     T0,
32684     T1,
32685     T2,
32686     T3,
32687     T4,
32688     T5,
32689     T6,
32690     T7,
32691     T8,
32692     T9,
32693     T10,
32694     T11,
32695     T12,
32696     T13,
32697     T14,
32698     T15,
32699     T16,
32700     T17,
32701     T18,
32702     T19,
32703     T20,
32704     T21,
32705     T22,
32706     T23,
32707     T24,
32708     T25,
32709     T26,
32710     T27,
32711     T28,
32712     T29,
32713     T30,
32714     T31,
32715     T32,
32716     T33,
32717     T34,
32718     T35,
32719     T36,
32720     T37,
32721     T38,
32722     T39,
32723     T40,
32724     T41,
32725     T42,
32726     T43,
32727     T44,
32728     T45,
32729     T46,
32730     T47,
32731     T48,
32732     T49,
32733     T50,
32734     T51,
32735     T52,
32736     T53,
32737     T54,
32738     T55,
32739     T56,
32740     T57,
32741     T58,
32742     T59,
32743     T60,
32744     T61,
32745     T62,
32746     T63,
32747     T64,
32748     NullType,
32749     NullType,
32750     NullType,
32751     NullType,
32752     NullType,
32753     NullType,
32754     NullType,
32755     NullType,
32756     NullType,
32757     NullType,
32758     NullType,
32759     NullType,
32760     NullType,
32761     NullType,
32762     NullType,
32763     NullType,
32764     NullType,
32765     NullType,
32766     NullType,
32767     NullType,
32768     NullType,
32769     NullType,
32770     NullType,
32771     NullType,
32772     NullType,
32773     NullType,
32774     NullType,
32775     NullType,
32776     NullType,
32777     NullType,
32778     NullType,
32779     NullType,
32780     NullType,
32781     NullType,
32782     NullType,
32783     NullType,
32784     NullType,
32785     NullType,
32786     NullType,
32787     NullType,
32788     NullType,
32789     NullType,
32790     NullType,
32791     NullType,
32792     NullType,
32793     NullType,
32794     NullType,
32795     NullType,
32796     NullType,
32797     NullType,
32798     NullType,
32799     NullType,
32800     NullType,
32801     NullType,
32802     NullType,
32803     NullType,
32804     NullType,
32805     NullType,
32806     NullType,
32807     NullType,
32808     NullType,
32809     NullType,
32810     NullType>
32811 {
32812     typedef detail::KernelFunctorGlobal<
32813         T0,
32814         T1,
32815         T2,
32816         T3,
32817         T4,
32818         T5,
32819         T6,
32820         T7,
32821         T8,
32822         T9,
32823         T10,
32824         T11,
32825         T12,
32826         T13,
32827         T14,
32828         T15,
32829         T16,
32830         T17,
32831         T18,
32832         T19,
32833         T20,
32834         T21,
32835         T22,
32836         T23,
32837         T24,
32838         T25,
32839         T26,
32840         T27,
32841         T28,
32842         T29,
32843         T30,
32844         T31,
32845         T32,
32846         T33,
32847         T34,
32848         T35,
32849         T36,
32850         T37,
32851         T38,
32852         T39,
32853         T40,
32854         T41,
32855         T42,
32856         T43,
32857         T44,
32858         T45,
32859         T46,
32860         T47,
32861         T48,
32862         T49,
32863         T50,
32864         T51,
32865         T52,
32866         T53,
32867         T54,
32868         T55,
32869         T56,
32870         T57,
32871         T58,
32872         T59,
32873         T60,
32874         T61,
32875         T62,
32876         T63,
32877         T64,
32878         NullType,
32879         NullType,
32880         NullType,
32881         NullType,
32882         NullType,
32883         NullType,
32884         NullType,
32885         NullType,
32886         NullType,
32887         NullType,
32888         NullType,
32889         NullType,
32890         NullType,
32891         NullType,
32892         NullType,
32893         NullType,
32894         NullType,
32895         NullType,
32896         NullType,
32897         NullType,
32898         NullType,
32899         NullType,
32900         NullType,
32901         NullType,
32902         NullType,
32903         NullType,
32904         NullType,
32905         NullType,
32906         NullType,
32907         NullType,
32908         NullType,
32909         NullType,
32910         NullType,
32911         NullType,
32912         NullType,
32913         NullType,
32914         NullType,
32915         NullType,
32916         NullType,
32917         NullType,
32918         NullType,
32919         NullType,
32920         NullType,
32921         NullType,
32922         NullType,
32923         NullType,
32924         NullType,
32925         NullType,
32926         NullType,
32927         NullType,
32928         NullType,
32929         NullType,
32930         NullType,
32931         NullType,
32932         NullType,
32933         NullType,
32934         NullType,
32935         NullType,
32936         NullType,
32937         NullType,
32938         NullType,
32939         NullType,
32940         NullType> FunctorType;
32941 
32942     FunctorType functor_;
32943 
32944     functionImplementation_(const FunctorType &functor) :
32945         functor_(functor)
32946     {
32947     }
32948         
32949     typedef std::tr1::function<Event (
32950         const EnqueueArgs&,
32951         T0,
32952         T1,
32953         T2,
32954         T3,
32955         T4,
32956         T5,
32957         T6,
32958         T7,
32959         T8,
32960         T9,
32961         T10,
32962         T11,
32963         T12,
32964         T13,
32965         T14,
32966         T15,
32967         T16,
32968         T17,
32969         T18,
32970         T19,
32971         T20,
32972         T21,
32973         T22,
32974         T23,
32975         T24,
32976         T25,
32977         T26,
32978         T27,
32979         T28,
32980         T29,
32981         T30,
32982         T31,
32983         T32,
32984         T33,
32985         T34,
32986         T35,
32987         T36,
32988         T37,
32989         T38,
32990         T39,
32991         T40,
32992         T41,
32993         T42,
32994         T43,
32995         T44,
32996         T45,
32997         T46,
32998         T47,
32999         T48,
33000         T49,
33001         T50,
33002         T51,
33003         T52,
33004         T53,
33005         T54,
33006         T55,
33007         T56,
33008         T57,
33009         T58,
33010         T59,
33011         T60,
33012         T61,
33013         T62,
33014         T63,
33015         T64)> type_;
33016 
33017     Event operator()(const EnqueueArgs& enqueueArgs,
33018         T0 arg0,
33019         T1 arg1,
33020         T2 arg2,
33021         T3 arg3,
33022         T4 arg4,
33023         T5 arg5,
33024         T6 arg6,
33025         T7 arg7,
33026         T8 arg8,
33027         T9 arg9,
33028         T10 arg10,
33029         T11 arg11,
33030         T12 arg12,
33031         T13 arg13,
33032         T14 arg14,
33033         T15 arg15,
33034         T16 arg16,
33035         T17 arg17,
33036         T18 arg18,
33037         T19 arg19,
33038         T20 arg20,
33039         T21 arg21,
33040         T22 arg22,
33041         T23 arg23,
33042         T24 arg24,
33043         T25 arg25,
33044         T26 arg26,
33045         T27 arg27,
33046         T28 arg28,
33047         T29 arg29,
33048         T30 arg30,
33049         T31 arg31,
33050         T32 arg32,
33051         T33 arg33,
33052         T34 arg34,
33053         T35 arg35,
33054         T36 arg36,
33055         T37 arg37,
33056         T38 arg38,
33057         T39 arg39,
33058         T40 arg40,
33059         T41 arg41,
33060         T42 arg42,
33061         T43 arg43,
33062         T44 arg44,
33063         T45 arg45,
33064         T46 arg46,
33065         T47 arg47,
33066         T48 arg48,
33067         T49 arg49,
33068         T50 arg50,
33069         T51 arg51,
33070         T52 arg52,
33071         T53 arg53,
33072         T54 arg54,
33073         T55 arg55,
33074         T56 arg56,
33075         T57 arg57,
33076         T58 arg58,
33077         T59 arg59,
33078         T60 arg60,
33079         T61 arg61,
33080         T62 arg62,
33081         T63 arg63,
33082         T64 arg64)
33083     {
33084         return functor_(
33085             enqueueArgs,
33086             arg0,
33087             arg1,
33088             arg2,
33089             arg3,
33090             arg4,
33091             arg5,
33092             arg6,
33093             arg7,
33094             arg8,
33095             arg9,
33096             arg10,
33097             arg11,
33098             arg12,
33099             arg13,
33100             arg14,
33101             arg15,
33102             arg16,
33103             arg17,
33104             arg18,
33105             arg19,
33106             arg20,
33107             arg21,
33108             arg22,
33109             arg23,
33110             arg24,
33111             arg25,
33112             arg26,
33113             arg27,
33114             arg28,
33115             arg29,
33116             arg30,
33117             arg31,
33118             arg32,
33119             arg33,
33120             arg34,
33121             arg35,
33122             arg36,
33123             arg37,
33124             arg38,
33125             arg39,
33126             arg40,
33127             arg41,
33128             arg42,
33129             arg43,
33130             arg44,
33131             arg45,
33132             arg46,
33133             arg47,
33134             arg48,
33135             arg49,
33136             arg50,
33137             arg51,
33138             arg52,
33139             arg53,
33140             arg54,
33141             arg55,
33142             arg56,
33143             arg57,
33144             arg58,
33145             arg59,
33146             arg60,
33147             arg61,
33148             arg62,
33149             arg63,
33150             arg64);
33151     }
33152 
33153     operator type_ ()    
33154     {
33155         return type_(*this);
33156     }
33157 
33158 };
33159 
33160 template<
33161     typename T0,
33162     typename T1,
33163     typename T2,
33164     typename T3,
33165     typename T4,
33166     typename T5,
33167     typename T6,
33168     typename T7,
33169     typename T8,
33170     typename T9,
33171     typename T10,
33172     typename T11,
33173     typename T12,
33174     typename T13,
33175     typename T14,
33176     typename T15,
33177     typename T16,
33178     typename T17,
33179     typename T18,
33180     typename T19,
33181     typename T20,
33182     typename T21,
33183     typename T22,
33184     typename T23,
33185     typename T24,
33186     typename T25,
33187     typename T26,
33188     typename T27,
33189     typename T28,
33190     typename T29,
33191     typename T30,
33192     typename T31,
33193     typename T32,
33194     typename T33,
33195     typename T34,
33196     typename T35,
33197     typename T36,
33198     typename T37,
33199     typename T38,
33200     typename T39,
33201     typename T40,
33202     typename T41,
33203     typename T42,
33204     typename T43,
33205     typename T44,
33206     typename T45,
33207     typename T46,
33208     typename T47,
33209     typename T48,
33210     typename T49,
33211     typename T50,
33212     typename T51,
33213     typename T52,
33214     typename T53,
33215     typename T54,
33216     typename T55,
33217     typename T56,
33218     typename T57,
33219     typename T58,
33220     typename T59,
33221     typename T60,
33222     typename T61,
33223     typename T62,
33224     typename T63,
33225     typename T64,
33226     typename T65>
33227 struct functionImplementation_<
33228     T0,
33229     T1,
33230     T2,
33231     T3,
33232     T4,
33233     T5,
33234     T6,
33235     T7,
33236     T8,
33237     T9,
33238     T10,
33239     T11,
33240     T12,
33241     T13,
33242     T14,
33243     T15,
33244     T16,
33245     T17,
33246     T18,
33247     T19,
33248     T20,
33249     T21,
33250     T22,
33251     T23,
33252     T24,
33253     T25,
33254     T26,
33255     T27,
33256     T28,
33257     T29,
33258     T30,
33259     T31,
33260     T32,
33261     T33,
33262     T34,
33263     T35,
33264     T36,
33265     T37,
33266     T38,
33267     T39,
33268     T40,
33269     T41,
33270     T42,
33271     T43,
33272     T44,
33273     T45,
33274     T46,
33275     T47,
33276     T48,
33277     T49,
33278     T50,
33279     T51,
33280     T52,
33281     T53,
33282     T54,
33283     T55,
33284     T56,
33285     T57,
33286     T58,
33287     T59,
33288     T60,
33289     T61,
33290     T62,
33291     T63,
33292     T64,
33293     T65,
33294     NullType,
33295     NullType,
33296     NullType,
33297     NullType,
33298     NullType,
33299     NullType,
33300     NullType,
33301     NullType,
33302     NullType,
33303     NullType,
33304     NullType,
33305     NullType,
33306     NullType,
33307     NullType,
33308     NullType,
33309     NullType,
33310     NullType,
33311     NullType,
33312     NullType,
33313     NullType,
33314     NullType,
33315     NullType,
33316     NullType,
33317     NullType,
33318     NullType,
33319     NullType,
33320     NullType,
33321     NullType,
33322     NullType,
33323     NullType,
33324     NullType,
33325     NullType,
33326     NullType,
33327     NullType,
33328     NullType,
33329     NullType,
33330     NullType,
33331     NullType,
33332     NullType,
33333     NullType,
33334     NullType,
33335     NullType,
33336     NullType,
33337     NullType,
33338     NullType,
33339     NullType,
33340     NullType,
33341     NullType,
33342     NullType,
33343     NullType,
33344     NullType,
33345     NullType,
33346     NullType,
33347     NullType,
33348     NullType,
33349     NullType,
33350     NullType,
33351     NullType,
33352     NullType,
33353     NullType,
33354     NullType,
33355     NullType>
33356 {
33357     typedef detail::KernelFunctorGlobal<
33358         T0,
33359         T1,
33360         T2,
33361         T3,
33362         T4,
33363         T5,
33364         T6,
33365         T7,
33366         T8,
33367         T9,
33368         T10,
33369         T11,
33370         T12,
33371         T13,
33372         T14,
33373         T15,
33374         T16,
33375         T17,
33376         T18,
33377         T19,
33378         T20,
33379         T21,
33380         T22,
33381         T23,
33382         T24,
33383         T25,
33384         T26,
33385         T27,
33386         T28,
33387         T29,
33388         T30,
33389         T31,
33390         T32,
33391         T33,
33392         T34,
33393         T35,
33394         T36,
33395         T37,
33396         T38,
33397         T39,
33398         T40,
33399         T41,
33400         T42,
33401         T43,
33402         T44,
33403         T45,
33404         T46,
33405         T47,
33406         T48,
33407         T49,
33408         T50,
33409         T51,
33410         T52,
33411         T53,
33412         T54,
33413         T55,
33414         T56,
33415         T57,
33416         T58,
33417         T59,
33418         T60,
33419         T61,
33420         T62,
33421         T63,
33422         T64,
33423         T65,
33424         NullType,
33425         NullType,
33426         NullType,
33427         NullType,
33428         NullType,
33429         NullType,
33430         NullType,
33431         NullType,
33432         NullType,
33433         NullType,
33434         NullType,
33435         NullType,
33436         NullType,
33437         NullType,
33438         NullType,
33439         NullType,
33440         NullType,
33441         NullType,
33442         NullType,
33443         NullType,
33444         NullType,
33445         NullType,
33446         NullType,
33447         NullType,
33448         NullType,
33449         NullType,
33450         NullType,
33451         NullType,
33452         NullType,
33453         NullType,
33454         NullType,
33455         NullType,
33456         NullType,
33457         NullType,
33458         NullType,
33459         NullType,
33460         NullType,
33461         NullType,
33462         NullType,
33463         NullType,
33464         NullType,
33465         NullType,
33466         NullType,
33467         NullType,
33468         NullType,
33469         NullType,
33470         NullType,
33471         NullType,
33472         NullType,
33473         NullType,
33474         NullType,
33475         NullType,
33476         NullType,
33477         NullType,
33478         NullType,
33479         NullType,
33480         NullType,
33481         NullType,
33482         NullType,
33483         NullType,
33484         NullType,
33485         NullType> FunctorType;
33486 
33487     FunctorType functor_;
33488 
33489     functionImplementation_(const FunctorType &functor) :
33490         functor_(functor)
33491     {
33492     }
33493         
33494     typedef std::tr1::function<Event (
33495         const EnqueueArgs&,
33496         T0,
33497         T1,
33498         T2,
33499         T3,
33500         T4,
33501         T5,
33502         T6,
33503         T7,
33504         T8,
33505         T9,
33506         T10,
33507         T11,
33508         T12,
33509         T13,
33510         T14,
33511         T15,
33512         T16,
33513         T17,
33514         T18,
33515         T19,
33516         T20,
33517         T21,
33518         T22,
33519         T23,
33520         T24,
33521         T25,
33522         T26,
33523         T27,
33524         T28,
33525         T29,
33526         T30,
33527         T31,
33528         T32,
33529         T33,
33530         T34,
33531         T35,
33532         T36,
33533         T37,
33534         T38,
33535         T39,
33536         T40,
33537         T41,
33538         T42,
33539         T43,
33540         T44,
33541         T45,
33542         T46,
33543         T47,
33544         T48,
33545         T49,
33546         T50,
33547         T51,
33548         T52,
33549         T53,
33550         T54,
33551         T55,
33552         T56,
33553         T57,
33554         T58,
33555         T59,
33556         T60,
33557         T61,
33558         T62,
33559         T63,
33560         T64,
33561         T65)> type_;
33562 
33563     Event operator()(const EnqueueArgs& enqueueArgs,
33564         T0 arg0,
33565         T1 arg1,
33566         T2 arg2,
33567         T3 arg3,
33568         T4 arg4,
33569         T5 arg5,
33570         T6 arg6,
33571         T7 arg7,
33572         T8 arg8,
33573         T9 arg9,
33574         T10 arg10,
33575         T11 arg11,
33576         T12 arg12,
33577         T13 arg13,
33578         T14 arg14,
33579         T15 arg15,
33580         T16 arg16,
33581         T17 arg17,
33582         T18 arg18,
33583         T19 arg19,
33584         T20 arg20,
33585         T21 arg21,
33586         T22 arg22,
33587         T23 arg23,
33588         T24 arg24,
33589         T25 arg25,
33590         T26 arg26,
33591         T27 arg27,
33592         T28 arg28,
33593         T29 arg29,
33594         T30 arg30,
33595         T31 arg31,
33596         T32 arg32,
33597         T33 arg33,
33598         T34 arg34,
33599         T35 arg35,
33600         T36 arg36,
33601         T37 arg37,
33602         T38 arg38,
33603         T39 arg39,
33604         T40 arg40,
33605         T41 arg41,
33606         T42 arg42,
33607         T43 arg43,
33608         T44 arg44,
33609         T45 arg45,
33610         T46 arg46,
33611         T47 arg47,
33612         T48 arg48,
33613         T49 arg49,
33614         T50 arg50,
33615         T51 arg51,
33616         T52 arg52,
33617         T53 arg53,
33618         T54 arg54,
33619         T55 arg55,
33620         T56 arg56,
33621         T57 arg57,
33622         T58 arg58,
33623         T59 arg59,
33624         T60 arg60,
33625         T61 arg61,
33626         T62 arg62,
33627         T63 arg63,
33628         T64 arg64,
33629         T65 arg65)
33630     {
33631         return functor_(
33632             enqueueArgs,
33633             arg0,
33634             arg1,
33635             arg2,
33636             arg3,
33637             arg4,
33638             arg5,
33639             arg6,
33640             arg7,
33641             arg8,
33642             arg9,
33643             arg10,
33644             arg11,
33645             arg12,
33646             arg13,
33647             arg14,
33648             arg15,
33649             arg16,
33650             arg17,
33651             arg18,
33652             arg19,
33653             arg20,
33654             arg21,
33655             arg22,
33656             arg23,
33657             arg24,
33658             arg25,
33659             arg26,
33660             arg27,
33661             arg28,
33662             arg29,
33663             arg30,
33664             arg31,
33665             arg32,
33666             arg33,
33667             arg34,
33668             arg35,
33669             arg36,
33670             arg37,
33671             arg38,
33672             arg39,
33673             arg40,
33674             arg41,
33675             arg42,
33676             arg43,
33677             arg44,
33678             arg45,
33679             arg46,
33680             arg47,
33681             arg48,
33682             arg49,
33683             arg50,
33684             arg51,
33685             arg52,
33686             arg53,
33687             arg54,
33688             arg55,
33689             arg56,
33690             arg57,
33691             arg58,
33692             arg59,
33693             arg60,
33694             arg61,
33695             arg62,
33696             arg63,
33697             arg64,
33698             arg65);
33699     }
33700 
33701     operator type_ ()    
33702     {
33703         return type_(*this);
33704     }
33705 
33706 };
33707 
33708 template<
33709     typename T0,
33710     typename T1,
33711     typename T2,
33712     typename T3,
33713     typename T4,
33714     typename T5,
33715     typename T6,
33716     typename T7,
33717     typename T8,
33718     typename T9,
33719     typename T10,
33720     typename T11,
33721     typename T12,
33722     typename T13,
33723     typename T14,
33724     typename T15,
33725     typename T16,
33726     typename T17,
33727     typename T18,
33728     typename T19,
33729     typename T20,
33730     typename T21,
33731     typename T22,
33732     typename T23,
33733     typename T24,
33734     typename T25,
33735     typename T26,
33736     typename T27,
33737     typename T28,
33738     typename T29,
33739     typename T30,
33740     typename T31,
33741     typename T32,
33742     typename T33,
33743     typename T34,
33744     typename T35,
33745     typename T36,
33746     typename T37,
33747     typename T38,
33748     typename T39,
33749     typename T40,
33750     typename T41,
33751     typename T42,
33752     typename T43,
33753     typename T44,
33754     typename T45,
33755     typename T46,
33756     typename T47,
33757     typename T48,
33758     typename T49,
33759     typename T50,
33760     typename T51,
33761     typename T52,
33762     typename T53,
33763     typename T54,
33764     typename T55,
33765     typename T56,
33766     typename T57,
33767     typename T58,
33768     typename T59,
33769     typename T60,
33770     typename T61,
33771     typename T62,
33772     typename T63,
33773     typename T64,
33774     typename T65,
33775     typename T66>
33776 struct functionImplementation_<
33777     T0,
33778     T1,
33779     T2,
33780     T3,
33781     T4,
33782     T5,
33783     T6,
33784     T7,
33785     T8,
33786     T9,
33787     T10,
33788     T11,
33789     T12,
33790     T13,
33791     T14,
33792     T15,
33793     T16,
33794     T17,
33795     T18,
33796     T19,
33797     T20,
33798     T21,
33799     T22,
33800     T23,
33801     T24,
33802     T25,
33803     T26,
33804     T27,
33805     T28,
33806     T29,
33807     T30,
33808     T31,
33809     T32,
33810     T33,
33811     T34,
33812     T35,
33813     T36,
33814     T37,
33815     T38,
33816     T39,
33817     T40,
33818     T41,
33819     T42,
33820     T43,
33821     T44,
33822     T45,
33823     T46,
33824     T47,
33825     T48,
33826     T49,
33827     T50,
33828     T51,
33829     T52,
33830     T53,
33831     T54,
33832     T55,
33833     T56,
33834     T57,
33835     T58,
33836     T59,
33837     T60,
33838     T61,
33839     T62,
33840     T63,
33841     T64,
33842     T65,
33843     T66,
33844     NullType,
33845     NullType,
33846     NullType,
33847     NullType,
33848     NullType,
33849     NullType,
33850     NullType,
33851     NullType,
33852     NullType,
33853     NullType,
33854     NullType,
33855     NullType,
33856     NullType,
33857     NullType,
33858     NullType,
33859     NullType,
33860     NullType,
33861     NullType,
33862     NullType,
33863     NullType,
33864     NullType,
33865     NullType,
33866     NullType,
33867     NullType,
33868     NullType,
33869     NullType,
33870     NullType,
33871     NullType,
33872     NullType,
33873     NullType,
33874     NullType,
33875     NullType,
33876     NullType,
33877     NullType,
33878     NullType,
33879     NullType,
33880     NullType,
33881     NullType,
33882     NullType,
33883     NullType,
33884     NullType,
33885     NullType,
33886     NullType,
33887     NullType,
33888     NullType,
33889     NullType,
33890     NullType,
33891     NullType,
33892     NullType,
33893     NullType,
33894     NullType,
33895     NullType,
33896     NullType,
33897     NullType,
33898     NullType,
33899     NullType,
33900     NullType,
33901     NullType,
33902     NullType,
33903     NullType,
33904     NullType>
33905 {
33906     typedef detail::KernelFunctorGlobal<
33907         T0,
33908         T1,
33909         T2,
33910         T3,
33911         T4,
33912         T5,
33913         T6,
33914         T7,
33915         T8,
33916         T9,
33917         T10,
33918         T11,
33919         T12,
33920         T13,
33921         T14,
33922         T15,
33923         T16,
33924         T17,
33925         T18,
33926         T19,
33927         T20,
33928         T21,
33929         T22,
33930         T23,
33931         T24,
33932         T25,
33933         T26,
33934         T27,
33935         T28,
33936         T29,
33937         T30,
33938         T31,
33939         T32,
33940         T33,
33941         T34,
33942         T35,
33943         T36,
33944         T37,
33945         T38,
33946         T39,
33947         T40,
33948         T41,
33949         T42,
33950         T43,
33951         T44,
33952         T45,
33953         T46,
33954         T47,
33955         T48,
33956         T49,
33957         T50,
33958         T51,
33959         T52,
33960         T53,
33961         T54,
33962         T55,
33963         T56,
33964         T57,
33965         T58,
33966         T59,
33967         T60,
33968         T61,
33969         T62,
33970         T63,
33971         T64,
33972         T65,
33973         T66,
33974         NullType,
33975         NullType,
33976         NullType,
33977         NullType,
33978         NullType,
33979         NullType,
33980         NullType,
33981         NullType,
33982         NullType,
33983         NullType,
33984         NullType,
33985         NullType,
33986         NullType,
33987         NullType,
33988         NullType,
33989         NullType,
33990         NullType,
33991         NullType,
33992         NullType,
33993         NullType,
33994         NullType,
33995         NullType,
33996         NullType,
33997         NullType,
33998         NullType,
33999         NullType,
34000         NullType,
34001         NullType,
34002         NullType,
34003         NullType,
34004         NullType,
34005         NullType,
34006         NullType,
34007         NullType,
34008         NullType,
34009         NullType,
34010         NullType,
34011         NullType,
34012         NullType,
34013         NullType,
34014         NullType,
34015         NullType,
34016         NullType,
34017         NullType,
34018         NullType,
34019         NullType,
34020         NullType,
34021         NullType,
34022         NullType,
34023         NullType,
34024         NullType,
34025         NullType,
34026         NullType,
34027         NullType,
34028         NullType,
34029         NullType,
34030         NullType,
34031         NullType,
34032         NullType,
34033         NullType,
34034         NullType> FunctorType;
34035 
34036     FunctorType functor_;
34037 
34038     functionImplementation_(const FunctorType &functor) :
34039         functor_(functor)
34040     {
34041     }
34042         
34043     typedef std::tr1::function<Event (
34044         const EnqueueArgs&,
34045         T0,
34046         T1,
34047         T2,
34048         T3,
34049         T4,
34050         T5,
34051         T6,
34052         T7,
34053         T8,
34054         T9,
34055         T10,
34056         T11,
34057         T12,
34058         T13,
34059         T14,
34060         T15,
34061         T16,
34062         T17,
34063         T18,
34064         T19,
34065         T20,
34066         T21,
34067         T22,
34068         T23,
34069         T24,
34070         T25,
34071         T26,
34072         T27,
34073         T28,
34074         T29,
34075         T30,
34076         T31,
34077         T32,
34078         T33,
34079         T34,
34080         T35,
34081         T36,
34082         T37,
34083         T38,
34084         T39,
34085         T40,
34086         T41,
34087         T42,
34088         T43,
34089         T44,
34090         T45,
34091         T46,
34092         T47,
34093         T48,
34094         T49,
34095         T50,
34096         T51,
34097         T52,
34098         T53,
34099         T54,
34100         T55,
34101         T56,
34102         T57,
34103         T58,
34104         T59,
34105         T60,
34106         T61,
34107         T62,
34108         T63,
34109         T64,
34110         T65,
34111         T66)> type_;
34112 
34113     Event operator()(const EnqueueArgs& enqueueArgs,
34114         T0 arg0,
34115         T1 arg1,
34116         T2 arg2,
34117         T3 arg3,
34118         T4 arg4,
34119         T5 arg5,
34120         T6 arg6,
34121         T7 arg7,
34122         T8 arg8,
34123         T9 arg9,
34124         T10 arg10,
34125         T11 arg11,
34126         T12 arg12,
34127         T13 arg13,
34128         T14 arg14,
34129         T15 arg15,
34130         T16 arg16,
34131         T17 arg17,
34132         T18 arg18,
34133         T19 arg19,
34134         T20 arg20,
34135         T21 arg21,
34136         T22 arg22,
34137         T23 arg23,
34138         T24 arg24,
34139         T25 arg25,
34140         T26 arg26,
34141         T27 arg27,
34142         T28 arg28,
34143         T29 arg29,
34144         T30 arg30,
34145         T31 arg31,
34146         T32 arg32,
34147         T33 arg33,
34148         T34 arg34,
34149         T35 arg35,
34150         T36 arg36,
34151         T37 arg37,
34152         T38 arg38,
34153         T39 arg39,
34154         T40 arg40,
34155         T41 arg41,
34156         T42 arg42,
34157         T43 arg43,
34158         T44 arg44,
34159         T45 arg45,
34160         T46 arg46,
34161         T47 arg47,
34162         T48 arg48,
34163         T49 arg49,
34164         T50 arg50,
34165         T51 arg51,
34166         T52 arg52,
34167         T53 arg53,
34168         T54 arg54,
34169         T55 arg55,
34170         T56 arg56,
34171         T57 arg57,
34172         T58 arg58,
34173         T59 arg59,
34174         T60 arg60,
34175         T61 arg61,
34176         T62 arg62,
34177         T63 arg63,
34178         T64 arg64,
34179         T65 arg65,
34180         T66 arg66)
34181     {
34182         return functor_(
34183             enqueueArgs,
34184             arg0,
34185             arg1,
34186             arg2,
34187             arg3,
34188             arg4,
34189             arg5,
34190             arg6,
34191             arg7,
34192             arg8,
34193             arg9,
34194             arg10,
34195             arg11,
34196             arg12,
34197             arg13,
34198             arg14,
34199             arg15,
34200             arg16,
34201             arg17,
34202             arg18,
34203             arg19,
34204             arg20,
34205             arg21,
34206             arg22,
34207             arg23,
34208             arg24,
34209             arg25,
34210             arg26,
34211             arg27,
34212             arg28,
34213             arg29,
34214             arg30,
34215             arg31,
34216             arg32,
34217             arg33,
34218             arg34,
34219             arg35,
34220             arg36,
34221             arg37,
34222             arg38,
34223             arg39,
34224             arg40,
34225             arg41,
34226             arg42,
34227             arg43,
34228             arg44,
34229             arg45,
34230             arg46,
34231             arg47,
34232             arg48,
34233             arg49,
34234             arg50,
34235             arg51,
34236             arg52,
34237             arg53,
34238             arg54,
34239             arg55,
34240             arg56,
34241             arg57,
34242             arg58,
34243             arg59,
34244             arg60,
34245             arg61,
34246             arg62,
34247             arg63,
34248             arg64,
34249             arg65,
34250             arg66);
34251     }
34252 
34253     operator type_ ()    
34254     {
34255         return type_(*this);
34256     }
34257 
34258 };
34259 
34260 template<
34261     typename T0,
34262     typename T1,
34263     typename T2,
34264     typename T3,
34265     typename T4,
34266     typename T5,
34267     typename T6,
34268     typename T7,
34269     typename T8,
34270     typename T9,
34271     typename T10,
34272     typename T11,
34273     typename T12,
34274     typename T13,
34275     typename T14,
34276     typename T15,
34277     typename T16,
34278     typename T17,
34279     typename T18,
34280     typename T19,
34281     typename T20,
34282     typename T21,
34283     typename T22,
34284     typename T23,
34285     typename T24,
34286     typename T25,
34287     typename T26,
34288     typename T27,
34289     typename T28,
34290     typename T29,
34291     typename T30,
34292     typename T31,
34293     typename T32,
34294     typename T33,
34295     typename T34,
34296     typename T35,
34297     typename T36,
34298     typename T37,
34299     typename T38,
34300     typename T39,
34301     typename T40,
34302     typename T41,
34303     typename T42,
34304     typename T43,
34305     typename T44,
34306     typename T45,
34307     typename T46,
34308     typename T47,
34309     typename T48,
34310     typename T49,
34311     typename T50,
34312     typename T51,
34313     typename T52,
34314     typename T53,
34315     typename T54,
34316     typename T55,
34317     typename T56,
34318     typename T57,
34319     typename T58,
34320     typename T59,
34321     typename T60,
34322     typename T61,
34323     typename T62,
34324     typename T63,
34325     typename T64,
34326     typename T65,
34327     typename T66,
34328     typename T67>
34329 struct functionImplementation_<
34330     T0,
34331     T1,
34332     T2,
34333     T3,
34334     T4,
34335     T5,
34336     T6,
34337     T7,
34338     T8,
34339     T9,
34340     T10,
34341     T11,
34342     T12,
34343     T13,
34344     T14,
34345     T15,
34346     T16,
34347     T17,
34348     T18,
34349     T19,
34350     T20,
34351     T21,
34352     T22,
34353     T23,
34354     T24,
34355     T25,
34356     T26,
34357     T27,
34358     T28,
34359     T29,
34360     T30,
34361     T31,
34362     T32,
34363     T33,
34364     T34,
34365     T35,
34366     T36,
34367     T37,
34368     T38,
34369     T39,
34370     T40,
34371     T41,
34372     T42,
34373     T43,
34374     T44,
34375     T45,
34376     T46,
34377     T47,
34378     T48,
34379     T49,
34380     T50,
34381     T51,
34382     T52,
34383     T53,
34384     T54,
34385     T55,
34386     T56,
34387     T57,
34388     T58,
34389     T59,
34390     T60,
34391     T61,
34392     T62,
34393     T63,
34394     T64,
34395     T65,
34396     T66,
34397     T67,
34398     NullType,
34399     NullType,
34400     NullType,
34401     NullType,
34402     NullType,
34403     NullType,
34404     NullType,
34405     NullType,
34406     NullType,
34407     NullType,
34408     NullType,
34409     NullType,
34410     NullType,
34411     NullType,
34412     NullType,
34413     NullType,
34414     NullType,
34415     NullType,
34416     NullType,
34417     NullType,
34418     NullType,
34419     NullType,
34420     NullType,
34421     NullType,
34422     NullType,
34423     NullType,
34424     NullType,
34425     NullType,
34426     NullType,
34427     NullType,
34428     NullType,
34429     NullType,
34430     NullType,
34431     NullType,
34432     NullType,
34433     NullType,
34434     NullType,
34435     NullType,
34436     NullType,
34437     NullType,
34438     NullType,
34439     NullType,
34440     NullType,
34441     NullType,
34442     NullType,
34443     NullType,
34444     NullType,
34445     NullType,
34446     NullType,
34447     NullType,
34448     NullType,
34449     NullType,
34450     NullType,
34451     NullType,
34452     NullType,
34453     NullType,
34454     NullType,
34455     NullType,
34456     NullType,
34457     NullType>
34458 {
34459     typedef detail::KernelFunctorGlobal<
34460         T0,
34461         T1,
34462         T2,
34463         T3,
34464         T4,
34465         T5,
34466         T6,
34467         T7,
34468         T8,
34469         T9,
34470         T10,
34471         T11,
34472         T12,
34473         T13,
34474         T14,
34475         T15,
34476         T16,
34477         T17,
34478         T18,
34479         T19,
34480         T20,
34481         T21,
34482         T22,
34483         T23,
34484         T24,
34485         T25,
34486         T26,
34487         T27,
34488         T28,
34489         T29,
34490         T30,
34491         T31,
34492         T32,
34493         T33,
34494         T34,
34495         T35,
34496         T36,
34497         T37,
34498         T38,
34499         T39,
34500         T40,
34501         T41,
34502         T42,
34503         T43,
34504         T44,
34505         T45,
34506         T46,
34507         T47,
34508         T48,
34509         T49,
34510         T50,
34511         T51,
34512         T52,
34513         T53,
34514         T54,
34515         T55,
34516         T56,
34517         T57,
34518         T58,
34519         T59,
34520         T60,
34521         T61,
34522         T62,
34523         T63,
34524         T64,
34525         T65,
34526         T66,
34527         T67,
34528         NullType,
34529         NullType,
34530         NullType,
34531         NullType,
34532         NullType,
34533         NullType,
34534         NullType,
34535         NullType,
34536         NullType,
34537         NullType,
34538         NullType,
34539         NullType,
34540         NullType,
34541         NullType,
34542         NullType,
34543         NullType,
34544         NullType,
34545         NullType,
34546         NullType,
34547         NullType,
34548         NullType,
34549         NullType,
34550         NullType,
34551         NullType,
34552         NullType,
34553         NullType,
34554         NullType,
34555         NullType,
34556         NullType,
34557         NullType,
34558         NullType,
34559         NullType,
34560         NullType,
34561         NullType,
34562         NullType,
34563         NullType,
34564         NullType,
34565         NullType,
34566         NullType,
34567         NullType,
34568         NullType,
34569         NullType,
34570         NullType,
34571         NullType,
34572         NullType,
34573         NullType,
34574         NullType,
34575         NullType,
34576         NullType,
34577         NullType,
34578         NullType,
34579         NullType,
34580         NullType,
34581         NullType,
34582         NullType,
34583         NullType,
34584         NullType,
34585         NullType,
34586         NullType,
34587         NullType> FunctorType;
34588 
34589     FunctorType functor_;
34590 
34591     functionImplementation_(const FunctorType &functor) :
34592         functor_(functor)
34593     {
34594     }
34595         
34596     typedef std::tr1::function<Event (
34597         const EnqueueArgs&,
34598         T0,
34599         T1,
34600         T2,
34601         T3,
34602         T4,
34603         T5,
34604         T6,
34605         T7,
34606         T8,
34607         T9,
34608         T10,
34609         T11,
34610         T12,
34611         T13,
34612         T14,
34613         T15,
34614         T16,
34615         T17,
34616         T18,
34617         T19,
34618         T20,
34619         T21,
34620         T22,
34621         T23,
34622         T24,
34623         T25,
34624         T26,
34625         T27,
34626         T28,
34627         T29,
34628         T30,
34629         T31,
34630         T32,
34631         T33,
34632         T34,
34633         T35,
34634         T36,
34635         T37,
34636         T38,
34637         T39,
34638         T40,
34639         T41,
34640         T42,
34641         T43,
34642         T44,
34643         T45,
34644         T46,
34645         T47,
34646         T48,
34647         T49,
34648         T50,
34649         T51,
34650         T52,
34651         T53,
34652         T54,
34653         T55,
34654         T56,
34655         T57,
34656         T58,
34657         T59,
34658         T60,
34659         T61,
34660         T62,
34661         T63,
34662         T64,
34663         T65,
34664         T66,
34665         T67)> type_;
34666 
34667     Event operator()(const EnqueueArgs& enqueueArgs,
34668         T0 arg0,
34669         T1 arg1,
34670         T2 arg2,
34671         T3 arg3,
34672         T4 arg4,
34673         T5 arg5,
34674         T6 arg6,
34675         T7 arg7,
34676         T8 arg8,
34677         T9 arg9,
34678         T10 arg10,
34679         T11 arg11,
34680         T12 arg12,
34681         T13 arg13,
34682         T14 arg14,
34683         T15 arg15,
34684         T16 arg16,
34685         T17 arg17,
34686         T18 arg18,
34687         T19 arg19,
34688         T20 arg20,
34689         T21 arg21,
34690         T22 arg22,
34691         T23 arg23,
34692         T24 arg24,
34693         T25 arg25,
34694         T26 arg26,
34695         T27 arg27,
34696         T28 arg28,
34697         T29 arg29,
34698         T30 arg30,
34699         T31 arg31,
34700         T32 arg32,
34701         T33 arg33,
34702         T34 arg34,
34703         T35 arg35,
34704         T36 arg36,
34705         T37 arg37,
34706         T38 arg38,
34707         T39 arg39,
34708         T40 arg40,
34709         T41 arg41,
34710         T42 arg42,
34711         T43 arg43,
34712         T44 arg44,
34713         T45 arg45,
34714         T46 arg46,
34715         T47 arg47,
34716         T48 arg48,
34717         T49 arg49,
34718         T50 arg50,
34719         T51 arg51,
34720         T52 arg52,
34721         T53 arg53,
34722         T54 arg54,
34723         T55 arg55,
34724         T56 arg56,
34725         T57 arg57,
34726         T58 arg58,
34727         T59 arg59,
34728         T60 arg60,
34729         T61 arg61,
34730         T62 arg62,
34731         T63 arg63,
34732         T64 arg64,
34733         T65 arg65,
34734         T66 arg66,
34735         T67 arg67)
34736     {
34737         return functor_(
34738             enqueueArgs,
34739             arg0,
34740             arg1,
34741             arg2,
34742             arg3,
34743             arg4,
34744             arg5,
34745             arg6,
34746             arg7,
34747             arg8,
34748             arg9,
34749             arg10,
34750             arg11,
34751             arg12,
34752             arg13,
34753             arg14,
34754             arg15,
34755             arg16,
34756             arg17,
34757             arg18,
34758             arg19,
34759             arg20,
34760             arg21,
34761             arg22,
34762             arg23,
34763             arg24,
34764             arg25,
34765             arg26,
34766             arg27,
34767             arg28,
34768             arg29,
34769             arg30,
34770             arg31,
34771             arg32,
34772             arg33,
34773             arg34,
34774             arg35,
34775             arg36,
34776             arg37,
34777             arg38,
34778             arg39,
34779             arg40,
34780             arg41,
34781             arg42,
34782             arg43,
34783             arg44,
34784             arg45,
34785             arg46,
34786             arg47,
34787             arg48,
34788             arg49,
34789             arg50,
34790             arg51,
34791             arg52,
34792             arg53,
34793             arg54,
34794             arg55,
34795             arg56,
34796             arg57,
34797             arg58,
34798             arg59,
34799             arg60,
34800             arg61,
34801             arg62,
34802             arg63,
34803             arg64,
34804             arg65,
34805             arg66,
34806             arg67);
34807     }
34808 
34809     operator type_ ()    
34810     {
34811         return type_(*this);
34812     }
34813 
34814 };
34815 
34816 template<
34817     typename T0,
34818     typename T1,
34819     typename T2,
34820     typename T3,
34821     typename T4,
34822     typename T5,
34823     typename T6,
34824     typename T7,
34825     typename T8,
34826     typename T9,
34827     typename T10,
34828     typename T11,
34829     typename T12,
34830     typename T13,
34831     typename T14,
34832     typename T15,
34833     typename T16,
34834     typename T17,
34835     typename T18,
34836     typename T19,
34837     typename T20,
34838     typename T21,
34839     typename T22,
34840     typename T23,
34841     typename T24,
34842     typename T25,
34843     typename T26,
34844     typename T27,
34845     typename T28,
34846     typename T29,
34847     typename T30,
34848     typename T31,
34849     typename T32,
34850     typename T33,
34851     typename T34,
34852     typename T35,
34853     typename T36,
34854     typename T37,
34855     typename T38,
34856     typename T39,
34857     typename T40,
34858     typename T41,
34859     typename T42,
34860     typename T43,
34861     typename T44,
34862     typename T45,
34863     typename T46,
34864     typename T47,
34865     typename T48,
34866     typename T49,
34867     typename T50,
34868     typename T51,
34869     typename T52,
34870     typename T53,
34871     typename T54,
34872     typename T55,
34873     typename T56,
34874     typename T57,
34875     typename T58,
34876     typename T59,
34877     typename T60,
34878     typename T61,
34879     typename T62,
34880     typename T63,
34881     typename T64,
34882     typename T65,
34883     typename T66,
34884     typename T67,
34885     typename T68>
34886 struct functionImplementation_<
34887     T0,
34888     T1,
34889     T2,
34890     T3,
34891     T4,
34892     T5,
34893     T6,
34894     T7,
34895     T8,
34896     T9,
34897     T10,
34898     T11,
34899     T12,
34900     T13,
34901     T14,
34902     T15,
34903     T16,
34904     T17,
34905     T18,
34906     T19,
34907     T20,
34908     T21,
34909     T22,
34910     T23,
34911     T24,
34912     T25,
34913     T26,
34914     T27,
34915     T28,
34916     T29,
34917     T30,
34918     T31,
34919     T32,
34920     T33,
34921     T34,
34922     T35,
34923     T36,
34924     T37,
34925     T38,
34926     T39,
34927     T40,
34928     T41,
34929     T42,
34930     T43,
34931     T44,
34932     T45,
34933     T46,
34934     T47,
34935     T48,
34936     T49,
34937     T50,
34938     T51,
34939     T52,
34940     T53,
34941     T54,
34942     T55,
34943     T56,
34944     T57,
34945     T58,
34946     T59,
34947     T60,
34948     T61,
34949     T62,
34950     T63,
34951     T64,
34952     T65,
34953     T66,
34954     T67,
34955     T68,
34956     NullType,
34957     NullType,
34958     NullType,
34959     NullType,
34960     NullType,
34961     NullType,
34962     NullType,
34963     NullType,
34964     NullType,
34965     NullType,
34966     NullType,
34967     NullType,
34968     NullType,
34969     NullType,
34970     NullType,
34971     NullType,
34972     NullType,
34973     NullType,
34974     NullType,
34975     NullType,
34976     NullType,
34977     NullType,
34978     NullType,
34979     NullType,
34980     NullType,
34981     NullType,
34982     NullType,
34983     NullType,
34984     NullType,
34985     NullType,
34986     NullType,
34987     NullType,
34988     NullType,
34989     NullType,
34990     NullType,
34991     NullType,
34992     NullType,
34993     NullType,
34994     NullType,
34995     NullType,
34996     NullType,
34997     NullType,
34998     NullType,
34999     NullType,
35000     NullType,
35001     NullType,
35002     NullType,
35003     NullType,
35004     NullType,
35005     NullType,
35006     NullType,
35007     NullType,
35008     NullType,
35009     NullType,
35010     NullType,
35011     NullType,
35012     NullType,
35013     NullType,
35014     NullType>
35015 {
35016     typedef detail::KernelFunctorGlobal<
35017         T0,
35018         T1,
35019         T2,
35020         T3,
35021         T4,
35022         T5,
35023         T6,
35024         T7,
35025         T8,
35026         T9,
35027         T10,
35028         T11,
35029         T12,
35030         T13,
35031         T14,
35032         T15,
35033         T16,
35034         T17,
35035         T18,
35036         T19,
35037         T20,
35038         T21,
35039         T22,
35040         T23,
35041         T24,
35042         T25,
35043         T26,
35044         T27,
35045         T28,
35046         T29,
35047         T30,
35048         T31,
35049         T32,
35050         T33,
35051         T34,
35052         T35,
35053         T36,
35054         T37,
35055         T38,
35056         T39,
35057         T40,
35058         T41,
35059         T42,
35060         T43,
35061         T44,
35062         T45,
35063         T46,
35064         T47,
35065         T48,
35066         T49,
35067         T50,
35068         T51,
35069         T52,
35070         T53,
35071         T54,
35072         T55,
35073         T56,
35074         T57,
35075         T58,
35076         T59,
35077         T60,
35078         T61,
35079         T62,
35080         T63,
35081         T64,
35082         T65,
35083         T66,
35084         T67,
35085         T68,
35086         NullType,
35087         NullType,
35088         NullType,
35089         NullType,
35090         NullType,
35091         NullType,
35092         NullType,
35093         NullType,
35094         NullType,
35095         NullType,
35096         NullType,
35097         NullType,
35098         NullType,
35099         NullType,
35100         NullType,
35101         NullType,
35102         NullType,
35103         NullType,
35104         NullType,
35105         NullType,
35106         NullType,
35107         NullType,
35108         NullType,
35109         NullType,
35110         NullType,
35111         NullType,
35112         NullType,
35113         NullType,
35114         NullType,
35115         NullType,
35116         NullType,
35117         NullType,
35118         NullType,
35119         NullType,
35120         NullType,
35121         NullType,
35122         NullType,
35123         NullType,
35124         NullType,
35125         NullType,
35126         NullType,
35127         NullType,
35128         NullType,
35129         NullType,
35130         NullType,
35131         NullType,
35132         NullType,
35133         NullType,
35134         NullType,
35135         NullType,
35136         NullType,
35137         NullType,
35138         NullType,
35139         NullType,
35140         NullType,
35141         NullType,
35142         NullType,
35143         NullType,
35144         NullType> FunctorType;
35145 
35146     FunctorType functor_;
35147 
35148     functionImplementation_(const FunctorType &functor) :
35149         functor_(functor)
35150     {
35151     }
35152         
35153     typedef std::tr1::function<Event (
35154         const EnqueueArgs&,
35155         T0,
35156         T1,
35157         T2,
35158         T3,
35159         T4,
35160         T5,
35161         T6,
35162         T7,
35163         T8,
35164         T9,
35165         T10,
35166         T11,
35167         T12,
35168         T13,
35169         T14,
35170         T15,
35171         T16,
35172         T17,
35173         T18,
35174         T19,
35175         T20,
35176         T21,
35177         T22,
35178         T23,
35179         T24,
35180         T25,
35181         T26,
35182         T27,
35183         T28,
35184         T29,
35185         T30,
35186         T31,
35187         T32,
35188         T33,
35189         T34,
35190         T35,
35191         T36,
35192         T37,
35193         T38,
35194         T39,
35195         T40,
35196         T41,
35197         T42,
35198         T43,
35199         T44,
35200         T45,
35201         T46,
35202         T47,
35203         T48,
35204         T49,
35205         T50,
35206         T51,
35207         T52,
35208         T53,
35209         T54,
35210         T55,
35211         T56,
35212         T57,
35213         T58,
35214         T59,
35215         T60,
35216         T61,
35217         T62,
35218         T63,
35219         T64,
35220         T65,
35221         T66,
35222         T67,
35223         T68)> type_;
35224 
35225     Event operator()(const EnqueueArgs& enqueueArgs,
35226         T0 arg0,
35227         T1 arg1,
35228         T2 arg2,
35229         T3 arg3,
35230         T4 arg4,
35231         T5 arg5,
35232         T6 arg6,
35233         T7 arg7,
35234         T8 arg8,
35235         T9 arg9,
35236         T10 arg10,
35237         T11 arg11,
35238         T12 arg12,
35239         T13 arg13,
35240         T14 arg14,
35241         T15 arg15,
35242         T16 arg16,
35243         T17 arg17,
35244         T18 arg18,
35245         T19 arg19,
35246         T20 arg20,
35247         T21 arg21,
35248         T22 arg22,
35249         T23 arg23,
35250         T24 arg24,
35251         T25 arg25,
35252         T26 arg26,
35253         T27 arg27,
35254         T28 arg28,
35255         T29 arg29,
35256         T30 arg30,
35257         T31 arg31,
35258         T32 arg32,
35259         T33 arg33,
35260         T34 arg34,
35261         T35 arg35,
35262         T36 arg36,
35263         T37 arg37,
35264         T38 arg38,
35265         T39 arg39,
35266         T40 arg40,
35267         T41 arg41,
35268         T42 arg42,
35269         T43 arg43,
35270         T44 arg44,
35271         T45 arg45,
35272         T46 arg46,
35273         T47 arg47,
35274         T48 arg48,
35275         T49 arg49,
35276         T50 arg50,
35277         T51 arg51,
35278         T52 arg52,
35279         T53 arg53,
35280         T54 arg54,
35281         T55 arg55,
35282         T56 arg56,
35283         T57 arg57,
35284         T58 arg58,
35285         T59 arg59,
35286         T60 arg60,
35287         T61 arg61,
35288         T62 arg62,
35289         T63 arg63,
35290         T64 arg64,
35291         T65 arg65,
35292         T66 arg66,
35293         T67 arg67,
35294         T68 arg68)
35295     {
35296         return functor_(
35297             enqueueArgs,
35298             arg0,
35299             arg1,
35300             arg2,
35301             arg3,
35302             arg4,
35303             arg5,
35304             arg6,
35305             arg7,
35306             arg8,
35307             arg9,
35308             arg10,
35309             arg11,
35310             arg12,
35311             arg13,
35312             arg14,
35313             arg15,
35314             arg16,
35315             arg17,
35316             arg18,
35317             arg19,
35318             arg20,
35319             arg21,
35320             arg22,
35321             arg23,
35322             arg24,
35323             arg25,
35324             arg26,
35325             arg27,
35326             arg28,
35327             arg29,
35328             arg30,
35329             arg31,
35330             arg32,
35331             arg33,
35332             arg34,
35333             arg35,
35334             arg36,
35335             arg37,
35336             arg38,
35337             arg39,
35338             arg40,
35339             arg41,
35340             arg42,
35341             arg43,
35342             arg44,
35343             arg45,
35344             arg46,
35345             arg47,
35346             arg48,
35347             arg49,
35348             arg50,
35349             arg51,
35350             arg52,
35351             arg53,
35352             arg54,
35353             arg55,
35354             arg56,
35355             arg57,
35356             arg58,
35357             arg59,
35358             arg60,
35359             arg61,
35360             arg62,
35361             arg63,
35362             arg64,
35363             arg65,
35364             arg66,
35365             arg67,
35366             arg68);
35367     }
35368 
35369     operator type_ ()    
35370     {
35371         return type_(*this);
35372     }
35373 
35374 };
35375 
35376 template<
35377     typename T0,
35378     typename T1,
35379     typename T2,
35380     typename T3,
35381     typename T4,
35382     typename T5,
35383     typename T6,
35384     typename T7,
35385     typename T8,
35386     typename T9,
35387     typename T10,
35388     typename T11,
35389     typename T12,
35390     typename T13,
35391     typename T14,
35392     typename T15,
35393     typename T16,
35394     typename T17,
35395     typename T18,
35396     typename T19,
35397     typename T20,
35398     typename T21,
35399     typename T22,
35400     typename T23,
35401     typename T24,
35402     typename T25,
35403     typename T26,
35404     typename T27,
35405     typename T28,
35406     typename T29,
35407     typename T30,
35408     typename T31,
35409     typename T32,
35410     typename T33,
35411     typename T34,
35412     typename T35,
35413     typename T36,
35414     typename T37,
35415     typename T38,
35416     typename T39,
35417     typename T40,
35418     typename T41,
35419     typename T42,
35420     typename T43,
35421     typename T44,
35422     typename T45,
35423     typename T46,
35424     typename T47,
35425     typename T48,
35426     typename T49,
35427     typename T50,
35428     typename T51,
35429     typename T52,
35430     typename T53,
35431     typename T54,
35432     typename T55,
35433     typename T56,
35434     typename T57,
35435     typename T58,
35436     typename T59,
35437     typename T60,
35438     typename T61,
35439     typename T62,
35440     typename T63,
35441     typename T64,
35442     typename T65,
35443     typename T66,
35444     typename T67,
35445     typename T68,
35446     typename T69>
35447 struct functionImplementation_<
35448     T0,
35449     T1,
35450     T2,
35451     T3,
35452     T4,
35453     T5,
35454     T6,
35455     T7,
35456     T8,
35457     T9,
35458     T10,
35459     T11,
35460     T12,
35461     T13,
35462     T14,
35463     T15,
35464     T16,
35465     T17,
35466     T18,
35467     T19,
35468     T20,
35469     T21,
35470     T22,
35471     T23,
35472     T24,
35473     T25,
35474     T26,
35475     T27,
35476     T28,
35477     T29,
35478     T30,
35479     T31,
35480     T32,
35481     T33,
35482     T34,
35483     T35,
35484     T36,
35485     T37,
35486     T38,
35487     T39,
35488     T40,
35489     T41,
35490     T42,
35491     T43,
35492     T44,
35493     T45,
35494     T46,
35495     T47,
35496     T48,
35497     T49,
35498     T50,
35499     T51,
35500     T52,
35501     T53,
35502     T54,
35503     T55,
35504     T56,
35505     T57,
35506     T58,
35507     T59,
35508     T60,
35509     T61,
35510     T62,
35511     T63,
35512     T64,
35513     T65,
35514     T66,
35515     T67,
35516     T68,
35517     T69,
35518     NullType,
35519     NullType,
35520     NullType,
35521     NullType,
35522     NullType,
35523     NullType,
35524     NullType,
35525     NullType,
35526     NullType,
35527     NullType,
35528     NullType,
35529     NullType,
35530     NullType,
35531     NullType,
35532     NullType,
35533     NullType,
35534     NullType,
35535     NullType,
35536     NullType,
35537     NullType,
35538     NullType,
35539     NullType,
35540     NullType,
35541     NullType,
35542     NullType,
35543     NullType,
35544     NullType,
35545     NullType,
35546     NullType,
35547     NullType,
35548     NullType,
35549     NullType,
35550     NullType,
35551     NullType,
35552     NullType,
35553     NullType,
35554     NullType,
35555     NullType,
35556     NullType,
35557     NullType,
35558     NullType,
35559     NullType,
35560     NullType,
35561     NullType,
35562     NullType,
35563     NullType,
35564     NullType,
35565     NullType,
35566     NullType,
35567     NullType,
35568     NullType,
35569     NullType,
35570     NullType,
35571     NullType,
35572     NullType,
35573     NullType,
35574     NullType,
35575     NullType>
35576 {
35577     typedef detail::KernelFunctorGlobal<
35578         T0,
35579         T1,
35580         T2,
35581         T3,
35582         T4,
35583         T5,
35584         T6,
35585         T7,
35586         T8,
35587         T9,
35588         T10,
35589         T11,
35590         T12,
35591         T13,
35592         T14,
35593         T15,
35594         T16,
35595         T17,
35596         T18,
35597         T19,
35598         T20,
35599         T21,
35600         T22,
35601         T23,
35602         T24,
35603         T25,
35604         T26,
35605         T27,
35606         T28,
35607         T29,
35608         T30,
35609         T31,
35610         T32,
35611         T33,
35612         T34,
35613         T35,
35614         T36,
35615         T37,
35616         T38,
35617         T39,
35618         T40,
35619         T41,
35620         T42,
35621         T43,
35622         T44,
35623         T45,
35624         T46,
35625         T47,
35626         T48,
35627         T49,
35628         T50,
35629         T51,
35630         T52,
35631         T53,
35632         T54,
35633         T55,
35634         T56,
35635         T57,
35636         T58,
35637         T59,
35638         T60,
35639         T61,
35640         T62,
35641         T63,
35642         T64,
35643         T65,
35644         T66,
35645         T67,
35646         T68,
35647         T69,
35648         NullType,
35649         NullType,
35650         NullType,
35651         NullType,
35652         NullType,
35653         NullType,
35654         NullType,
35655         NullType,
35656         NullType,
35657         NullType,
35658         NullType,
35659         NullType,
35660         NullType,
35661         NullType,
35662         NullType,
35663         NullType,
35664         NullType,
35665         NullType,
35666         NullType,
35667         NullType,
35668         NullType,
35669         NullType,
35670         NullType,
35671         NullType,
35672         NullType,
35673         NullType,
35674         NullType,
35675         NullType,
35676         NullType,
35677         NullType,
35678         NullType,
35679         NullType,
35680         NullType,
35681         NullType,
35682         NullType,
35683         NullType,
35684         NullType,
35685         NullType,
35686         NullType,
35687         NullType,
35688         NullType,
35689         NullType,
35690         NullType,
35691         NullType,
35692         NullType,
35693         NullType,
35694         NullType,
35695         NullType,
35696         NullType,
35697         NullType,
35698         NullType,
35699         NullType,
35700         NullType,
35701         NullType,
35702         NullType,
35703         NullType,
35704         NullType,
35705         NullType> FunctorType;
35706 
35707     FunctorType functor_;
35708 
35709     functionImplementation_(const FunctorType &functor) :
35710         functor_(functor)
35711     {
35712     }
35713         
35714     typedef std::tr1::function<Event (
35715         const EnqueueArgs&,
35716         T0,
35717         T1,
35718         T2,
35719         T3,
35720         T4,
35721         T5,
35722         T6,
35723         T7,
35724         T8,
35725         T9,
35726         T10,
35727         T11,
35728         T12,
35729         T13,
35730         T14,
35731         T15,
35732         T16,
35733         T17,
35734         T18,
35735         T19,
35736         T20,
35737         T21,
35738         T22,
35739         T23,
35740         T24,
35741         T25,
35742         T26,
35743         T27,
35744         T28,
35745         T29,
35746         T30,
35747         T31,
35748         T32,
35749         T33,
35750         T34,
35751         T35,
35752         T36,
35753         T37,
35754         T38,
35755         T39,
35756         T40,
35757         T41,
35758         T42,
35759         T43,
35760         T44,
35761         T45,
35762         T46,
35763         T47,
35764         T48,
35765         T49,
35766         T50,
35767         T51,
35768         T52,
35769         T53,
35770         T54,
35771         T55,
35772         T56,
35773         T57,
35774         T58,
35775         T59,
35776         T60,
35777         T61,
35778         T62,
35779         T63,
35780         T64,
35781         T65,
35782         T66,
35783         T67,
35784         T68,
35785         T69)> type_;
35786 
35787     Event operator()(const EnqueueArgs& enqueueArgs,
35788         T0 arg0,
35789         T1 arg1,
35790         T2 arg2,
35791         T3 arg3,
35792         T4 arg4,
35793         T5 arg5,
35794         T6 arg6,
35795         T7 arg7,
35796         T8 arg8,
35797         T9 arg9,
35798         T10 arg10,
35799         T11 arg11,
35800         T12 arg12,
35801         T13 arg13,
35802         T14 arg14,
35803         T15 arg15,
35804         T16 arg16,
35805         T17 arg17,
35806         T18 arg18,
35807         T19 arg19,
35808         T20 arg20,
35809         T21 arg21,
35810         T22 arg22,
35811         T23 arg23,
35812         T24 arg24,
35813         T25 arg25,
35814         T26 arg26,
35815         T27 arg27,
35816         T28 arg28,
35817         T29 arg29,
35818         T30 arg30,
35819         T31 arg31,
35820         T32 arg32,
35821         T33 arg33,
35822         T34 arg34,
35823         T35 arg35,
35824         T36 arg36,
35825         T37 arg37,
35826         T38 arg38,
35827         T39 arg39,
35828         T40 arg40,
35829         T41 arg41,
35830         T42 arg42,
35831         T43 arg43,
35832         T44 arg44,
35833         T45 arg45,
35834         T46 arg46,
35835         T47 arg47,
35836         T48 arg48,
35837         T49 arg49,
35838         T50 arg50,
35839         T51 arg51,
35840         T52 arg52,
35841         T53 arg53,
35842         T54 arg54,
35843         T55 arg55,
35844         T56 arg56,
35845         T57 arg57,
35846         T58 arg58,
35847         T59 arg59,
35848         T60 arg60,
35849         T61 arg61,
35850         T62 arg62,
35851         T63 arg63,
35852         T64 arg64,
35853         T65 arg65,
35854         T66 arg66,
35855         T67 arg67,
35856         T68 arg68,
35857         T69 arg69)
35858     {
35859         return functor_(
35860             enqueueArgs,
35861             arg0,
35862             arg1,
35863             arg2,
35864             arg3,
35865             arg4,
35866             arg5,
35867             arg6,
35868             arg7,
35869             arg8,
35870             arg9,
35871             arg10,
35872             arg11,
35873             arg12,
35874             arg13,
35875             arg14,
35876             arg15,
35877             arg16,
35878             arg17,
35879             arg18,
35880             arg19,
35881             arg20,
35882             arg21,
35883             arg22,
35884             arg23,
35885             arg24,
35886             arg25,
35887             arg26,
35888             arg27,
35889             arg28,
35890             arg29,
35891             arg30,
35892             arg31,
35893             arg32,
35894             arg33,
35895             arg34,
35896             arg35,
35897             arg36,
35898             arg37,
35899             arg38,
35900             arg39,
35901             arg40,
35902             arg41,
35903             arg42,
35904             arg43,
35905             arg44,
35906             arg45,
35907             arg46,
35908             arg47,
35909             arg48,
35910             arg49,
35911             arg50,
35912             arg51,
35913             arg52,
35914             arg53,
35915             arg54,
35916             arg55,
35917             arg56,
35918             arg57,
35919             arg58,
35920             arg59,
35921             arg60,
35922             arg61,
35923             arg62,
35924             arg63,
35925             arg64,
35926             arg65,
35927             arg66,
35928             arg67,
35929             arg68,
35930             arg69);
35931     }
35932 
35933     operator type_ ()    
35934     {
35935         return type_(*this);
35936     }
35937 
35938 };
35939 
35940 template<
35941     typename T0,
35942     typename T1,
35943     typename T2,
35944     typename T3,
35945     typename T4,
35946     typename T5,
35947     typename T6,
35948     typename T7,
35949     typename T8,
35950     typename T9,
35951     typename T10,
35952     typename T11,
35953     typename T12,
35954     typename T13,
35955     typename T14,
35956     typename T15,
35957     typename T16,
35958     typename T17,
35959     typename T18,
35960     typename T19,
35961     typename T20,
35962     typename T21,
35963     typename T22,
35964     typename T23,
35965     typename T24,
35966     typename T25,
35967     typename T26,
35968     typename T27,
35969     typename T28,
35970     typename T29,
35971     typename T30,
35972     typename T31,
35973     typename T32,
35974     typename T33,
35975     typename T34,
35976     typename T35,
35977     typename T36,
35978     typename T37,
35979     typename T38,
35980     typename T39,
35981     typename T40,
35982     typename T41,
35983     typename T42,
35984     typename T43,
35985     typename T44,
35986     typename T45,
35987     typename T46,
35988     typename T47,
35989     typename T48,
35990     typename T49,
35991     typename T50,
35992     typename T51,
35993     typename T52,
35994     typename T53,
35995     typename T54,
35996     typename T55,
35997     typename T56,
35998     typename T57,
35999     typename T58,
36000     typename T59,
36001     typename T60,
36002     typename T61,
36003     typename T62,
36004     typename T63,
36005     typename T64,
36006     typename T65,
36007     typename T66,
36008     typename T67,
36009     typename T68,
36010     typename T69,
36011     typename T70>
36012 struct functionImplementation_<
36013     T0,
36014     T1,
36015     T2,
36016     T3,
36017     T4,
36018     T5,
36019     T6,
36020     T7,
36021     T8,
36022     T9,
36023     T10,
36024     T11,
36025     T12,
36026     T13,
36027     T14,
36028     T15,
36029     T16,
36030     T17,
36031     T18,
36032     T19,
36033     T20,
36034     T21,
36035     T22,
36036     T23,
36037     T24,
36038     T25,
36039     T26,
36040     T27,
36041     T28,
36042     T29,
36043     T30,
36044     T31,
36045     T32,
36046     T33,
36047     T34,
36048     T35,
36049     T36,
36050     T37,
36051     T38,
36052     T39,
36053     T40,
36054     T41,
36055     T42,
36056     T43,
36057     T44,
36058     T45,
36059     T46,
36060     T47,
36061     T48,
36062     T49,
36063     T50,
36064     T51,
36065     T52,
36066     T53,
36067     T54,
36068     T55,
36069     T56,
36070     T57,
36071     T58,
36072     T59,
36073     T60,
36074     T61,
36075     T62,
36076     T63,
36077     T64,
36078     T65,
36079     T66,
36080     T67,
36081     T68,
36082     T69,
36083     T70,
36084     NullType,
36085     NullType,
36086     NullType,
36087     NullType,
36088     NullType,
36089     NullType,
36090     NullType,
36091     NullType,
36092     NullType,
36093     NullType,
36094     NullType,
36095     NullType,
36096     NullType,
36097     NullType,
36098     NullType,
36099     NullType,
36100     NullType,
36101     NullType,
36102     NullType,
36103     NullType,
36104     NullType,
36105     NullType,
36106     NullType,
36107     NullType,
36108     NullType,
36109     NullType,
36110     NullType,
36111     NullType,
36112     NullType,
36113     NullType,
36114     NullType,
36115     NullType,
36116     NullType,
36117     NullType,
36118     NullType,
36119     NullType,
36120     NullType,
36121     NullType,
36122     NullType,
36123     NullType,
36124     NullType,
36125     NullType,
36126     NullType,
36127     NullType,
36128     NullType,
36129     NullType,
36130     NullType,
36131     NullType,
36132     NullType,
36133     NullType,
36134     NullType,
36135     NullType,
36136     NullType,
36137     NullType,
36138     NullType,
36139     NullType,
36140     NullType>
36141 {
36142     typedef detail::KernelFunctorGlobal<
36143         T0,
36144         T1,
36145         T2,
36146         T3,
36147         T4,
36148         T5,
36149         T6,
36150         T7,
36151         T8,
36152         T9,
36153         T10,
36154         T11,
36155         T12,
36156         T13,
36157         T14,
36158         T15,
36159         T16,
36160         T17,
36161         T18,
36162         T19,
36163         T20,
36164         T21,
36165         T22,
36166         T23,
36167         T24,
36168         T25,
36169         T26,
36170         T27,
36171         T28,
36172         T29,
36173         T30,
36174         T31,
36175         T32,
36176         T33,
36177         T34,
36178         T35,
36179         T36,
36180         T37,
36181         T38,
36182         T39,
36183         T40,
36184         T41,
36185         T42,
36186         T43,
36187         T44,
36188         T45,
36189         T46,
36190         T47,
36191         T48,
36192         T49,
36193         T50,
36194         T51,
36195         T52,
36196         T53,
36197         T54,
36198         T55,
36199         T56,
36200         T57,
36201         T58,
36202         T59,
36203         T60,
36204         T61,
36205         T62,
36206         T63,
36207         T64,
36208         T65,
36209         T66,
36210         T67,
36211         T68,
36212         T69,
36213         T70,
36214         NullType,
36215         NullType,
36216         NullType,
36217         NullType,
36218         NullType,
36219         NullType,
36220         NullType,
36221         NullType,
36222         NullType,
36223         NullType,
36224         NullType,
36225         NullType,
36226         NullType,
36227         NullType,
36228         NullType,
36229         NullType,
36230         NullType,
36231         NullType,
36232         NullType,
36233         NullType,
36234         NullType,
36235         NullType,
36236         NullType,
36237         NullType,
36238         NullType,
36239         NullType,
36240         NullType,
36241         NullType,
36242         NullType,
36243         NullType,
36244         NullType,
36245         NullType,
36246         NullType,
36247         NullType,
36248         NullType,
36249         NullType,
36250         NullType,
36251         NullType,
36252         NullType,
36253         NullType,
36254         NullType,
36255         NullType,
36256         NullType,
36257         NullType,
36258         NullType,
36259         NullType,
36260         NullType,
36261         NullType,
36262         NullType,
36263         NullType,
36264         NullType,
36265         NullType,
36266         NullType,
36267         NullType,
36268         NullType,
36269         NullType,
36270         NullType> FunctorType;
36271 
36272     FunctorType functor_;
36273 
36274     functionImplementation_(const FunctorType &functor) :
36275         functor_(functor)
36276     {
36277     }
36278         
36279     typedef std::tr1::function<Event (
36280         const EnqueueArgs&,
36281         T0,
36282         T1,
36283         T2,
36284         T3,
36285         T4,
36286         T5,
36287         T6,
36288         T7,
36289         T8,
36290         T9,
36291         T10,
36292         T11,
36293         T12,
36294         T13,
36295         T14,
36296         T15,
36297         T16,
36298         T17,
36299         T18,
36300         T19,
36301         T20,
36302         T21,
36303         T22,
36304         T23,
36305         T24,
36306         T25,
36307         T26,
36308         T27,
36309         T28,
36310         T29,
36311         T30,
36312         T31,
36313         T32,
36314         T33,
36315         T34,
36316         T35,
36317         T36,
36318         T37,
36319         T38,
36320         T39,
36321         T40,
36322         T41,
36323         T42,
36324         T43,
36325         T44,
36326         T45,
36327         T46,
36328         T47,
36329         T48,
36330         T49,
36331         T50,
36332         T51,
36333         T52,
36334         T53,
36335         T54,
36336         T55,
36337         T56,
36338         T57,
36339         T58,
36340         T59,
36341         T60,
36342         T61,
36343         T62,
36344         T63,
36345         T64,
36346         T65,
36347         T66,
36348         T67,
36349         T68,
36350         T69,
36351         T70)> type_;
36352 
36353     Event operator()(const EnqueueArgs& enqueueArgs,
36354         T0 arg0,
36355         T1 arg1,
36356         T2 arg2,
36357         T3 arg3,
36358         T4 arg4,
36359         T5 arg5,
36360         T6 arg6,
36361         T7 arg7,
36362         T8 arg8,
36363         T9 arg9,
36364         T10 arg10,
36365         T11 arg11,
36366         T12 arg12,
36367         T13 arg13,
36368         T14 arg14,
36369         T15 arg15,
36370         T16 arg16,
36371         T17 arg17,
36372         T18 arg18,
36373         T19 arg19,
36374         T20 arg20,
36375         T21 arg21,
36376         T22 arg22,
36377         T23 arg23,
36378         T24 arg24,
36379         T25 arg25,
36380         T26 arg26,
36381         T27 arg27,
36382         T28 arg28,
36383         T29 arg29,
36384         T30 arg30,
36385         T31 arg31,
36386         T32 arg32,
36387         T33 arg33,
36388         T34 arg34,
36389         T35 arg35,
36390         T36 arg36,
36391         T37 arg37,
36392         T38 arg38,
36393         T39 arg39,
36394         T40 arg40,
36395         T41 arg41,
36396         T42 arg42,
36397         T43 arg43,
36398         T44 arg44,
36399         T45 arg45,
36400         T46 arg46,
36401         T47 arg47,
36402         T48 arg48,
36403         T49 arg49,
36404         T50 arg50,
36405         T51 arg51,
36406         T52 arg52,
36407         T53 arg53,
36408         T54 arg54,
36409         T55 arg55,
36410         T56 arg56,
36411         T57 arg57,
36412         T58 arg58,
36413         T59 arg59,
36414         T60 arg60,
36415         T61 arg61,
36416         T62 arg62,
36417         T63 arg63,
36418         T64 arg64,
36419         T65 arg65,
36420         T66 arg66,
36421         T67 arg67,
36422         T68 arg68,
36423         T69 arg69,
36424         T70 arg70)
36425     {
36426         return functor_(
36427             enqueueArgs,
36428             arg0,
36429             arg1,
36430             arg2,
36431             arg3,
36432             arg4,
36433             arg5,
36434             arg6,
36435             arg7,
36436             arg8,
36437             arg9,
36438             arg10,
36439             arg11,
36440             arg12,
36441             arg13,
36442             arg14,
36443             arg15,
36444             arg16,
36445             arg17,
36446             arg18,
36447             arg19,
36448             arg20,
36449             arg21,
36450             arg22,
36451             arg23,
36452             arg24,
36453             arg25,
36454             arg26,
36455             arg27,
36456             arg28,
36457             arg29,
36458             arg30,
36459             arg31,
36460             arg32,
36461             arg33,
36462             arg34,
36463             arg35,
36464             arg36,
36465             arg37,
36466             arg38,
36467             arg39,
36468             arg40,
36469             arg41,
36470             arg42,
36471             arg43,
36472             arg44,
36473             arg45,
36474             arg46,
36475             arg47,
36476             arg48,
36477             arg49,
36478             arg50,
36479             arg51,
36480             arg52,
36481             arg53,
36482             arg54,
36483             arg55,
36484             arg56,
36485             arg57,
36486             arg58,
36487             arg59,
36488             arg60,
36489             arg61,
36490             arg62,
36491             arg63,
36492             arg64,
36493             arg65,
36494             arg66,
36495             arg67,
36496             arg68,
36497             arg69,
36498             arg70);
36499     }
36500 
36501     operator type_ ()    
36502     {
36503         return type_(*this);
36504     }
36505 
36506 };
36507 
36508 template<
36509     typename T0,
36510     typename T1,
36511     typename T2,
36512     typename T3,
36513     typename T4,
36514     typename T5,
36515     typename T6,
36516     typename T7,
36517     typename T8,
36518     typename T9,
36519     typename T10,
36520     typename T11,
36521     typename T12,
36522     typename T13,
36523     typename T14,
36524     typename T15,
36525     typename T16,
36526     typename T17,
36527     typename T18,
36528     typename T19,
36529     typename T20,
36530     typename T21,
36531     typename T22,
36532     typename T23,
36533     typename T24,
36534     typename T25,
36535     typename T26,
36536     typename T27,
36537     typename T28,
36538     typename T29,
36539     typename T30,
36540     typename T31,
36541     typename T32,
36542     typename T33,
36543     typename T34,
36544     typename T35,
36545     typename T36,
36546     typename T37,
36547     typename T38,
36548     typename T39,
36549     typename T40,
36550     typename T41,
36551     typename T42,
36552     typename T43,
36553     typename T44,
36554     typename T45,
36555     typename T46,
36556     typename T47,
36557     typename T48,
36558     typename T49,
36559     typename T50,
36560     typename T51,
36561     typename T52,
36562     typename T53,
36563     typename T54,
36564     typename T55,
36565     typename T56,
36566     typename T57,
36567     typename T58,
36568     typename T59,
36569     typename T60,
36570     typename T61,
36571     typename T62,
36572     typename T63,
36573     typename T64,
36574     typename T65,
36575     typename T66,
36576     typename T67,
36577     typename T68,
36578     typename T69,
36579     typename T70,
36580     typename T71>
36581 struct functionImplementation_<
36582     T0,
36583     T1,
36584     T2,
36585     T3,
36586     T4,
36587     T5,
36588     T6,
36589     T7,
36590     T8,
36591     T9,
36592     T10,
36593     T11,
36594     T12,
36595     T13,
36596     T14,
36597     T15,
36598     T16,
36599     T17,
36600     T18,
36601     T19,
36602     T20,
36603     T21,
36604     T22,
36605     T23,
36606     T24,
36607     T25,
36608     T26,
36609     T27,
36610     T28,
36611     T29,
36612     T30,
36613     T31,
36614     T32,
36615     T33,
36616     T34,
36617     T35,
36618     T36,
36619     T37,
36620     T38,
36621     T39,
36622     T40,
36623     T41,
36624     T42,
36625     T43,
36626     T44,
36627     T45,
36628     T46,
36629     T47,
36630     T48,
36631     T49,
36632     T50,
36633     T51,
36634     T52,
36635     T53,
36636     T54,
36637     T55,
36638     T56,
36639     T57,
36640     T58,
36641     T59,
36642     T60,
36643     T61,
36644     T62,
36645     T63,
36646     T64,
36647     T65,
36648     T66,
36649     T67,
36650     T68,
36651     T69,
36652     T70,
36653     T71,
36654     NullType,
36655     NullType,
36656     NullType,
36657     NullType,
36658     NullType,
36659     NullType,
36660     NullType,
36661     NullType,
36662     NullType,
36663     NullType,
36664     NullType,
36665     NullType,
36666     NullType,
36667     NullType,
36668     NullType,
36669     NullType,
36670     NullType,
36671     NullType,
36672     NullType,
36673     NullType,
36674     NullType,
36675     NullType,
36676     NullType,
36677     NullType,
36678     NullType,
36679     NullType,
36680     NullType,
36681     NullType,
36682     NullType,
36683     NullType,
36684     NullType,
36685     NullType,
36686     NullType,
36687     NullType,
36688     NullType,
36689     NullType,
36690     NullType,
36691     NullType,
36692     NullType,
36693     NullType,
36694     NullType,
36695     NullType,
36696     NullType,
36697     NullType,
36698     NullType,
36699     NullType,
36700     NullType,
36701     NullType,
36702     NullType,
36703     NullType,
36704     NullType,
36705     NullType,
36706     NullType,
36707     NullType,
36708     NullType,
36709     NullType>
36710 {
36711     typedef detail::KernelFunctorGlobal<
36712         T0,
36713         T1,
36714         T2,
36715         T3,
36716         T4,
36717         T5,
36718         T6,
36719         T7,
36720         T8,
36721         T9,
36722         T10,
36723         T11,
36724         T12,
36725         T13,
36726         T14,
36727         T15,
36728         T16,
36729         T17,
36730         T18,
36731         T19,
36732         T20,
36733         T21,
36734         T22,
36735         T23,
36736         T24,
36737         T25,
36738         T26,
36739         T27,
36740         T28,
36741         T29,
36742         T30,
36743         T31,
36744         T32,
36745         T33,
36746         T34,
36747         T35,
36748         T36,
36749         T37,
36750         T38,
36751         T39,
36752         T40,
36753         T41,
36754         T42,
36755         T43,
36756         T44,
36757         T45,
36758         T46,
36759         T47,
36760         T48,
36761         T49,
36762         T50,
36763         T51,
36764         T52,
36765         T53,
36766         T54,
36767         T55,
36768         T56,
36769         T57,
36770         T58,
36771         T59,
36772         T60,
36773         T61,
36774         T62,
36775         T63,
36776         T64,
36777         T65,
36778         T66,
36779         T67,
36780         T68,
36781         T69,
36782         T70,
36783         T71,
36784         NullType,
36785         NullType,
36786         NullType,
36787         NullType,
36788         NullType,
36789         NullType,
36790         NullType,
36791         NullType,
36792         NullType,
36793         NullType,
36794         NullType,
36795         NullType,
36796         NullType,
36797         NullType,
36798         NullType,
36799         NullType,
36800         NullType,
36801         NullType,
36802         NullType,
36803         NullType,
36804         NullType,
36805         NullType,
36806         NullType,
36807         NullType,
36808         NullType,
36809         NullType,
36810         NullType,
36811         NullType,
36812         NullType,
36813         NullType,
36814         NullType,
36815         NullType,
36816         NullType,
36817         NullType,
36818         NullType,
36819         NullType,
36820         NullType,
36821         NullType,
36822         NullType,
36823         NullType,
36824         NullType,
36825         NullType,
36826         NullType,
36827         NullType,
36828         NullType,
36829         NullType,
36830         NullType,
36831         NullType,
36832         NullType,
36833         NullType,
36834         NullType,
36835         NullType,
36836         NullType,
36837         NullType,
36838         NullType,
36839         NullType> FunctorType;
36840 
36841     FunctorType functor_;
36842 
36843     functionImplementation_(const FunctorType &functor) :
36844         functor_(functor)
36845     {
36846     }
36847         
36848     typedef std::tr1::function<Event (
36849         const EnqueueArgs&,
36850         T0,
36851         T1,
36852         T2,
36853         T3,
36854         T4,
36855         T5,
36856         T6,
36857         T7,
36858         T8,
36859         T9,
36860         T10,
36861         T11,
36862         T12,
36863         T13,
36864         T14,
36865         T15,
36866         T16,
36867         T17,
36868         T18,
36869         T19,
36870         T20,
36871         T21,
36872         T22,
36873         T23,
36874         T24,
36875         T25,
36876         T26,
36877         T27,
36878         T28,
36879         T29,
36880         T30,
36881         T31,
36882         T32,
36883         T33,
36884         T34,
36885         T35,
36886         T36,
36887         T37,
36888         T38,
36889         T39,
36890         T40,
36891         T41,
36892         T42,
36893         T43,
36894         T44,
36895         T45,
36896         T46,
36897         T47,
36898         T48,
36899         T49,
36900         T50,
36901         T51,
36902         T52,
36903         T53,
36904         T54,
36905         T55,
36906         T56,
36907         T57,
36908         T58,
36909         T59,
36910         T60,
36911         T61,
36912         T62,
36913         T63,
36914         T64,
36915         T65,
36916         T66,
36917         T67,
36918         T68,
36919         T69,
36920         T70,
36921         T71)> type_;
36922 
36923     Event operator()(const EnqueueArgs& enqueueArgs,
36924         T0 arg0,
36925         T1 arg1,
36926         T2 arg2,
36927         T3 arg3,
36928         T4 arg4,
36929         T5 arg5,
36930         T6 arg6,
36931         T7 arg7,
36932         T8 arg8,
36933         T9 arg9,
36934         T10 arg10,
36935         T11 arg11,
36936         T12 arg12,
36937         T13 arg13,
36938         T14 arg14,
36939         T15 arg15,
36940         T16 arg16,
36941         T17 arg17,
36942         T18 arg18,
36943         T19 arg19,
36944         T20 arg20,
36945         T21 arg21,
36946         T22 arg22,
36947         T23 arg23,
36948         T24 arg24,
36949         T25 arg25,
36950         T26 arg26,
36951         T27 arg27,
36952         T28 arg28,
36953         T29 arg29,
36954         T30 arg30,
36955         T31 arg31,
36956         T32 arg32,
36957         T33 arg33,
36958         T34 arg34,
36959         T35 arg35,
36960         T36 arg36,
36961         T37 arg37,
36962         T38 arg38,
36963         T39 arg39,
36964         T40 arg40,
36965         T41 arg41,
36966         T42 arg42,
36967         T43 arg43,
36968         T44 arg44,
36969         T45 arg45,
36970         T46 arg46,
36971         T47 arg47,
36972         T48 arg48,
36973         T49 arg49,
36974         T50 arg50,
36975         T51 arg51,
36976         T52 arg52,
36977         T53 arg53,
36978         T54 arg54,
36979         T55 arg55,
36980         T56 arg56,
36981         T57 arg57,
36982         T58 arg58,
36983         T59 arg59,
36984         T60 arg60,
36985         T61 arg61,
36986         T62 arg62,
36987         T63 arg63,
36988         T64 arg64,
36989         T65 arg65,
36990         T66 arg66,
36991         T67 arg67,
36992         T68 arg68,
36993         T69 arg69,
36994         T70 arg70,
36995         T71 arg71)
36996     {
36997         return functor_(
36998             enqueueArgs,
36999             arg0,
37000             arg1,
37001             arg2,
37002             arg3,
37003             arg4,
37004             arg5,
37005             arg6,
37006             arg7,
37007             arg8,
37008             arg9,
37009             arg10,
37010             arg11,
37011             arg12,
37012             arg13,
37013             arg14,
37014             arg15,
37015             arg16,
37016             arg17,
37017             arg18,
37018             arg19,
37019             arg20,
37020             arg21,
37021             arg22,
37022             arg23,
37023             arg24,
37024             arg25,
37025             arg26,
37026             arg27,
37027             arg28,
37028             arg29,
37029             arg30,
37030             arg31,
37031             arg32,
37032             arg33,
37033             arg34,
37034             arg35,
37035             arg36,
37036             arg37,
37037             arg38,
37038             arg39,
37039             arg40,
37040             arg41,
37041             arg42,
37042             arg43,
37043             arg44,
37044             arg45,
37045             arg46,
37046             arg47,
37047             arg48,
37048             arg49,
37049             arg50,
37050             arg51,
37051             arg52,
37052             arg53,
37053             arg54,
37054             arg55,
37055             arg56,
37056             arg57,
37057             arg58,
37058             arg59,
37059             arg60,
37060             arg61,
37061             arg62,
37062             arg63,
37063             arg64,
37064             arg65,
37065             arg66,
37066             arg67,
37067             arg68,
37068             arg69,
37069             arg70,
37070             arg71);
37071     }
37072 
37073     operator type_ ()    
37074     {
37075         return type_(*this);
37076     }
37077 
37078 };
37079 
37080 template<
37081     typename T0,
37082     typename T1,
37083     typename T2,
37084     typename T3,
37085     typename T4,
37086     typename T5,
37087     typename T6,
37088     typename T7,
37089     typename T8,
37090     typename T9,
37091     typename T10,
37092     typename T11,
37093     typename T12,
37094     typename T13,
37095     typename T14,
37096     typename T15,
37097     typename T16,
37098     typename T17,
37099     typename T18,
37100     typename T19,
37101     typename T20,
37102     typename T21,
37103     typename T22,
37104     typename T23,
37105     typename T24,
37106     typename T25,
37107     typename T26,
37108     typename T27,
37109     typename T28,
37110     typename T29,
37111     typename T30,
37112     typename T31,
37113     typename T32,
37114     typename T33,
37115     typename T34,
37116     typename T35,
37117     typename T36,
37118     typename T37,
37119     typename T38,
37120     typename T39,
37121     typename T40,
37122     typename T41,
37123     typename T42,
37124     typename T43,
37125     typename T44,
37126     typename T45,
37127     typename T46,
37128     typename T47,
37129     typename T48,
37130     typename T49,
37131     typename T50,
37132     typename T51,
37133     typename T52,
37134     typename T53,
37135     typename T54,
37136     typename T55,
37137     typename T56,
37138     typename T57,
37139     typename T58,
37140     typename T59,
37141     typename T60,
37142     typename T61,
37143     typename T62,
37144     typename T63,
37145     typename T64,
37146     typename T65,
37147     typename T66,
37148     typename T67,
37149     typename T68,
37150     typename T69,
37151     typename T70,
37152     typename T71,
37153     typename T72>
37154 struct functionImplementation_<
37155     T0,
37156     T1,
37157     T2,
37158     T3,
37159     T4,
37160     T5,
37161     T6,
37162     T7,
37163     T8,
37164     T9,
37165     T10,
37166     T11,
37167     T12,
37168     T13,
37169     T14,
37170     T15,
37171     T16,
37172     T17,
37173     T18,
37174     T19,
37175     T20,
37176     T21,
37177     T22,
37178     T23,
37179     T24,
37180     T25,
37181     T26,
37182     T27,
37183     T28,
37184     T29,
37185     T30,
37186     T31,
37187     T32,
37188     T33,
37189     T34,
37190     T35,
37191     T36,
37192     T37,
37193     T38,
37194     T39,
37195     T40,
37196     T41,
37197     T42,
37198     T43,
37199     T44,
37200     T45,
37201     T46,
37202     T47,
37203     T48,
37204     T49,
37205     T50,
37206     T51,
37207     T52,
37208     T53,
37209     T54,
37210     T55,
37211     T56,
37212     T57,
37213     T58,
37214     T59,
37215     T60,
37216     T61,
37217     T62,
37218     T63,
37219     T64,
37220     T65,
37221     T66,
37222     T67,
37223     T68,
37224     T69,
37225     T70,
37226     T71,
37227     T72,
37228     NullType,
37229     NullType,
37230     NullType,
37231     NullType,
37232     NullType,
37233     NullType,
37234     NullType,
37235     NullType,
37236     NullType,
37237     NullType,
37238     NullType,
37239     NullType,
37240     NullType,
37241     NullType,
37242     NullType,
37243     NullType,
37244     NullType,
37245     NullType,
37246     NullType,
37247     NullType,
37248     NullType,
37249     NullType,
37250     NullType,
37251     NullType,
37252     NullType,
37253     NullType,
37254     NullType,
37255     NullType,
37256     NullType,
37257     NullType,
37258     NullType,
37259     NullType,
37260     NullType,
37261     NullType,
37262     NullType,
37263     NullType,
37264     NullType,
37265     NullType,
37266     NullType,
37267     NullType,
37268     NullType,
37269     NullType,
37270     NullType,
37271     NullType,
37272     NullType,
37273     NullType,
37274     NullType,
37275     NullType,
37276     NullType,
37277     NullType,
37278     NullType,
37279     NullType,
37280     NullType,
37281     NullType,
37282     NullType>
37283 {
37284     typedef detail::KernelFunctorGlobal<
37285         T0,
37286         T1,
37287         T2,
37288         T3,
37289         T4,
37290         T5,
37291         T6,
37292         T7,
37293         T8,
37294         T9,
37295         T10,
37296         T11,
37297         T12,
37298         T13,
37299         T14,
37300         T15,
37301         T16,
37302         T17,
37303         T18,
37304         T19,
37305         T20,
37306         T21,
37307         T22,
37308         T23,
37309         T24,
37310         T25,
37311         T26,
37312         T27,
37313         T28,
37314         T29,
37315         T30,
37316         T31,
37317         T32,
37318         T33,
37319         T34,
37320         T35,
37321         T36,
37322         T37,
37323         T38,
37324         T39,
37325         T40,
37326         T41,
37327         T42,
37328         T43,
37329         T44,
37330         T45,
37331         T46,
37332         T47,
37333         T48,
37334         T49,
37335         T50,
37336         T51,
37337         T52,
37338         T53,
37339         T54,
37340         T55,
37341         T56,
37342         T57,
37343         T58,
37344         T59,
37345         T60,
37346         T61,
37347         T62,
37348         T63,
37349         T64,
37350         T65,
37351         T66,
37352         T67,
37353         T68,
37354         T69,
37355         T70,
37356         T71,
37357         T72,
37358         NullType,
37359         NullType,
37360         NullType,
37361         NullType,
37362         NullType,
37363         NullType,
37364         NullType,
37365         NullType,
37366         NullType,
37367         NullType,
37368         NullType,
37369         NullType,
37370         NullType,
37371         NullType,
37372         NullType,
37373         NullType,
37374         NullType,
37375         NullType,
37376         NullType,
37377         NullType,
37378         NullType,
37379         NullType,
37380         NullType,
37381         NullType,
37382         NullType,
37383         NullType,
37384         NullType,
37385         NullType,
37386         NullType,
37387         NullType,
37388         NullType,
37389         NullType,
37390         NullType,
37391         NullType,
37392         NullType,
37393         NullType,
37394         NullType,
37395         NullType,
37396         NullType,
37397         NullType,
37398         NullType,
37399         NullType,
37400         NullType,
37401         NullType,
37402         NullType,
37403         NullType,
37404         NullType,
37405         NullType,
37406         NullType,
37407         NullType,
37408         NullType,
37409         NullType,
37410         NullType,
37411         NullType,
37412         NullType> FunctorType;
37413 
37414     FunctorType functor_;
37415 
37416     functionImplementation_(const FunctorType &functor) :
37417         functor_(functor)
37418     {
37419     }
37420         
37421     typedef std::tr1::function<Event (
37422         const EnqueueArgs&,
37423         T0,
37424         T1,
37425         T2,
37426         T3,
37427         T4,
37428         T5,
37429         T6,
37430         T7,
37431         T8,
37432         T9,
37433         T10,
37434         T11,
37435         T12,
37436         T13,
37437         T14,
37438         T15,
37439         T16,
37440         T17,
37441         T18,
37442         T19,
37443         T20,
37444         T21,
37445         T22,
37446         T23,
37447         T24,
37448         T25,
37449         T26,
37450         T27,
37451         T28,
37452         T29,
37453         T30,
37454         T31,
37455         T32,
37456         T33,
37457         T34,
37458         T35,
37459         T36,
37460         T37,
37461         T38,
37462         T39,
37463         T40,
37464         T41,
37465         T42,
37466         T43,
37467         T44,
37468         T45,
37469         T46,
37470         T47,
37471         T48,
37472         T49,
37473         T50,
37474         T51,
37475         T52,
37476         T53,
37477         T54,
37478         T55,
37479         T56,
37480         T57,
37481         T58,
37482         T59,
37483         T60,
37484         T61,
37485         T62,
37486         T63,
37487         T64,
37488         T65,
37489         T66,
37490         T67,
37491         T68,
37492         T69,
37493         T70,
37494         T71,
37495         T72)> type_;
37496 
37497     Event operator()(const EnqueueArgs& enqueueArgs,
37498         T0 arg0,
37499         T1 arg1,
37500         T2 arg2,
37501         T3 arg3,
37502         T4 arg4,
37503         T5 arg5,
37504         T6 arg6,
37505         T7 arg7,
37506         T8 arg8,
37507         T9 arg9,
37508         T10 arg10,
37509         T11 arg11,
37510         T12 arg12,
37511         T13 arg13,
37512         T14 arg14,
37513         T15 arg15,
37514         T16 arg16,
37515         T17 arg17,
37516         T18 arg18,
37517         T19 arg19,
37518         T20 arg20,
37519         T21 arg21,
37520         T22 arg22,
37521         T23 arg23,
37522         T24 arg24,
37523         T25 arg25,
37524         T26 arg26,
37525         T27 arg27,
37526         T28 arg28,
37527         T29 arg29,
37528         T30 arg30,
37529         T31 arg31,
37530         T32 arg32,
37531         T33 arg33,
37532         T34 arg34,
37533         T35 arg35,
37534         T36 arg36,
37535         T37 arg37,
37536         T38 arg38,
37537         T39 arg39,
37538         T40 arg40,
37539         T41 arg41,
37540         T42 arg42,
37541         T43 arg43,
37542         T44 arg44,
37543         T45 arg45,
37544         T46 arg46,
37545         T47 arg47,
37546         T48 arg48,
37547         T49 arg49,
37548         T50 arg50,
37549         T51 arg51,
37550         T52 arg52,
37551         T53 arg53,
37552         T54 arg54,
37553         T55 arg55,
37554         T56 arg56,
37555         T57 arg57,
37556         T58 arg58,
37557         T59 arg59,
37558         T60 arg60,
37559         T61 arg61,
37560         T62 arg62,
37561         T63 arg63,
37562         T64 arg64,
37563         T65 arg65,
37564         T66 arg66,
37565         T67 arg67,
37566         T68 arg68,
37567         T69 arg69,
37568         T70 arg70,
37569         T71 arg71,
37570         T72 arg72)
37571     {
37572         return functor_(
37573             enqueueArgs,
37574             arg0,
37575             arg1,
37576             arg2,
37577             arg3,
37578             arg4,
37579             arg5,
37580             arg6,
37581             arg7,
37582             arg8,
37583             arg9,
37584             arg10,
37585             arg11,
37586             arg12,
37587             arg13,
37588             arg14,
37589             arg15,
37590             arg16,
37591             arg17,
37592             arg18,
37593             arg19,
37594             arg20,
37595             arg21,
37596             arg22,
37597             arg23,
37598             arg24,
37599             arg25,
37600             arg26,
37601             arg27,
37602             arg28,
37603             arg29,
37604             arg30,
37605             arg31,
37606             arg32,
37607             arg33,
37608             arg34,
37609             arg35,
37610             arg36,
37611             arg37,
37612             arg38,
37613             arg39,
37614             arg40,
37615             arg41,
37616             arg42,
37617             arg43,
37618             arg44,
37619             arg45,
37620             arg46,
37621             arg47,
37622             arg48,
37623             arg49,
37624             arg50,
37625             arg51,
37626             arg52,
37627             arg53,
37628             arg54,
37629             arg55,
37630             arg56,
37631             arg57,
37632             arg58,
37633             arg59,
37634             arg60,
37635             arg61,
37636             arg62,
37637             arg63,
37638             arg64,
37639             arg65,
37640             arg66,
37641             arg67,
37642             arg68,
37643             arg69,
37644             arg70,
37645             arg71,
37646             arg72);
37647     }
37648 
37649     operator type_ ()    
37650     {
37651         return type_(*this);
37652     }
37653 
37654 };
37655 
37656 template<
37657     typename T0,
37658     typename T1,
37659     typename T2,
37660     typename T3,
37661     typename T4,
37662     typename T5,
37663     typename T6,
37664     typename T7,
37665     typename T8,
37666     typename T9,
37667     typename T10,
37668     typename T11,
37669     typename T12,
37670     typename T13,
37671     typename T14,
37672     typename T15,
37673     typename T16,
37674     typename T17,
37675     typename T18,
37676     typename T19,
37677     typename T20,
37678     typename T21,
37679     typename T22,
37680     typename T23,
37681     typename T24,
37682     typename T25,
37683     typename T26,
37684     typename T27,
37685     typename T28,
37686     typename T29,
37687     typename T30,
37688     typename T31,
37689     typename T32,
37690     typename T33,
37691     typename T34,
37692     typename T35,
37693     typename T36,
37694     typename T37,
37695     typename T38,
37696     typename T39,
37697     typename T40,
37698     typename T41,
37699     typename T42,
37700     typename T43,
37701     typename T44,
37702     typename T45,
37703     typename T46,
37704     typename T47,
37705     typename T48,
37706     typename T49,
37707     typename T50,
37708     typename T51,
37709     typename T52,
37710     typename T53,
37711     typename T54,
37712     typename T55,
37713     typename T56,
37714     typename T57,
37715     typename T58,
37716     typename T59,
37717     typename T60,
37718     typename T61,
37719     typename T62,
37720     typename T63,
37721     typename T64,
37722     typename T65,
37723     typename T66,
37724     typename T67,
37725     typename T68,
37726     typename T69,
37727     typename T70,
37728     typename T71,
37729     typename T72,
37730     typename T73>
37731 struct functionImplementation_<
37732     T0,
37733     T1,
37734     T2,
37735     T3,
37736     T4,
37737     T5,
37738     T6,
37739     T7,
37740     T8,
37741     T9,
37742     T10,
37743     T11,
37744     T12,
37745     T13,
37746     T14,
37747     T15,
37748     T16,
37749     T17,
37750     T18,
37751     T19,
37752     T20,
37753     T21,
37754     T22,
37755     T23,
37756     T24,
37757     T25,
37758     T26,
37759     T27,
37760     T28,
37761     T29,
37762     T30,
37763     T31,
37764     T32,
37765     T33,
37766     T34,
37767     T35,
37768     T36,
37769     T37,
37770     T38,
37771     T39,
37772     T40,
37773     T41,
37774     T42,
37775     T43,
37776     T44,
37777     T45,
37778     T46,
37779     T47,
37780     T48,
37781     T49,
37782     T50,
37783     T51,
37784     T52,
37785     T53,
37786     T54,
37787     T55,
37788     T56,
37789     T57,
37790     T58,
37791     T59,
37792     T60,
37793     T61,
37794     T62,
37795     T63,
37796     T64,
37797     T65,
37798     T66,
37799     T67,
37800     T68,
37801     T69,
37802     T70,
37803     T71,
37804     T72,
37805     T73,
37806     NullType,
37807     NullType,
37808     NullType,
37809     NullType,
37810     NullType,
37811     NullType,
37812     NullType,
37813     NullType,
37814     NullType,
37815     NullType,
37816     NullType,
37817     NullType,
37818     NullType,
37819     NullType,
37820     NullType,
37821     NullType,
37822     NullType,
37823     NullType,
37824     NullType,
37825     NullType,
37826     NullType,
37827     NullType,
37828     NullType,
37829     NullType,
37830     NullType,
37831     NullType,
37832     NullType,
37833     NullType,
37834     NullType,
37835     NullType,
37836     NullType,
37837     NullType,
37838     NullType,
37839     NullType,
37840     NullType,
37841     NullType,
37842     NullType,
37843     NullType,
37844     NullType,
37845     NullType,
37846     NullType,
37847     NullType,
37848     NullType,
37849     NullType,
37850     NullType,
37851     NullType,
37852     NullType,
37853     NullType,
37854     NullType,
37855     NullType,
37856     NullType,
37857     NullType,
37858     NullType,
37859     NullType>
37860 {
37861     typedef detail::KernelFunctorGlobal<
37862         T0,
37863         T1,
37864         T2,
37865         T3,
37866         T4,
37867         T5,
37868         T6,
37869         T7,
37870         T8,
37871         T9,
37872         T10,
37873         T11,
37874         T12,
37875         T13,
37876         T14,
37877         T15,
37878         T16,
37879         T17,
37880         T18,
37881         T19,
37882         T20,
37883         T21,
37884         T22,
37885         T23,
37886         T24,
37887         T25,
37888         T26,
37889         T27,
37890         T28,
37891         T29,
37892         T30,
37893         T31,
37894         T32,
37895         T33,
37896         T34,
37897         T35,
37898         T36,
37899         T37,
37900         T38,
37901         T39,
37902         T40,
37903         T41,
37904         T42,
37905         T43,
37906         T44,
37907         T45,
37908         T46,
37909         T47,
37910         T48,
37911         T49,
37912         T50,
37913         T51,
37914         T52,
37915         T53,
37916         T54,
37917         T55,
37918         T56,
37919         T57,
37920         T58,
37921         T59,
37922         T60,
37923         T61,
37924         T62,
37925         T63,
37926         T64,
37927         T65,
37928         T66,
37929         T67,
37930         T68,
37931         T69,
37932         T70,
37933         T71,
37934         T72,
37935         T73,
37936         NullType,
37937         NullType,
37938         NullType,
37939         NullType,
37940         NullType,
37941         NullType,
37942         NullType,
37943         NullType,
37944         NullType,
37945         NullType,
37946         NullType,
37947         NullType,
37948         NullType,
37949         NullType,
37950         NullType,
37951         NullType,
37952         NullType,
37953         NullType,
37954         NullType,
37955         NullType,
37956         NullType,
37957         NullType,
37958         NullType,
37959         NullType,
37960         NullType,
37961         NullType,
37962         NullType,
37963         NullType,
37964         NullType,
37965         NullType,
37966         NullType,
37967         NullType,
37968         NullType,
37969         NullType,
37970         NullType,
37971         NullType,
37972         NullType,
37973         NullType,
37974         NullType,
37975         NullType,
37976         NullType,
37977         NullType,
37978         NullType,
37979         NullType,
37980         NullType,
37981         NullType,
37982         NullType,
37983         NullType,
37984         NullType,
37985         NullType,
37986         NullType,
37987         NullType,
37988         NullType,
37989         NullType> FunctorType;
37990 
37991     FunctorType functor_;
37992 
37993     functionImplementation_(const FunctorType &functor) :
37994         functor_(functor)
37995     {
37996     }
37997         
37998     typedef std::tr1::function<Event (
37999         const EnqueueArgs&,
38000         T0,
38001         T1,
38002         T2,
38003         T3,
38004         T4,
38005         T5,
38006         T6,
38007         T7,
38008         T8,
38009         T9,
38010         T10,
38011         T11,
38012         T12,
38013         T13,
38014         T14,
38015         T15,
38016         T16,
38017         T17,
38018         T18,
38019         T19,
38020         T20,
38021         T21,
38022         T22,
38023         T23,
38024         T24,
38025         T25,
38026         T26,
38027         T27,
38028         T28,
38029         T29,
38030         T30,
38031         T31,
38032         T32,
38033         T33,
38034         T34,
38035         T35,
38036         T36,
38037         T37,
38038         T38,
38039         T39,
38040         T40,
38041         T41,
38042         T42,
38043         T43,
38044         T44,
38045         T45,
38046         T46,
38047         T47,
38048         T48,
38049         T49,
38050         T50,
38051         T51,
38052         T52,
38053         T53,
38054         T54,
38055         T55,
38056         T56,
38057         T57,
38058         T58,
38059         T59,
38060         T60,
38061         T61,
38062         T62,
38063         T63,
38064         T64,
38065         T65,
38066         T66,
38067         T67,
38068         T68,
38069         T69,
38070         T70,
38071         T71,
38072         T72,
38073         T73)> type_;
38074 
38075     Event operator()(const EnqueueArgs& enqueueArgs,
38076         T0 arg0,
38077         T1 arg1,
38078         T2 arg2,
38079         T3 arg3,
38080         T4 arg4,
38081         T5 arg5,
38082         T6 arg6,
38083         T7 arg7,
38084         T8 arg8,
38085         T9 arg9,
38086         T10 arg10,
38087         T11 arg11,
38088         T12 arg12,
38089         T13 arg13,
38090         T14 arg14,
38091         T15 arg15,
38092         T16 arg16,
38093         T17 arg17,
38094         T18 arg18,
38095         T19 arg19,
38096         T20 arg20,
38097         T21 arg21,
38098         T22 arg22,
38099         T23 arg23,
38100         T24 arg24,
38101         T25 arg25,
38102         T26 arg26,
38103         T27 arg27,
38104         T28 arg28,
38105         T29 arg29,
38106         T30 arg30,
38107         T31 arg31,
38108         T32 arg32,
38109         T33 arg33,
38110         T34 arg34,
38111         T35 arg35,
38112         T36 arg36,
38113         T37 arg37,
38114         T38 arg38,
38115         T39 arg39,
38116         T40 arg40,
38117         T41 arg41,
38118         T42 arg42,
38119         T43 arg43,
38120         T44 arg44,
38121         T45 arg45,
38122         T46 arg46,
38123         T47 arg47,
38124         T48 arg48,
38125         T49 arg49,
38126         T50 arg50,
38127         T51 arg51,
38128         T52 arg52,
38129         T53 arg53,
38130         T54 arg54,
38131         T55 arg55,
38132         T56 arg56,
38133         T57 arg57,
38134         T58 arg58,
38135         T59 arg59,
38136         T60 arg60,
38137         T61 arg61,
38138         T62 arg62,
38139         T63 arg63,
38140         T64 arg64,
38141         T65 arg65,
38142         T66 arg66,
38143         T67 arg67,
38144         T68 arg68,
38145         T69 arg69,
38146         T70 arg70,
38147         T71 arg71,
38148         T72 arg72,
38149         T73 arg73)
38150     {
38151         return functor_(
38152             enqueueArgs,
38153             arg0,
38154             arg1,
38155             arg2,
38156             arg3,
38157             arg4,
38158             arg5,
38159             arg6,
38160             arg7,
38161             arg8,
38162             arg9,
38163             arg10,
38164             arg11,
38165             arg12,
38166             arg13,
38167             arg14,
38168             arg15,
38169             arg16,
38170             arg17,
38171             arg18,
38172             arg19,
38173             arg20,
38174             arg21,
38175             arg22,
38176             arg23,
38177             arg24,
38178             arg25,
38179             arg26,
38180             arg27,
38181             arg28,
38182             arg29,
38183             arg30,
38184             arg31,
38185             arg32,
38186             arg33,
38187             arg34,
38188             arg35,
38189             arg36,
38190             arg37,
38191             arg38,
38192             arg39,
38193             arg40,
38194             arg41,
38195             arg42,
38196             arg43,
38197             arg44,
38198             arg45,
38199             arg46,
38200             arg47,
38201             arg48,
38202             arg49,
38203             arg50,
38204             arg51,
38205             arg52,
38206             arg53,
38207             arg54,
38208             arg55,
38209             arg56,
38210             arg57,
38211             arg58,
38212             arg59,
38213             arg60,
38214             arg61,
38215             arg62,
38216             arg63,
38217             arg64,
38218             arg65,
38219             arg66,
38220             arg67,
38221             arg68,
38222             arg69,
38223             arg70,
38224             arg71,
38225             arg72,
38226             arg73);
38227     }
38228 
38229     operator type_ ()    
38230     {
38231         return type_(*this);
38232     }
38233 
38234 };
38235 
38236 template<
38237     typename T0,
38238     typename T1,
38239     typename T2,
38240     typename T3,
38241     typename T4,
38242     typename T5,
38243     typename T6,
38244     typename T7,
38245     typename T8,
38246     typename T9,
38247     typename T10,
38248     typename T11,
38249     typename T12,
38250     typename T13,
38251     typename T14,
38252     typename T15,
38253     typename T16,
38254     typename T17,
38255     typename T18,
38256     typename T19,
38257     typename T20,
38258     typename T21,
38259     typename T22,
38260     typename T23,
38261     typename T24,
38262     typename T25,
38263     typename T26,
38264     typename T27,
38265     typename T28,
38266     typename T29,
38267     typename T30,
38268     typename T31,
38269     typename T32,
38270     typename T33,
38271     typename T34,
38272     typename T35,
38273     typename T36,
38274     typename T37,
38275     typename T38,
38276     typename T39,
38277     typename T40,
38278     typename T41,
38279     typename T42,
38280     typename T43,
38281     typename T44,
38282     typename T45,
38283     typename T46,
38284     typename T47,
38285     typename T48,
38286     typename T49,
38287     typename T50,
38288     typename T51,
38289     typename T52,
38290     typename T53,
38291     typename T54,
38292     typename T55,
38293     typename T56,
38294     typename T57,
38295     typename T58,
38296     typename T59,
38297     typename T60,
38298     typename T61,
38299     typename T62,
38300     typename T63,
38301     typename T64,
38302     typename T65,
38303     typename T66,
38304     typename T67,
38305     typename T68,
38306     typename T69,
38307     typename T70,
38308     typename T71,
38309     typename T72,
38310     typename T73,
38311     typename T74>
38312 struct functionImplementation_<
38313     T0,
38314     T1,
38315     T2,
38316     T3,
38317     T4,
38318     T5,
38319     T6,
38320     T7,
38321     T8,
38322     T9,
38323     T10,
38324     T11,
38325     T12,
38326     T13,
38327     T14,
38328     T15,
38329     T16,
38330     T17,
38331     T18,
38332     T19,
38333     T20,
38334     T21,
38335     T22,
38336     T23,
38337     T24,
38338     T25,
38339     T26,
38340     T27,
38341     T28,
38342     T29,
38343     T30,
38344     T31,
38345     T32,
38346     T33,
38347     T34,
38348     T35,
38349     T36,
38350     T37,
38351     T38,
38352     T39,
38353     T40,
38354     T41,
38355     T42,
38356     T43,
38357     T44,
38358     T45,
38359     T46,
38360     T47,
38361     T48,
38362     T49,
38363     T50,
38364     T51,
38365     T52,
38366     T53,
38367     T54,
38368     T55,
38369     T56,
38370     T57,
38371     T58,
38372     T59,
38373     T60,
38374     T61,
38375     T62,
38376     T63,
38377     T64,
38378     T65,
38379     T66,
38380     T67,
38381     T68,
38382     T69,
38383     T70,
38384     T71,
38385     T72,
38386     T73,
38387     T74,
38388     NullType,
38389     NullType,
38390     NullType,
38391     NullType,
38392     NullType,
38393     NullType,
38394     NullType,
38395     NullType,
38396     NullType,
38397     NullType,
38398     NullType,
38399     NullType,
38400     NullType,
38401     NullType,
38402     NullType,
38403     NullType,
38404     NullType,
38405     NullType,
38406     NullType,
38407     NullType,
38408     NullType,
38409     NullType,
38410     NullType,
38411     NullType,
38412     NullType,
38413     NullType,
38414     NullType,
38415     NullType,
38416     NullType,
38417     NullType,
38418     NullType,
38419     NullType,
38420     NullType,
38421     NullType,
38422     NullType,
38423     NullType,
38424     NullType,
38425     NullType,
38426     NullType,
38427     NullType,
38428     NullType,
38429     NullType,
38430     NullType,
38431     NullType,
38432     NullType,
38433     NullType,
38434     NullType,
38435     NullType,
38436     NullType,
38437     NullType,
38438     NullType,
38439     NullType,
38440     NullType>
38441 {
38442     typedef detail::KernelFunctorGlobal<
38443         T0,
38444         T1,
38445         T2,
38446         T3,
38447         T4,
38448         T5,
38449         T6,
38450         T7,
38451         T8,
38452         T9,
38453         T10,
38454         T11,
38455         T12,
38456         T13,
38457         T14,
38458         T15,
38459         T16,
38460         T17,
38461         T18,
38462         T19,
38463         T20,
38464         T21,
38465         T22,
38466         T23,
38467         T24,
38468         T25,
38469         T26,
38470         T27,
38471         T28,
38472         T29,
38473         T30,
38474         T31,
38475         T32,
38476         T33,
38477         T34,
38478         T35,
38479         T36,
38480         T37,
38481         T38,
38482         T39,
38483         T40,
38484         T41,
38485         T42,
38486         T43,
38487         T44,
38488         T45,
38489         T46,
38490         T47,
38491         T48,
38492         T49,
38493         T50,
38494         T51,
38495         T52,
38496         T53,
38497         T54,
38498         T55,
38499         T56,
38500         T57,
38501         T58,
38502         T59,
38503         T60,
38504         T61,
38505         T62,
38506         T63,
38507         T64,
38508         T65,
38509         T66,
38510         T67,
38511         T68,
38512         T69,
38513         T70,
38514         T71,
38515         T72,
38516         T73,
38517         T74,
38518         NullType,
38519         NullType,
38520         NullType,
38521         NullType,
38522         NullType,
38523         NullType,
38524         NullType,
38525         NullType,
38526         NullType,
38527         NullType,
38528         NullType,
38529         NullType,
38530         NullType,
38531         NullType,
38532         NullType,
38533         NullType,
38534         NullType,
38535         NullType,
38536         NullType,
38537         NullType,
38538         NullType,
38539         NullType,
38540         NullType,
38541         NullType,
38542         NullType,
38543         NullType,
38544         NullType,
38545         NullType,
38546         NullType,
38547         NullType,
38548         NullType,
38549         NullType,
38550         NullType,
38551         NullType,
38552         NullType,
38553         NullType,
38554         NullType,
38555         NullType,
38556         NullType,
38557         NullType,
38558         NullType,
38559         NullType,
38560         NullType,
38561         NullType,
38562         NullType,
38563         NullType,
38564         NullType,
38565         NullType,
38566         NullType,
38567         NullType,
38568         NullType,
38569         NullType,
38570         NullType> FunctorType;
38571 
38572     FunctorType functor_;
38573 
38574     functionImplementation_(const FunctorType &functor) :
38575         functor_(functor)
38576     {
38577     }
38578         
38579     typedef std::tr1::function<Event (
38580         const EnqueueArgs&,
38581         T0,
38582         T1,
38583         T2,
38584         T3,
38585         T4,
38586         T5,
38587         T6,
38588         T7,
38589         T8,
38590         T9,
38591         T10,
38592         T11,
38593         T12,
38594         T13,
38595         T14,
38596         T15,
38597         T16,
38598         T17,
38599         T18,
38600         T19,
38601         T20,
38602         T21,
38603         T22,
38604         T23,
38605         T24,
38606         T25,
38607         T26,
38608         T27,
38609         T28,
38610         T29,
38611         T30,
38612         T31,
38613         T32,
38614         T33,
38615         T34,
38616         T35,
38617         T36,
38618         T37,
38619         T38,
38620         T39,
38621         T40,
38622         T41,
38623         T42,
38624         T43,
38625         T44,
38626         T45,
38627         T46,
38628         T47,
38629         T48,
38630         T49,
38631         T50,
38632         T51,
38633         T52,
38634         T53,
38635         T54,
38636         T55,
38637         T56,
38638         T57,
38639         T58,
38640         T59,
38641         T60,
38642         T61,
38643         T62,
38644         T63,
38645         T64,
38646         T65,
38647         T66,
38648         T67,
38649         T68,
38650         T69,
38651         T70,
38652         T71,
38653         T72,
38654         T73,
38655         T74)> type_;
38656 
38657     Event operator()(const EnqueueArgs& enqueueArgs,
38658         T0 arg0,
38659         T1 arg1,
38660         T2 arg2,
38661         T3 arg3,
38662         T4 arg4,
38663         T5 arg5,
38664         T6 arg6,
38665         T7 arg7,
38666         T8 arg8,
38667         T9 arg9,
38668         T10 arg10,
38669         T11 arg11,
38670         T12 arg12,
38671         T13 arg13,
38672         T14 arg14,
38673         T15 arg15,
38674         T16 arg16,
38675         T17 arg17,
38676         T18 arg18,
38677         T19 arg19,
38678         T20 arg20,
38679         T21 arg21,
38680         T22 arg22,
38681         T23 arg23,
38682         T24 arg24,
38683         T25 arg25,
38684         T26 arg26,
38685         T27 arg27,
38686         T28 arg28,
38687         T29 arg29,
38688         T30 arg30,
38689         T31 arg31,
38690         T32 arg32,
38691         T33 arg33,
38692         T34 arg34,
38693         T35 arg35,
38694         T36 arg36,
38695         T37 arg37,
38696         T38 arg38,
38697         T39 arg39,
38698         T40 arg40,
38699         T41 arg41,
38700         T42 arg42,
38701         T43 arg43,
38702         T44 arg44,
38703         T45 arg45,
38704         T46 arg46,
38705         T47 arg47,
38706         T48 arg48,
38707         T49 arg49,
38708         T50 arg50,
38709         T51 arg51,
38710         T52 arg52,
38711         T53 arg53,
38712         T54 arg54,
38713         T55 arg55,
38714         T56 arg56,
38715         T57 arg57,
38716         T58 arg58,
38717         T59 arg59,
38718         T60 arg60,
38719         T61 arg61,
38720         T62 arg62,
38721         T63 arg63,
38722         T64 arg64,
38723         T65 arg65,
38724         T66 arg66,
38725         T67 arg67,
38726         T68 arg68,
38727         T69 arg69,
38728         T70 arg70,
38729         T71 arg71,
38730         T72 arg72,
38731         T73 arg73,
38732         T74 arg74)
38733     {
38734         return functor_(
38735             enqueueArgs,
38736             arg0,
38737             arg1,
38738             arg2,
38739             arg3,
38740             arg4,
38741             arg5,
38742             arg6,
38743             arg7,
38744             arg8,
38745             arg9,
38746             arg10,
38747             arg11,
38748             arg12,
38749             arg13,
38750             arg14,
38751             arg15,
38752             arg16,
38753             arg17,
38754             arg18,
38755             arg19,
38756             arg20,
38757             arg21,
38758             arg22,
38759             arg23,
38760             arg24,
38761             arg25,
38762             arg26,
38763             arg27,
38764             arg28,
38765             arg29,
38766             arg30,
38767             arg31,
38768             arg32,
38769             arg33,
38770             arg34,
38771             arg35,
38772             arg36,
38773             arg37,
38774             arg38,
38775             arg39,
38776             arg40,
38777             arg41,
38778             arg42,
38779             arg43,
38780             arg44,
38781             arg45,
38782             arg46,
38783             arg47,
38784             arg48,
38785             arg49,
38786             arg50,
38787             arg51,
38788             arg52,
38789             arg53,
38790             arg54,
38791             arg55,
38792             arg56,
38793             arg57,
38794             arg58,
38795             arg59,
38796             arg60,
38797             arg61,
38798             arg62,
38799             arg63,
38800             arg64,
38801             arg65,
38802             arg66,
38803             arg67,
38804             arg68,
38805             arg69,
38806             arg70,
38807             arg71,
38808             arg72,
38809             arg73,
38810             arg74);
38811     }
38812 
38813     operator type_ ()    
38814     {
38815         return type_(*this);
38816     }
38817 
38818 };
38819 
38820 template<
38821     typename T0,
38822     typename T1,
38823     typename T2,
38824     typename T3,
38825     typename T4,
38826     typename T5,
38827     typename T6,
38828     typename T7,
38829     typename T8,
38830     typename T9,
38831     typename T10,
38832     typename T11,
38833     typename T12,
38834     typename T13,
38835     typename T14,
38836     typename T15,
38837     typename T16,
38838     typename T17,
38839     typename T18,
38840     typename T19,
38841     typename T20,
38842     typename T21,
38843     typename T22,
38844     typename T23,
38845     typename T24,
38846     typename T25,
38847     typename T26,
38848     typename T27,
38849     typename T28,
38850     typename T29,
38851     typename T30,
38852     typename T31,
38853     typename T32,
38854     typename T33,
38855     typename T34,
38856     typename T35,
38857     typename T36,
38858     typename T37,
38859     typename T38,
38860     typename T39,
38861     typename T40,
38862     typename T41,
38863     typename T42,
38864     typename T43,
38865     typename T44,
38866     typename T45,
38867     typename T46,
38868     typename T47,
38869     typename T48,
38870     typename T49,
38871     typename T50,
38872     typename T51,
38873     typename T52,
38874     typename T53,
38875     typename T54,
38876     typename T55,
38877     typename T56,
38878     typename T57,
38879     typename T58,
38880     typename T59,
38881     typename T60,
38882     typename T61,
38883     typename T62,
38884     typename T63,
38885     typename T64,
38886     typename T65,
38887     typename T66,
38888     typename T67,
38889     typename T68,
38890     typename T69,
38891     typename T70,
38892     typename T71,
38893     typename T72,
38894     typename T73,
38895     typename T74,
38896     typename T75>
38897 struct functionImplementation_<
38898     T0,
38899     T1,
38900     T2,
38901     T3,
38902     T4,
38903     T5,
38904     T6,
38905     T7,
38906     T8,
38907     T9,
38908     T10,
38909     T11,
38910     T12,
38911     T13,
38912     T14,
38913     T15,
38914     T16,
38915     T17,
38916     T18,
38917     T19,
38918     T20,
38919     T21,
38920     T22,
38921     T23,
38922     T24,
38923     T25,
38924     T26,
38925     T27,
38926     T28,
38927     T29,
38928     T30,
38929     T31,
38930     T32,
38931     T33,
38932     T34,
38933     T35,
38934     T36,
38935     T37,
38936     T38,
38937     T39,
38938     T40,
38939     T41,
38940     T42,
38941     T43,
38942     T44,
38943     T45,
38944     T46,
38945     T47,
38946     T48,
38947     T49,
38948     T50,
38949     T51,
38950     T52,
38951     T53,
38952     T54,
38953     T55,
38954     T56,
38955     T57,
38956     T58,
38957     T59,
38958     T60,
38959     T61,
38960     T62,
38961     T63,
38962     T64,
38963     T65,
38964     T66,
38965     T67,
38966     T68,
38967     T69,
38968     T70,
38969     T71,
38970     T72,
38971     T73,
38972     T74,
38973     T75,
38974     NullType,
38975     NullType,
38976     NullType,
38977     NullType,
38978     NullType,
38979     NullType,
38980     NullType,
38981     NullType,
38982     NullType,
38983     NullType,
38984     NullType,
38985     NullType,
38986     NullType,
38987     NullType,
38988     NullType,
38989     NullType,
38990     NullType,
38991     NullType,
38992     NullType,
38993     NullType,
38994     NullType,
38995     NullType,
38996     NullType,
38997     NullType,
38998     NullType,
38999     NullType,
39000     NullType,
39001     NullType,
39002     NullType,
39003     NullType,
39004     NullType,
39005     NullType,
39006     NullType,
39007     NullType,
39008     NullType,
39009     NullType,
39010     NullType,
39011     NullType,
39012     NullType,
39013     NullType,
39014     NullType,
39015     NullType,
39016     NullType,
39017     NullType,
39018     NullType,
39019     NullType,
39020     NullType,
39021     NullType,
39022     NullType,
39023     NullType,
39024     NullType,
39025     NullType>
39026 {
39027     typedef detail::KernelFunctorGlobal<
39028         T0,
39029         T1,
39030         T2,
39031         T3,
39032         T4,
39033         T5,
39034         T6,
39035         T7,
39036         T8,
39037         T9,
39038         T10,
39039         T11,
39040         T12,
39041         T13,
39042         T14,
39043         T15,
39044         T16,
39045         T17,
39046         T18,
39047         T19,
39048         T20,
39049         T21,
39050         T22,
39051         T23,
39052         T24,
39053         T25,
39054         T26,
39055         T27,
39056         T28,
39057         T29,
39058         T30,
39059         T31,
39060         T32,
39061         T33,
39062         T34,
39063         T35,
39064         T36,
39065         T37,
39066         T38,
39067         T39,
39068         T40,
39069         T41,
39070         T42,
39071         T43,
39072         T44,
39073         T45,
39074         T46,
39075         T47,
39076         T48,
39077         T49,
39078         T50,
39079         T51,
39080         T52,
39081         T53,
39082         T54,
39083         T55,
39084         T56,
39085         T57,
39086         T58,
39087         T59,
39088         T60,
39089         T61,
39090         T62,
39091         T63,
39092         T64,
39093         T65,
39094         T66,
39095         T67,
39096         T68,
39097         T69,
39098         T70,
39099         T71,
39100         T72,
39101         T73,
39102         T74,
39103         T75,
39104         NullType,
39105         NullType,
39106         NullType,
39107         NullType,
39108         NullType,
39109         NullType,
39110         NullType,
39111         NullType,
39112         NullType,
39113         NullType,
39114         NullType,
39115         NullType,
39116         NullType,
39117         NullType,
39118         NullType,
39119         NullType,
39120         NullType,
39121         NullType,
39122         NullType,
39123         NullType,
39124         NullType,
39125         NullType,
39126         NullType,
39127         NullType,
39128         NullType,
39129         NullType,
39130         NullType,
39131         NullType,
39132         NullType,
39133         NullType,
39134         NullType,
39135         NullType,
39136         NullType,
39137         NullType,
39138         NullType,
39139         NullType,
39140         NullType,
39141         NullType,
39142         NullType,
39143         NullType,
39144         NullType,
39145         NullType,
39146         NullType,
39147         NullType,
39148         NullType,
39149         NullType,
39150         NullType,
39151         NullType,
39152         NullType,
39153         NullType,
39154         NullType,
39155         NullType> FunctorType;
39156 
39157     FunctorType functor_;
39158 
39159     functionImplementation_(const FunctorType &functor) :
39160         functor_(functor)
39161     {
39162     }
39163         
39164     typedef std::tr1::function<Event (
39165         const EnqueueArgs&,
39166         T0,
39167         T1,
39168         T2,
39169         T3,
39170         T4,
39171         T5,
39172         T6,
39173         T7,
39174         T8,
39175         T9,
39176         T10,
39177         T11,
39178         T12,
39179         T13,
39180         T14,
39181         T15,
39182         T16,
39183         T17,
39184         T18,
39185         T19,
39186         T20,
39187         T21,
39188         T22,
39189         T23,
39190         T24,
39191         T25,
39192         T26,
39193         T27,
39194         T28,
39195         T29,
39196         T30,
39197         T31,
39198         T32,
39199         T33,
39200         T34,
39201         T35,
39202         T36,
39203         T37,
39204         T38,
39205         T39,
39206         T40,
39207         T41,
39208         T42,
39209         T43,
39210         T44,
39211         T45,
39212         T46,
39213         T47,
39214         T48,
39215         T49,
39216         T50,
39217         T51,
39218         T52,
39219         T53,
39220         T54,
39221         T55,
39222         T56,
39223         T57,
39224         T58,
39225         T59,
39226         T60,
39227         T61,
39228         T62,
39229         T63,
39230         T64,
39231         T65,
39232         T66,
39233         T67,
39234         T68,
39235         T69,
39236         T70,
39237         T71,
39238         T72,
39239         T73,
39240         T74,
39241         T75)> type_;
39242 
39243     Event operator()(const EnqueueArgs& enqueueArgs,
39244         T0 arg0,
39245         T1 arg1,
39246         T2 arg2,
39247         T3 arg3,
39248         T4 arg4,
39249         T5 arg5,
39250         T6 arg6,
39251         T7 arg7,
39252         T8 arg8,
39253         T9 arg9,
39254         T10 arg10,
39255         T11 arg11,
39256         T12 arg12,
39257         T13 arg13,
39258         T14 arg14,
39259         T15 arg15,
39260         T16 arg16,
39261         T17 arg17,
39262         T18 arg18,
39263         T19 arg19,
39264         T20 arg20,
39265         T21 arg21,
39266         T22 arg22,
39267         T23 arg23,
39268         T24 arg24,
39269         T25 arg25,
39270         T26 arg26,
39271         T27 arg27,
39272         T28 arg28,
39273         T29 arg29,
39274         T30 arg30,
39275         T31 arg31,
39276         T32 arg32,
39277         T33 arg33,
39278         T34 arg34,
39279         T35 arg35,
39280         T36 arg36,
39281         T37 arg37,
39282         T38 arg38,
39283         T39 arg39,
39284         T40 arg40,
39285         T41 arg41,
39286         T42 arg42,
39287         T43 arg43,
39288         T44 arg44,
39289         T45 arg45,
39290         T46 arg46,
39291         T47 arg47,
39292         T48 arg48,
39293         T49 arg49,
39294         T50 arg50,
39295         T51 arg51,
39296         T52 arg52,
39297         T53 arg53,
39298         T54 arg54,
39299         T55 arg55,
39300         T56 arg56,
39301         T57 arg57,
39302         T58 arg58,
39303         T59 arg59,
39304         T60 arg60,
39305         T61 arg61,
39306         T62 arg62,
39307         T63 arg63,
39308         T64 arg64,
39309         T65 arg65,
39310         T66 arg66,
39311         T67 arg67,
39312         T68 arg68,
39313         T69 arg69,
39314         T70 arg70,
39315         T71 arg71,
39316         T72 arg72,
39317         T73 arg73,
39318         T74 arg74,
39319         T75 arg75)
39320     {
39321         return functor_(
39322             enqueueArgs,
39323             arg0,
39324             arg1,
39325             arg2,
39326             arg3,
39327             arg4,
39328             arg5,
39329             arg6,
39330             arg7,
39331             arg8,
39332             arg9,
39333             arg10,
39334             arg11,
39335             arg12,
39336             arg13,
39337             arg14,
39338             arg15,
39339             arg16,
39340             arg17,
39341             arg18,
39342             arg19,
39343             arg20,
39344             arg21,
39345             arg22,
39346             arg23,
39347             arg24,
39348             arg25,
39349             arg26,
39350             arg27,
39351             arg28,
39352             arg29,
39353             arg30,
39354             arg31,
39355             arg32,
39356             arg33,
39357             arg34,
39358             arg35,
39359             arg36,
39360             arg37,
39361             arg38,
39362             arg39,
39363             arg40,
39364             arg41,
39365             arg42,
39366             arg43,
39367             arg44,
39368             arg45,
39369             arg46,
39370             arg47,
39371             arg48,
39372             arg49,
39373             arg50,
39374             arg51,
39375             arg52,
39376             arg53,
39377             arg54,
39378             arg55,
39379             arg56,
39380             arg57,
39381             arg58,
39382             arg59,
39383             arg60,
39384             arg61,
39385             arg62,
39386             arg63,
39387             arg64,
39388             arg65,
39389             arg66,
39390             arg67,
39391             arg68,
39392             arg69,
39393             arg70,
39394             arg71,
39395             arg72,
39396             arg73,
39397             arg74,
39398             arg75);
39399     }
39400 
39401     operator type_ ()    
39402     {
39403         return type_(*this);
39404     }
39405 
39406 };
39407 
39408 template<
39409     typename T0,
39410     typename T1,
39411     typename T2,
39412     typename T3,
39413     typename T4,
39414     typename T5,
39415     typename T6,
39416     typename T7,
39417     typename T8,
39418     typename T9,
39419     typename T10,
39420     typename T11,
39421     typename T12,
39422     typename T13,
39423     typename T14,
39424     typename T15,
39425     typename T16,
39426     typename T17,
39427     typename T18,
39428     typename T19,
39429     typename T20,
39430     typename T21,
39431     typename T22,
39432     typename T23,
39433     typename T24,
39434     typename T25,
39435     typename T26,
39436     typename T27,
39437     typename T28,
39438     typename T29,
39439     typename T30,
39440     typename T31,
39441     typename T32,
39442     typename T33,
39443     typename T34,
39444     typename T35,
39445     typename T36,
39446     typename T37,
39447     typename T38,
39448     typename T39,
39449     typename T40,
39450     typename T41,
39451     typename T42,
39452     typename T43,
39453     typename T44,
39454     typename T45,
39455     typename T46,
39456     typename T47,
39457     typename T48,
39458     typename T49,
39459     typename T50,
39460     typename T51,
39461     typename T52,
39462     typename T53,
39463     typename T54,
39464     typename T55,
39465     typename T56,
39466     typename T57,
39467     typename T58,
39468     typename T59,
39469     typename T60,
39470     typename T61,
39471     typename T62,
39472     typename T63,
39473     typename T64,
39474     typename T65,
39475     typename T66,
39476     typename T67,
39477     typename T68,
39478     typename T69,
39479     typename T70,
39480     typename T71,
39481     typename T72,
39482     typename T73,
39483     typename T74,
39484     typename T75,
39485     typename T76>
39486 struct functionImplementation_<
39487     T0,
39488     T1,
39489     T2,
39490     T3,
39491     T4,
39492     T5,
39493     T6,
39494     T7,
39495     T8,
39496     T9,
39497     T10,
39498     T11,
39499     T12,
39500     T13,
39501     T14,
39502     T15,
39503     T16,
39504     T17,
39505     T18,
39506     T19,
39507     T20,
39508     T21,
39509     T22,
39510     T23,
39511     T24,
39512     T25,
39513     T26,
39514     T27,
39515     T28,
39516     T29,
39517     T30,
39518     T31,
39519     T32,
39520     T33,
39521     T34,
39522     T35,
39523     T36,
39524     T37,
39525     T38,
39526     T39,
39527     T40,
39528     T41,
39529     T42,
39530     T43,
39531     T44,
39532     T45,
39533     T46,
39534     T47,
39535     T48,
39536     T49,
39537     T50,
39538     T51,
39539     T52,
39540     T53,
39541     T54,
39542     T55,
39543     T56,
39544     T57,
39545     T58,
39546     T59,
39547     T60,
39548     T61,
39549     T62,
39550     T63,
39551     T64,
39552     T65,
39553     T66,
39554     T67,
39555     T68,
39556     T69,
39557     T70,
39558     T71,
39559     T72,
39560     T73,
39561     T74,
39562     T75,
39563     T76,
39564     NullType,
39565     NullType,
39566     NullType,
39567     NullType,
39568     NullType,
39569     NullType,
39570     NullType,
39571     NullType,
39572     NullType,
39573     NullType,
39574     NullType,
39575     NullType,
39576     NullType,
39577     NullType,
39578     NullType,
39579     NullType,
39580     NullType,
39581     NullType,
39582     NullType,
39583     NullType,
39584     NullType,
39585     NullType,
39586     NullType,
39587     NullType,
39588     NullType,
39589     NullType,
39590     NullType,
39591     NullType,
39592     NullType,
39593     NullType,
39594     NullType,
39595     NullType,
39596     NullType,
39597     NullType,
39598     NullType,
39599     NullType,
39600     NullType,
39601     NullType,
39602     NullType,
39603     NullType,
39604     NullType,
39605     NullType,
39606     NullType,
39607     NullType,
39608     NullType,
39609     NullType,
39610     NullType,
39611     NullType,
39612     NullType,
39613     NullType,
39614     NullType>
39615 {
39616     typedef detail::KernelFunctorGlobal<
39617         T0,
39618         T1,
39619         T2,
39620         T3,
39621         T4,
39622         T5,
39623         T6,
39624         T7,
39625         T8,
39626         T9,
39627         T10,
39628         T11,
39629         T12,
39630         T13,
39631         T14,
39632         T15,
39633         T16,
39634         T17,
39635         T18,
39636         T19,
39637         T20,
39638         T21,
39639         T22,
39640         T23,
39641         T24,
39642         T25,
39643         T26,
39644         T27,
39645         T28,
39646         T29,
39647         T30,
39648         T31,
39649         T32,
39650         T33,
39651         T34,
39652         T35,
39653         T36,
39654         T37,
39655         T38,
39656         T39,
39657         T40,
39658         T41,
39659         T42,
39660         T43,
39661         T44,
39662         T45,
39663         T46,
39664         T47,
39665         T48,
39666         T49,
39667         T50,
39668         T51,
39669         T52,
39670         T53,
39671         T54,
39672         T55,
39673         T56,
39674         T57,
39675         T58,
39676         T59,
39677         T60,
39678         T61,
39679         T62,
39680         T63,
39681         T64,
39682         T65,
39683         T66,
39684         T67,
39685         T68,
39686         T69,
39687         T70,
39688         T71,
39689         T72,
39690         T73,
39691         T74,
39692         T75,
39693         T76,
39694         NullType,
39695         NullType,
39696         NullType,
39697         NullType,
39698         NullType,
39699         NullType,
39700         NullType,
39701         NullType,
39702         NullType,
39703         NullType,
39704         NullType,
39705         NullType,
39706         NullType,
39707         NullType,
39708         NullType,
39709         NullType,
39710         NullType,
39711         NullType,
39712         NullType,
39713         NullType,
39714         NullType,
39715         NullType,
39716         NullType,
39717         NullType,
39718         NullType,
39719         NullType,
39720         NullType,
39721         NullType,
39722         NullType,
39723         NullType,
39724         NullType,
39725         NullType,
39726         NullType,
39727         NullType,
39728         NullType,
39729         NullType,
39730         NullType,
39731         NullType,
39732         NullType,
39733         NullType,
39734         NullType,
39735         NullType,
39736         NullType,
39737         NullType,
39738         NullType,
39739         NullType,
39740         NullType,
39741         NullType,
39742         NullType,
39743         NullType,
39744         NullType> FunctorType;
39745 
39746     FunctorType functor_;
39747 
39748     functionImplementation_(const FunctorType &functor) :
39749         functor_(functor)
39750     {
39751     }
39752         
39753     typedef std::tr1::function<Event (
39754         const EnqueueArgs&,
39755         T0,
39756         T1,
39757         T2,
39758         T3,
39759         T4,
39760         T5,
39761         T6,
39762         T7,
39763         T8,
39764         T9,
39765         T10,
39766         T11,
39767         T12,
39768         T13,
39769         T14,
39770         T15,
39771         T16,
39772         T17,
39773         T18,
39774         T19,
39775         T20,
39776         T21,
39777         T22,
39778         T23,
39779         T24,
39780         T25,
39781         T26,
39782         T27,
39783         T28,
39784         T29,
39785         T30,
39786         T31,
39787         T32,
39788         T33,
39789         T34,
39790         T35,
39791         T36,
39792         T37,
39793         T38,
39794         T39,
39795         T40,
39796         T41,
39797         T42,
39798         T43,
39799         T44,
39800         T45,
39801         T46,
39802         T47,
39803         T48,
39804         T49,
39805         T50,
39806         T51,
39807         T52,
39808         T53,
39809         T54,
39810         T55,
39811         T56,
39812         T57,
39813         T58,
39814         T59,
39815         T60,
39816         T61,
39817         T62,
39818         T63,
39819         T64,
39820         T65,
39821         T66,
39822         T67,
39823         T68,
39824         T69,
39825         T70,
39826         T71,
39827         T72,
39828         T73,
39829         T74,
39830         T75,
39831         T76)> type_;
39832 
39833     Event operator()(const EnqueueArgs& enqueueArgs,
39834         T0 arg0,
39835         T1 arg1,
39836         T2 arg2,
39837         T3 arg3,
39838         T4 arg4,
39839         T5 arg5,
39840         T6 arg6,
39841         T7 arg7,
39842         T8 arg8,
39843         T9 arg9,
39844         T10 arg10,
39845         T11 arg11,
39846         T12 arg12,
39847         T13 arg13,
39848         T14 arg14,
39849         T15 arg15,
39850         T16 arg16,
39851         T17 arg17,
39852         T18 arg18,
39853         T19 arg19,
39854         T20 arg20,
39855         T21 arg21,
39856         T22 arg22,
39857         T23 arg23,
39858         T24 arg24,
39859         T25 arg25,
39860         T26 arg26,
39861         T27 arg27,
39862         T28 arg28,
39863         T29 arg29,
39864         T30 arg30,
39865         T31 arg31,
39866         T32 arg32,
39867         T33 arg33,
39868         T34 arg34,
39869         T35 arg35,
39870         T36 arg36,
39871         T37 arg37,
39872         T38 arg38,
39873         T39 arg39,
39874         T40 arg40,
39875         T41 arg41,
39876         T42 arg42,
39877         T43 arg43,
39878         T44 arg44,
39879         T45 arg45,
39880         T46 arg46,
39881         T47 arg47,
39882         T48 arg48,
39883         T49 arg49,
39884         T50 arg50,
39885         T51 arg51,
39886         T52 arg52,
39887         T53 arg53,
39888         T54 arg54,
39889         T55 arg55,
39890         T56 arg56,
39891         T57 arg57,
39892         T58 arg58,
39893         T59 arg59,
39894         T60 arg60,
39895         T61 arg61,
39896         T62 arg62,
39897         T63 arg63,
39898         T64 arg64,
39899         T65 arg65,
39900         T66 arg66,
39901         T67 arg67,
39902         T68 arg68,
39903         T69 arg69,
39904         T70 arg70,
39905         T71 arg71,
39906         T72 arg72,
39907         T73 arg73,
39908         T74 arg74,
39909         T75 arg75,
39910         T76 arg76)
39911     {
39912         return functor_(
39913             enqueueArgs,
39914             arg0,
39915             arg1,
39916             arg2,
39917             arg3,
39918             arg4,
39919             arg5,
39920             arg6,
39921             arg7,
39922             arg8,
39923             arg9,
39924             arg10,
39925             arg11,
39926             arg12,
39927             arg13,
39928             arg14,
39929             arg15,
39930             arg16,
39931             arg17,
39932             arg18,
39933             arg19,
39934             arg20,
39935             arg21,
39936             arg22,
39937             arg23,
39938             arg24,
39939             arg25,
39940             arg26,
39941             arg27,
39942             arg28,
39943             arg29,
39944             arg30,
39945             arg31,
39946             arg32,
39947             arg33,
39948             arg34,
39949             arg35,
39950             arg36,
39951             arg37,
39952             arg38,
39953             arg39,
39954             arg40,
39955             arg41,
39956             arg42,
39957             arg43,
39958             arg44,
39959             arg45,
39960             arg46,
39961             arg47,
39962             arg48,
39963             arg49,
39964             arg50,
39965             arg51,
39966             arg52,
39967             arg53,
39968             arg54,
39969             arg55,
39970             arg56,
39971             arg57,
39972             arg58,
39973             arg59,
39974             arg60,
39975             arg61,
39976             arg62,
39977             arg63,
39978             arg64,
39979             arg65,
39980             arg66,
39981             arg67,
39982             arg68,
39983             arg69,
39984             arg70,
39985             arg71,
39986             arg72,
39987             arg73,
39988             arg74,
39989             arg75,
39990             arg76);
39991     }
39992 
39993     operator type_ ()    
39994     {
39995         return type_(*this);
39996     }
39997 
39998 };
39999 
40000 template<
40001     typename T0,
40002     typename T1,
40003     typename T2,
40004     typename T3,
40005     typename T4,
40006     typename T5,
40007     typename T6,
40008     typename T7,
40009     typename T8,
40010     typename T9,
40011     typename T10,
40012     typename T11,
40013     typename T12,
40014     typename T13,
40015     typename T14,
40016     typename T15,
40017     typename T16,
40018     typename T17,
40019     typename T18,
40020     typename T19,
40021     typename T20,
40022     typename T21,
40023     typename T22,
40024     typename T23,
40025     typename T24,
40026     typename T25,
40027     typename T26,
40028     typename T27,
40029     typename T28,
40030     typename T29,
40031     typename T30,
40032     typename T31,
40033     typename T32,
40034     typename T33,
40035     typename T34,
40036     typename T35,
40037     typename T36,
40038     typename T37,
40039     typename T38,
40040     typename T39,
40041     typename T40,
40042     typename T41,
40043     typename T42,
40044     typename T43,
40045     typename T44,
40046     typename T45,
40047     typename T46,
40048     typename T47,
40049     typename T48,
40050     typename T49,
40051     typename T50,
40052     typename T51,
40053     typename T52,
40054     typename T53,
40055     typename T54,
40056     typename T55,
40057     typename T56,
40058     typename T57,
40059     typename T58,
40060     typename T59,
40061     typename T60,
40062     typename T61,
40063     typename T62,
40064     typename T63,
40065     typename T64,
40066     typename T65,
40067     typename T66,
40068     typename T67,
40069     typename T68,
40070     typename T69,
40071     typename T70,
40072     typename T71,
40073     typename T72,
40074     typename T73,
40075     typename T74,
40076     typename T75,
40077     typename T76,
40078     typename T77>
40079 struct functionImplementation_<
40080     T0,
40081     T1,
40082     T2,
40083     T3,
40084     T4,
40085     T5,
40086     T6,
40087     T7,
40088     T8,
40089     T9,
40090     T10,
40091     T11,
40092     T12,
40093     T13,
40094     T14,
40095     T15,
40096     T16,
40097     T17,
40098     T18,
40099     T19,
40100     T20,
40101     T21,
40102     T22,
40103     T23,
40104     T24,
40105     T25,
40106     T26,
40107     T27,
40108     T28,
40109     T29,
40110     T30,
40111     T31,
40112     T32,
40113     T33,
40114     T34,
40115     T35,
40116     T36,
40117     T37,
40118     T38,
40119     T39,
40120     T40,
40121     T41,
40122     T42,
40123     T43,
40124     T44,
40125     T45,
40126     T46,
40127     T47,
40128     T48,
40129     T49,
40130     T50,
40131     T51,
40132     T52,
40133     T53,
40134     T54,
40135     T55,
40136     T56,
40137     T57,
40138     T58,
40139     T59,
40140     T60,
40141     T61,
40142     T62,
40143     T63,
40144     T64,
40145     T65,
40146     T66,
40147     T67,
40148     T68,
40149     T69,
40150     T70,
40151     T71,
40152     T72,
40153     T73,
40154     T74,
40155     T75,
40156     T76,
40157     T77,
40158     NullType,
40159     NullType,
40160     NullType,
40161     NullType,
40162     NullType,
40163     NullType,
40164     NullType,
40165     NullType,
40166     NullType,
40167     NullType,
40168     NullType,
40169     NullType,
40170     NullType,
40171     NullType,
40172     NullType,
40173     NullType,
40174     NullType,
40175     NullType,
40176     NullType,
40177     NullType,
40178     NullType,
40179     NullType,
40180     NullType,
40181     NullType,
40182     NullType,
40183     NullType,
40184     NullType,
40185     NullType,
40186     NullType,
40187     NullType,
40188     NullType,
40189     NullType,
40190     NullType,
40191     NullType,
40192     NullType,
40193     NullType,
40194     NullType,
40195     NullType,
40196     NullType,
40197     NullType,
40198     NullType,
40199     NullType,
40200     NullType,
40201     NullType,
40202     NullType,
40203     NullType,
40204     NullType,
40205     NullType,
40206     NullType,
40207     NullType>
40208 {
40209     typedef detail::KernelFunctorGlobal<
40210         T0,
40211         T1,
40212         T2,
40213         T3,
40214         T4,
40215         T5,
40216         T6,
40217         T7,
40218         T8,
40219         T9,
40220         T10,
40221         T11,
40222         T12,
40223         T13,
40224         T14,
40225         T15,
40226         T16,
40227         T17,
40228         T18,
40229         T19,
40230         T20,
40231         T21,
40232         T22,
40233         T23,
40234         T24,
40235         T25,
40236         T26,
40237         T27,
40238         T28,
40239         T29,
40240         T30,
40241         T31,
40242         T32,
40243         T33,
40244         T34,
40245         T35,
40246         T36,
40247         T37,
40248         T38,
40249         T39,
40250         T40,
40251         T41,
40252         T42,
40253         T43,
40254         T44,
40255         T45,
40256         T46,
40257         T47,
40258         T48,
40259         T49,
40260         T50,
40261         T51,
40262         T52,
40263         T53,
40264         T54,
40265         T55,
40266         T56,
40267         T57,
40268         T58,
40269         T59,
40270         T60,
40271         T61,
40272         T62,
40273         T63,
40274         T64,
40275         T65,
40276         T66,
40277         T67,
40278         T68,
40279         T69,
40280         T70,
40281         T71,
40282         T72,
40283         T73,
40284         T74,
40285         T75,
40286         T76,
40287         T77,
40288         NullType,
40289         NullType,
40290         NullType,
40291         NullType,
40292         NullType,
40293         NullType,
40294         NullType,
40295         NullType,
40296         NullType,
40297         NullType,
40298         NullType,
40299         NullType,
40300         NullType,
40301         NullType,
40302         NullType,
40303         NullType,
40304         NullType,
40305         NullType,
40306         NullType,
40307         NullType,
40308         NullType,
40309         NullType,
40310         NullType,
40311         NullType,
40312         NullType,
40313         NullType,
40314         NullType,
40315         NullType,
40316         NullType,
40317         NullType,
40318         NullType,
40319         NullType,
40320         NullType,
40321         NullType,
40322         NullType,
40323         NullType,
40324         NullType,
40325         NullType,
40326         NullType,
40327         NullType,
40328         NullType,
40329         NullType,
40330         NullType,
40331         NullType,
40332         NullType,
40333         NullType,
40334         NullType,
40335         NullType,
40336         NullType,
40337         NullType> FunctorType;
40338 
40339     FunctorType functor_;
40340 
40341     functionImplementation_(const FunctorType &functor) :
40342         functor_(functor)
40343     {
40344     }
40345         
40346     typedef std::tr1::function<Event (
40347         const EnqueueArgs&,
40348         T0,
40349         T1,
40350         T2,
40351         T3,
40352         T4,
40353         T5,
40354         T6,
40355         T7,
40356         T8,
40357         T9,
40358         T10,
40359         T11,
40360         T12,
40361         T13,
40362         T14,
40363         T15,
40364         T16,
40365         T17,
40366         T18,
40367         T19,
40368         T20,
40369         T21,
40370         T22,
40371         T23,
40372         T24,
40373         T25,
40374         T26,
40375         T27,
40376         T28,
40377         T29,
40378         T30,
40379         T31,
40380         T32,
40381         T33,
40382         T34,
40383         T35,
40384         T36,
40385         T37,
40386         T38,
40387         T39,
40388         T40,
40389         T41,
40390         T42,
40391         T43,
40392         T44,
40393         T45,
40394         T46,
40395         T47,
40396         T48,
40397         T49,
40398         T50,
40399         T51,
40400         T52,
40401         T53,
40402         T54,
40403         T55,
40404         T56,
40405         T57,
40406         T58,
40407         T59,
40408         T60,
40409         T61,
40410         T62,
40411         T63,
40412         T64,
40413         T65,
40414         T66,
40415         T67,
40416         T68,
40417         T69,
40418         T70,
40419         T71,
40420         T72,
40421         T73,
40422         T74,
40423         T75,
40424         T76,
40425         T77)> type_;
40426 
40427     Event operator()(const EnqueueArgs& enqueueArgs,
40428         T0 arg0,
40429         T1 arg1,
40430         T2 arg2,
40431         T3 arg3,
40432         T4 arg4,
40433         T5 arg5,
40434         T6 arg6,
40435         T7 arg7,
40436         T8 arg8,
40437         T9 arg9,
40438         T10 arg10,
40439         T11 arg11,
40440         T12 arg12,
40441         T13 arg13,
40442         T14 arg14,
40443         T15 arg15,
40444         T16 arg16,
40445         T17 arg17,
40446         T18 arg18,
40447         T19 arg19,
40448         T20 arg20,
40449         T21 arg21,
40450         T22 arg22,
40451         T23 arg23,
40452         T24 arg24,
40453         T25 arg25,
40454         T26 arg26,
40455         T27 arg27,
40456         T28 arg28,
40457         T29 arg29,
40458         T30 arg30,
40459         T31 arg31,
40460         T32 arg32,
40461         T33 arg33,
40462         T34 arg34,
40463         T35 arg35,
40464         T36 arg36,
40465         T37 arg37,
40466         T38 arg38,
40467         T39 arg39,
40468         T40 arg40,
40469         T41 arg41,
40470         T42 arg42,
40471         T43 arg43,
40472         T44 arg44,
40473         T45 arg45,
40474         T46 arg46,
40475         T47 arg47,
40476         T48 arg48,
40477         T49 arg49,
40478         T50 arg50,
40479         T51 arg51,
40480         T52 arg52,
40481         T53 arg53,
40482         T54 arg54,
40483         T55 arg55,
40484         T56 arg56,
40485         T57 arg57,
40486         T58 arg58,
40487         T59 arg59,
40488         T60 arg60,
40489         T61 arg61,
40490         T62 arg62,
40491         T63 arg63,
40492         T64 arg64,
40493         T65 arg65,
40494         T66 arg66,
40495         T67 arg67,
40496         T68 arg68,
40497         T69 arg69,
40498         T70 arg70,
40499         T71 arg71,
40500         T72 arg72,
40501         T73 arg73,
40502         T74 arg74,
40503         T75 arg75,
40504         T76 arg76,
40505         T77 arg77)
40506     {
40507         return functor_(
40508             enqueueArgs,
40509             arg0,
40510             arg1,
40511             arg2,
40512             arg3,
40513             arg4,
40514             arg5,
40515             arg6,
40516             arg7,
40517             arg8,
40518             arg9,
40519             arg10,
40520             arg11,
40521             arg12,
40522             arg13,
40523             arg14,
40524             arg15,
40525             arg16,
40526             arg17,
40527             arg18,
40528             arg19,
40529             arg20,
40530             arg21,
40531             arg22,
40532             arg23,
40533             arg24,
40534             arg25,
40535             arg26,
40536             arg27,
40537             arg28,
40538             arg29,
40539             arg30,
40540             arg31,
40541             arg32,
40542             arg33,
40543             arg34,
40544             arg35,
40545             arg36,
40546             arg37,
40547             arg38,
40548             arg39,
40549             arg40,
40550             arg41,
40551             arg42,
40552             arg43,
40553             arg44,
40554             arg45,
40555             arg46,
40556             arg47,
40557             arg48,
40558             arg49,
40559             arg50,
40560             arg51,
40561             arg52,
40562             arg53,
40563             arg54,
40564             arg55,
40565             arg56,
40566             arg57,
40567             arg58,
40568             arg59,
40569             arg60,
40570             arg61,
40571             arg62,
40572             arg63,
40573             arg64,
40574             arg65,
40575             arg66,
40576             arg67,
40577             arg68,
40578             arg69,
40579             arg70,
40580             arg71,
40581             arg72,
40582             arg73,
40583             arg74,
40584             arg75,
40585             arg76,
40586             arg77);
40587     }
40588 
40589     operator type_ ()    
40590     {
40591         return type_(*this);
40592     }
40593 
40594 };
40595 
40596 template<
40597     typename T0,
40598     typename T1,
40599     typename T2,
40600     typename T3,
40601     typename T4,
40602     typename T5,
40603     typename T6,
40604     typename T7,
40605     typename T8,
40606     typename T9,
40607     typename T10,
40608     typename T11,
40609     typename T12,
40610     typename T13,
40611     typename T14,
40612     typename T15,
40613     typename T16,
40614     typename T17,
40615     typename T18,
40616     typename T19,
40617     typename T20,
40618     typename T21,
40619     typename T22,
40620     typename T23,
40621     typename T24,
40622     typename T25,
40623     typename T26,
40624     typename T27,
40625     typename T28,
40626     typename T29,
40627     typename T30,
40628     typename T31,
40629     typename T32,
40630     typename T33,
40631     typename T34,
40632     typename T35,
40633     typename T36,
40634     typename T37,
40635     typename T38,
40636     typename T39,
40637     typename T40,
40638     typename T41,
40639     typename T42,
40640     typename T43,
40641     typename T44,
40642     typename T45,
40643     typename T46,
40644     typename T47,
40645     typename T48,
40646     typename T49,
40647     typename T50,
40648     typename T51,
40649     typename T52,
40650     typename T53,
40651     typename T54,
40652     typename T55,
40653     typename T56,
40654     typename T57,
40655     typename T58,
40656     typename T59,
40657     typename T60,
40658     typename T61,
40659     typename T62,
40660     typename T63,
40661     typename T64,
40662     typename T65,
40663     typename T66,
40664     typename T67,
40665     typename T68,
40666     typename T69,
40667     typename T70,
40668     typename T71,
40669     typename T72,
40670     typename T73,
40671     typename T74,
40672     typename T75,
40673     typename T76,
40674     typename T77,
40675     typename T78>
40676 struct functionImplementation_<
40677     T0,
40678     T1,
40679     T2,
40680     T3,
40681     T4,
40682     T5,
40683     T6,
40684     T7,
40685     T8,
40686     T9,
40687     T10,
40688     T11,
40689     T12,
40690     T13,
40691     T14,
40692     T15,
40693     T16,
40694     T17,
40695     T18,
40696     T19,
40697     T20,
40698     T21,
40699     T22,
40700     T23,
40701     T24,
40702     T25,
40703     T26,
40704     T27,
40705     T28,
40706     T29,
40707     T30,
40708     T31,
40709     T32,
40710     T33,
40711     T34,
40712     T35,
40713     T36,
40714     T37,
40715     T38,
40716     T39,
40717     T40,
40718     T41,
40719     T42,
40720     T43,
40721     T44,
40722     T45,
40723     T46,
40724     T47,
40725     T48,
40726     T49,
40727     T50,
40728     T51,
40729     T52,
40730     T53,
40731     T54,
40732     T55,
40733     T56,
40734     T57,
40735     T58,
40736     T59,
40737     T60,
40738     T61,
40739     T62,
40740     T63,
40741     T64,
40742     T65,
40743     T66,
40744     T67,
40745     T68,
40746     T69,
40747     T70,
40748     T71,
40749     T72,
40750     T73,
40751     T74,
40752     T75,
40753     T76,
40754     T77,
40755     T78,
40756     NullType,
40757     NullType,
40758     NullType,
40759     NullType,
40760     NullType,
40761     NullType,
40762     NullType,
40763     NullType,
40764     NullType,
40765     NullType,
40766     NullType,
40767     NullType,
40768     NullType,
40769     NullType,
40770     NullType,
40771     NullType,
40772     NullType,
40773     NullType,
40774     NullType,
40775     NullType,
40776     NullType,
40777     NullType,
40778     NullType,
40779     NullType,
40780     NullType,
40781     NullType,
40782     NullType,
40783     NullType,
40784     NullType,
40785     NullType,
40786     NullType,
40787     NullType,
40788     NullType,
40789     NullType,
40790     NullType,
40791     NullType,
40792     NullType,
40793     NullType,
40794     NullType,
40795     NullType,
40796     NullType,
40797     NullType,
40798     NullType,
40799     NullType,
40800     NullType,
40801     NullType,
40802     NullType,
40803     NullType,
40804     NullType>
40805 {
40806     typedef detail::KernelFunctorGlobal<
40807         T0,
40808         T1,
40809         T2,
40810         T3,
40811         T4,
40812         T5,
40813         T6,
40814         T7,
40815         T8,
40816         T9,
40817         T10,
40818         T11,
40819         T12,
40820         T13,
40821         T14,
40822         T15,
40823         T16,
40824         T17,
40825         T18,
40826         T19,
40827         T20,
40828         T21,
40829         T22,
40830         T23,
40831         T24,
40832         T25,
40833         T26,
40834         T27,
40835         T28,
40836         T29,
40837         T30,
40838         T31,
40839         T32,
40840         T33,
40841         T34,
40842         T35,
40843         T36,
40844         T37,
40845         T38,
40846         T39,
40847         T40,
40848         T41,
40849         T42,
40850         T43,
40851         T44,
40852         T45,
40853         T46,
40854         T47,
40855         T48,
40856         T49,
40857         T50,
40858         T51,
40859         T52,
40860         T53,
40861         T54,
40862         T55,
40863         T56,
40864         T57,
40865         T58,
40866         T59,
40867         T60,
40868         T61,
40869         T62,
40870         T63,
40871         T64,
40872         T65,
40873         T66,
40874         T67,
40875         T68,
40876         T69,
40877         T70,
40878         T71,
40879         T72,
40880         T73,
40881         T74,
40882         T75,
40883         T76,
40884         T77,
40885         T78,
40886         NullType,
40887         NullType,
40888         NullType,
40889         NullType,
40890         NullType,
40891         NullType,
40892         NullType,
40893         NullType,
40894         NullType,
40895         NullType,
40896         NullType,
40897         NullType,
40898         NullType,
40899         NullType,
40900         NullType,
40901         NullType,
40902         NullType,
40903         NullType,
40904         NullType,
40905         NullType,
40906         NullType,
40907         NullType,
40908         NullType,
40909         NullType,
40910         NullType,
40911         NullType,
40912         NullType,
40913         NullType,
40914         NullType,
40915         NullType,
40916         NullType,
40917         NullType,
40918         NullType,
40919         NullType,
40920         NullType,
40921         NullType,
40922         NullType,
40923         NullType,
40924         NullType,
40925         NullType,
40926         NullType,
40927         NullType,
40928         NullType,
40929         NullType,
40930         NullType,
40931         NullType,
40932         NullType,
40933         NullType,
40934         NullType> FunctorType;
40935 
40936     FunctorType functor_;
40937 
40938     functionImplementation_(const FunctorType &functor) :
40939         functor_(functor)
40940     {
40941     }
40942         
40943     typedef std::tr1::function<Event (
40944         const EnqueueArgs&,
40945         T0,
40946         T1,
40947         T2,
40948         T3,
40949         T4,
40950         T5,
40951         T6,
40952         T7,
40953         T8,
40954         T9,
40955         T10,
40956         T11,
40957         T12,
40958         T13,
40959         T14,
40960         T15,
40961         T16,
40962         T17,
40963         T18,
40964         T19,
40965         T20,
40966         T21,
40967         T22,
40968         T23,
40969         T24,
40970         T25,
40971         T26,
40972         T27,
40973         T28,
40974         T29,
40975         T30,
40976         T31,
40977         T32,
40978         T33,
40979         T34,
40980         T35,
40981         T36,
40982         T37,
40983         T38,
40984         T39,
40985         T40,
40986         T41,
40987         T42,
40988         T43,
40989         T44,
40990         T45,
40991         T46,
40992         T47,
40993         T48,
40994         T49,
40995         T50,
40996         T51,
40997         T52,
40998         T53,
40999         T54,
41000         T55,
41001         T56,
41002         T57,
41003         T58,
41004         T59,
41005         T60,
41006         T61,
41007         T62,
41008         T63,
41009         T64,
41010         T65,
41011         T66,
41012         T67,
41013         T68,
41014         T69,
41015         T70,
41016         T71,
41017         T72,
41018         T73,
41019         T74,
41020         T75,
41021         T76,
41022         T77,
41023         T78)> type_;
41024 
41025     Event operator()(const EnqueueArgs& enqueueArgs,
41026         T0 arg0,
41027         T1 arg1,
41028         T2 arg2,
41029         T3 arg3,
41030         T4 arg4,
41031         T5 arg5,
41032         T6 arg6,
41033         T7 arg7,
41034         T8 arg8,
41035         T9 arg9,
41036         T10 arg10,
41037         T11 arg11,
41038         T12 arg12,
41039         T13 arg13,
41040         T14 arg14,
41041         T15 arg15,
41042         T16 arg16,
41043         T17 arg17,
41044         T18 arg18,
41045         T19 arg19,
41046         T20 arg20,
41047         T21 arg21,
41048         T22 arg22,
41049         T23 arg23,
41050         T24 arg24,
41051         T25 arg25,
41052         T26 arg26,
41053         T27 arg27,
41054         T28 arg28,
41055         T29 arg29,
41056         T30 arg30,
41057         T31 arg31,
41058         T32 arg32,
41059         T33 arg33,
41060         T34 arg34,
41061         T35 arg35,
41062         T36 arg36,
41063         T37 arg37,
41064         T38 arg38,
41065         T39 arg39,
41066         T40 arg40,
41067         T41 arg41,
41068         T42 arg42,
41069         T43 arg43,
41070         T44 arg44,
41071         T45 arg45,
41072         T46 arg46,
41073         T47 arg47,
41074         T48 arg48,
41075         T49 arg49,
41076         T50 arg50,
41077         T51 arg51,
41078         T52 arg52,
41079         T53 arg53,
41080         T54 arg54,
41081         T55 arg55,
41082         T56 arg56,
41083         T57 arg57,
41084         T58 arg58,
41085         T59 arg59,
41086         T60 arg60,
41087         T61 arg61,
41088         T62 arg62,
41089         T63 arg63,
41090         T64 arg64,
41091         T65 arg65,
41092         T66 arg66,
41093         T67 arg67,
41094         T68 arg68,
41095         T69 arg69,
41096         T70 arg70,
41097         T71 arg71,
41098         T72 arg72,
41099         T73 arg73,
41100         T74 arg74,
41101         T75 arg75,
41102         T76 arg76,
41103         T77 arg77,
41104         T78 arg78)
41105     {
41106         return functor_(
41107             enqueueArgs,
41108             arg0,
41109             arg1,
41110             arg2,
41111             arg3,
41112             arg4,
41113             arg5,
41114             arg6,
41115             arg7,
41116             arg8,
41117             arg9,
41118             arg10,
41119             arg11,
41120             arg12,
41121             arg13,
41122             arg14,
41123             arg15,
41124             arg16,
41125             arg17,
41126             arg18,
41127             arg19,
41128             arg20,
41129             arg21,
41130             arg22,
41131             arg23,
41132             arg24,
41133             arg25,
41134             arg26,
41135             arg27,
41136             arg28,
41137             arg29,
41138             arg30,
41139             arg31,
41140             arg32,
41141             arg33,
41142             arg34,
41143             arg35,
41144             arg36,
41145             arg37,
41146             arg38,
41147             arg39,
41148             arg40,
41149             arg41,
41150             arg42,
41151             arg43,
41152             arg44,
41153             arg45,
41154             arg46,
41155             arg47,
41156             arg48,
41157             arg49,
41158             arg50,
41159             arg51,
41160             arg52,
41161             arg53,
41162             arg54,
41163             arg55,
41164             arg56,
41165             arg57,
41166             arg58,
41167             arg59,
41168             arg60,
41169             arg61,
41170             arg62,
41171             arg63,
41172             arg64,
41173             arg65,
41174             arg66,
41175             arg67,
41176             arg68,
41177             arg69,
41178             arg70,
41179             arg71,
41180             arg72,
41181             arg73,
41182             arg74,
41183             arg75,
41184             arg76,
41185             arg77,
41186             arg78);
41187     }
41188 
41189     operator type_ ()    
41190     {
41191         return type_(*this);
41192     }
41193 
41194 };
41195 
41196 template<
41197     typename T0,
41198     typename T1,
41199     typename T2,
41200     typename T3,
41201     typename T4,
41202     typename T5,
41203     typename T6,
41204     typename T7,
41205     typename T8,
41206     typename T9,
41207     typename T10,
41208     typename T11,
41209     typename T12,
41210     typename T13,
41211     typename T14,
41212     typename T15,
41213     typename T16,
41214     typename T17,
41215     typename T18,
41216     typename T19,
41217     typename T20,
41218     typename T21,
41219     typename T22,
41220     typename T23,
41221     typename T24,
41222     typename T25,
41223     typename T26,
41224     typename T27,
41225     typename T28,
41226     typename T29,
41227     typename T30,
41228     typename T31,
41229     typename T32,
41230     typename T33,
41231     typename T34,
41232     typename T35,
41233     typename T36,
41234     typename T37,
41235     typename T38,
41236     typename T39,
41237     typename T40,
41238     typename T41,
41239     typename T42,
41240     typename T43,
41241     typename T44,
41242     typename T45,
41243     typename T46,
41244     typename T47,
41245     typename T48,
41246     typename T49,
41247     typename T50,
41248     typename T51,
41249     typename T52,
41250     typename T53,
41251     typename T54,
41252     typename T55,
41253     typename T56,
41254     typename T57,
41255     typename T58,
41256     typename T59,
41257     typename T60,
41258     typename T61,
41259     typename T62,
41260     typename T63,
41261     typename T64,
41262     typename T65,
41263     typename T66,
41264     typename T67,
41265     typename T68,
41266     typename T69,
41267     typename T70,
41268     typename T71,
41269     typename T72,
41270     typename T73,
41271     typename T74,
41272     typename T75,
41273     typename T76,
41274     typename T77,
41275     typename T78,
41276     typename T79>
41277 struct functionImplementation_<
41278     T0,
41279     T1,
41280     T2,
41281     T3,
41282     T4,
41283     T5,
41284     T6,
41285     T7,
41286     T8,
41287     T9,
41288     T10,
41289     T11,
41290     T12,
41291     T13,
41292     T14,
41293     T15,
41294     T16,
41295     T17,
41296     T18,
41297     T19,
41298     T20,
41299     T21,
41300     T22,
41301     T23,
41302     T24,
41303     T25,
41304     T26,
41305     T27,
41306     T28,
41307     T29,
41308     T30,
41309     T31,
41310     T32,
41311     T33,
41312     T34,
41313     T35,
41314     T36,
41315     T37,
41316     T38,
41317     T39,
41318     T40,
41319     T41,
41320     T42,
41321     T43,
41322     T44,
41323     T45,
41324     T46,
41325     T47,
41326     T48,
41327     T49,
41328     T50,
41329     T51,
41330     T52,
41331     T53,
41332     T54,
41333     T55,
41334     T56,
41335     T57,
41336     T58,
41337     T59,
41338     T60,
41339     T61,
41340     T62,
41341     T63,
41342     T64,
41343     T65,
41344     T66,
41345     T67,
41346     T68,
41347     T69,
41348     T70,
41349     T71,
41350     T72,
41351     T73,
41352     T74,
41353     T75,
41354     T76,
41355     T77,
41356     T78,
41357     T79,
41358     NullType,
41359     NullType,
41360     NullType,
41361     NullType,
41362     NullType,
41363     NullType,
41364     NullType,
41365     NullType,
41366     NullType,
41367     NullType,
41368     NullType,
41369     NullType,
41370     NullType,
41371     NullType,
41372     NullType,
41373     NullType,
41374     NullType,
41375     NullType,
41376     NullType,
41377     NullType,
41378     NullType,
41379     NullType,
41380     NullType,
41381     NullType,
41382     NullType,
41383     NullType,
41384     NullType,
41385     NullType,
41386     NullType,
41387     NullType,
41388     NullType,
41389     NullType,
41390     NullType,
41391     NullType,
41392     NullType,
41393     NullType,
41394     NullType,
41395     NullType,
41396     NullType,
41397     NullType,
41398     NullType,
41399     NullType,
41400     NullType,
41401     NullType,
41402     NullType,
41403     NullType,
41404     NullType,
41405     NullType>
41406 {
41407     typedef detail::KernelFunctorGlobal<
41408         T0,
41409         T1,
41410         T2,
41411         T3,
41412         T4,
41413         T5,
41414         T6,
41415         T7,
41416         T8,
41417         T9,
41418         T10,
41419         T11,
41420         T12,
41421         T13,
41422         T14,
41423         T15,
41424         T16,
41425         T17,
41426         T18,
41427         T19,
41428         T20,
41429         T21,
41430         T22,
41431         T23,
41432         T24,
41433         T25,
41434         T26,
41435         T27,
41436         T28,
41437         T29,
41438         T30,
41439         T31,
41440         T32,
41441         T33,
41442         T34,
41443         T35,
41444         T36,
41445         T37,
41446         T38,
41447         T39,
41448         T40,
41449         T41,
41450         T42,
41451         T43,
41452         T44,
41453         T45,
41454         T46,
41455         T47,
41456         T48,
41457         T49,
41458         T50,
41459         T51,
41460         T52,
41461         T53,
41462         T54,
41463         T55,
41464         T56,
41465         T57,
41466         T58,
41467         T59,
41468         T60,
41469         T61,
41470         T62,
41471         T63,
41472         T64,
41473         T65,
41474         T66,
41475         T67,
41476         T68,
41477         T69,
41478         T70,
41479         T71,
41480         T72,
41481         T73,
41482         T74,
41483         T75,
41484         T76,
41485         T77,
41486         T78,
41487         T79,
41488         NullType,
41489         NullType,
41490         NullType,
41491         NullType,
41492         NullType,
41493         NullType,
41494         NullType,
41495         NullType,
41496         NullType,
41497         NullType,
41498         NullType,
41499         NullType,
41500         NullType,
41501         NullType,
41502         NullType,
41503         NullType,
41504         NullType,
41505         NullType,
41506         NullType,
41507         NullType,
41508         NullType,
41509         NullType,
41510         NullType,
41511         NullType,
41512         NullType,
41513         NullType,
41514         NullType,
41515         NullType,
41516         NullType,
41517         NullType,
41518         NullType,
41519         NullType,
41520         NullType,
41521         NullType,
41522         NullType,
41523         NullType,
41524         NullType,
41525         NullType,
41526         NullType,
41527         NullType,
41528         NullType,
41529         NullType,
41530         NullType,
41531         NullType,
41532         NullType,
41533         NullType,
41534         NullType,
41535         NullType> FunctorType;
41536 
41537     FunctorType functor_;
41538 
41539     functionImplementation_(const FunctorType &functor) :
41540         functor_(functor)
41541     {
41542     }
41543         
41544     typedef std::tr1::function<Event (
41545         const EnqueueArgs&,
41546         T0,
41547         T1,
41548         T2,
41549         T3,
41550         T4,
41551         T5,
41552         T6,
41553         T7,
41554         T8,
41555         T9,
41556         T10,
41557         T11,
41558         T12,
41559         T13,
41560         T14,
41561         T15,
41562         T16,
41563         T17,
41564         T18,
41565         T19,
41566         T20,
41567         T21,
41568         T22,
41569         T23,
41570         T24,
41571         T25,
41572         T26,
41573         T27,
41574         T28,
41575         T29,
41576         T30,
41577         T31,
41578         T32,
41579         T33,
41580         T34,
41581         T35,
41582         T36,
41583         T37,
41584         T38,
41585         T39,
41586         T40,
41587         T41,
41588         T42,
41589         T43,
41590         T44,
41591         T45,
41592         T46,
41593         T47,
41594         T48,
41595         T49,
41596         T50,
41597         T51,
41598         T52,
41599         T53,
41600         T54,
41601         T55,
41602         T56,
41603         T57,
41604         T58,
41605         T59,
41606         T60,
41607         T61,
41608         T62,
41609         T63,
41610         T64,
41611         T65,
41612         T66,
41613         T67,
41614         T68,
41615         T69,
41616         T70,
41617         T71,
41618         T72,
41619         T73,
41620         T74,
41621         T75,
41622         T76,
41623         T77,
41624         T78,
41625         T79)> type_;
41626 
41627     Event operator()(const EnqueueArgs& enqueueArgs,
41628         T0 arg0,
41629         T1 arg1,
41630         T2 arg2,
41631         T3 arg3,
41632         T4 arg4,
41633         T5 arg5,
41634         T6 arg6,
41635         T7 arg7,
41636         T8 arg8,
41637         T9 arg9,
41638         T10 arg10,
41639         T11 arg11,
41640         T12 arg12,
41641         T13 arg13,
41642         T14 arg14,
41643         T15 arg15,
41644         T16 arg16,
41645         T17 arg17,
41646         T18 arg18,
41647         T19 arg19,
41648         T20 arg20,
41649         T21 arg21,
41650         T22 arg22,
41651         T23 arg23,
41652         T24 arg24,
41653         T25 arg25,
41654         T26 arg26,
41655         T27 arg27,
41656         T28 arg28,
41657         T29 arg29,
41658         T30 arg30,
41659         T31 arg31,
41660         T32 arg32,
41661         T33 arg33,
41662         T34 arg34,
41663         T35 arg35,
41664         T36 arg36,
41665         T37 arg37,
41666         T38 arg38,
41667         T39 arg39,
41668         T40 arg40,
41669         T41 arg41,
41670         T42 arg42,
41671         T43 arg43,
41672         T44 arg44,
41673         T45 arg45,
41674         T46 arg46,
41675         T47 arg47,
41676         T48 arg48,
41677         T49 arg49,
41678         T50 arg50,
41679         T51 arg51,
41680         T52 arg52,
41681         T53 arg53,
41682         T54 arg54,
41683         T55 arg55,
41684         T56 arg56,
41685         T57 arg57,
41686         T58 arg58,
41687         T59 arg59,
41688         T60 arg60,
41689         T61 arg61,
41690         T62 arg62,
41691         T63 arg63,
41692         T64 arg64,
41693         T65 arg65,
41694         T66 arg66,
41695         T67 arg67,
41696         T68 arg68,
41697         T69 arg69,
41698         T70 arg70,
41699         T71 arg71,
41700         T72 arg72,
41701         T73 arg73,
41702         T74 arg74,
41703         T75 arg75,
41704         T76 arg76,
41705         T77 arg77,
41706         T78 arg78,
41707         T79 arg79)
41708     {
41709         return functor_(
41710             enqueueArgs,
41711             arg0,
41712             arg1,
41713             arg2,
41714             arg3,
41715             arg4,
41716             arg5,
41717             arg6,
41718             arg7,
41719             arg8,
41720             arg9,
41721             arg10,
41722             arg11,
41723             arg12,
41724             arg13,
41725             arg14,
41726             arg15,
41727             arg16,
41728             arg17,
41729             arg18,
41730             arg19,
41731             arg20,
41732             arg21,
41733             arg22,
41734             arg23,
41735             arg24,
41736             arg25,
41737             arg26,
41738             arg27,
41739             arg28,
41740             arg29,
41741             arg30,
41742             arg31,
41743             arg32,
41744             arg33,
41745             arg34,
41746             arg35,
41747             arg36,
41748             arg37,
41749             arg38,
41750             arg39,
41751             arg40,
41752             arg41,
41753             arg42,
41754             arg43,
41755             arg44,
41756             arg45,
41757             arg46,
41758             arg47,
41759             arg48,
41760             arg49,
41761             arg50,
41762             arg51,
41763             arg52,
41764             arg53,
41765             arg54,
41766             arg55,
41767             arg56,
41768             arg57,
41769             arg58,
41770             arg59,
41771             arg60,
41772             arg61,
41773             arg62,
41774             arg63,
41775             arg64,
41776             arg65,
41777             arg66,
41778             arg67,
41779             arg68,
41780             arg69,
41781             arg70,
41782             arg71,
41783             arg72,
41784             arg73,
41785             arg74,
41786             arg75,
41787             arg76,
41788             arg77,
41789             arg78,
41790             arg79);
41791     }
41792 
41793     operator type_ ()    
41794     {
41795         return type_(*this);
41796     }
41797 
41798 };
41799 
41800 template<
41801     typename T0,
41802     typename T1,
41803     typename T2,
41804     typename T3,
41805     typename T4,
41806     typename T5,
41807     typename T6,
41808     typename T7,
41809     typename T8,
41810     typename T9,
41811     typename T10,
41812     typename T11,
41813     typename T12,
41814     typename T13,
41815     typename T14,
41816     typename T15,
41817     typename T16,
41818     typename T17,
41819     typename T18,
41820     typename T19,
41821     typename T20,
41822     typename T21,
41823     typename T22,
41824     typename T23,
41825     typename T24,
41826     typename T25,
41827     typename T26,
41828     typename T27,
41829     typename T28,
41830     typename T29,
41831     typename T30,
41832     typename T31,
41833     typename T32,
41834     typename T33,
41835     typename T34,
41836     typename T35,
41837     typename T36,
41838     typename T37,
41839     typename T38,
41840     typename T39,
41841     typename T40,
41842     typename T41,
41843     typename T42,
41844     typename T43,
41845     typename T44,
41846     typename T45,
41847     typename T46,
41848     typename T47,
41849     typename T48,
41850     typename T49,
41851     typename T50,
41852     typename T51,
41853     typename T52,
41854     typename T53,
41855     typename T54,
41856     typename T55,
41857     typename T56,
41858     typename T57,
41859     typename T58,
41860     typename T59,
41861     typename T60,
41862     typename T61,
41863     typename T62,
41864     typename T63,
41865     typename T64,
41866     typename T65,
41867     typename T66,
41868     typename T67,
41869     typename T68,
41870     typename T69,
41871     typename T70,
41872     typename T71,
41873     typename T72,
41874     typename T73,
41875     typename T74,
41876     typename T75,
41877     typename T76,
41878     typename T77,
41879     typename T78,
41880     typename T79,
41881     typename T80>
41882 struct functionImplementation_<
41883     T0,
41884     T1,
41885     T2,
41886     T3,
41887     T4,
41888     T5,
41889     T6,
41890     T7,
41891     T8,
41892     T9,
41893     T10,
41894     T11,
41895     T12,
41896     T13,
41897     T14,
41898     T15,
41899     T16,
41900     T17,
41901     T18,
41902     T19,
41903     T20,
41904     T21,
41905     T22,
41906     T23,
41907     T24,
41908     T25,
41909     T26,
41910     T27,
41911     T28,
41912     T29,
41913     T30,
41914     T31,
41915     T32,
41916     T33,
41917     T34,
41918     T35,
41919     T36,
41920     T37,
41921     T38,
41922     T39,
41923     T40,
41924     T41,
41925     T42,
41926     T43,
41927     T44,
41928     T45,
41929     T46,
41930     T47,
41931     T48,
41932     T49,
41933     T50,
41934     T51,
41935     T52,
41936     T53,
41937     T54,
41938     T55,
41939     T56,
41940     T57,
41941     T58,
41942     T59,
41943     T60,
41944     T61,
41945     T62,
41946     T63,
41947     T64,
41948     T65,
41949     T66,
41950     T67,
41951     T68,
41952     T69,
41953     T70,
41954     T71,
41955     T72,
41956     T73,
41957     T74,
41958     T75,
41959     T76,
41960     T77,
41961     T78,
41962     T79,
41963     T80,
41964     NullType,
41965     NullType,
41966     NullType,
41967     NullType,
41968     NullType,
41969     NullType,
41970     NullType,
41971     NullType,
41972     NullType,
41973     NullType,
41974     NullType,
41975     NullType,
41976     NullType,
41977     NullType,
41978     NullType,
41979     NullType,
41980     NullType,
41981     NullType,
41982     NullType,
41983     NullType,
41984     NullType,
41985     NullType,
41986     NullType,
41987     NullType,
41988     NullType,
41989     NullType,
41990     NullType,
41991     NullType,
41992     NullType,
41993     NullType,
41994     NullType,
41995     NullType,
41996     NullType,
41997     NullType,
41998     NullType,
41999     NullType,
42000     NullType,
42001     NullType,
42002     NullType,
42003     NullType,
42004     NullType,
42005     NullType,
42006     NullType,
42007     NullType,
42008     NullType,
42009     NullType,
42010     NullType>
42011 {
42012     typedef detail::KernelFunctorGlobal<
42013         T0,
42014         T1,
42015         T2,
42016         T3,
42017         T4,
42018         T5,
42019         T6,
42020         T7,
42021         T8,
42022         T9,
42023         T10,
42024         T11,
42025         T12,
42026         T13,
42027         T14,
42028         T15,
42029         T16,
42030         T17,
42031         T18,
42032         T19,
42033         T20,
42034         T21,
42035         T22,
42036         T23,
42037         T24,
42038         T25,
42039         T26,
42040         T27,
42041         T28,
42042         T29,
42043         T30,
42044         T31,
42045         T32,
42046         T33,
42047         T34,
42048         T35,
42049         T36,
42050         T37,
42051         T38,
42052         T39,
42053         T40,
42054         T41,
42055         T42,
42056         T43,
42057         T44,
42058         T45,
42059         T46,
42060         T47,
42061         T48,
42062         T49,
42063         T50,
42064         T51,
42065         T52,
42066         T53,
42067         T54,
42068         T55,
42069         T56,
42070         T57,
42071         T58,
42072         T59,
42073         T60,
42074         T61,
42075         T62,
42076         T63,
42077         T64,
42078         T65,
42079         T66,
42080         T67,
42081         T68,
42082         T69,
42083         T70,
42084         T71,
42085         T72,
42086         T73,
42087         T74,
42088         T75,
42089         T76,
42090         T77,
42091         T78,
42092         T79,
42093         T80,
42094         NullType,
42095         NullType,
42096         NullType,
42097         NullType,
42098         NullType,
42099         NullType,
42100         NullType,
42101         NullType,
42102         NullType,
42103         NullType,
42104         NullType,
42105         NullType,
42106         NullType,
42107         NullType,
42108         NullType,
42109         NullType,
42110         NullType,
42111         NullType,
42112         NullType,
42113         NullType,
42114         NullType,
42115         NullType,
42116         NullType,
42117         NullType,
42118         NullType,
42119         NullType,
42120         NullType,
42121         NullType,
42122         NullType,
42123         NullType,
42124         NullType,
42125         NullType,
42126         NullType,
42127         NullType,
42128         NullType,
42129         NullType,
42130         NullType,
42131         NullType,
42132         NullType,
42133         NullType,
42134         NullType,
42135         NullType,
42136         NullType,
42137         NullType,
42138         NullType,
42139         NullType,
42140         NullType> FunctorType;
42141 
42142     FunctorType functor_;
42143 
42144     functionImplementation_(const FunctorType &functor) :
42145         functor_(functor)
42146     {
42147     }
42148         
42149     typedef std::tr1::function<Event (
42150         const EnqueueArgs&,
42151         T0,
42152         T1,
42153         T2,
42154         T3,
42155         T4,
42156         T5,
42157         T6,
42158         T7,
42159         T8,
42160         T9,
42161         T10,
42162         T11,
42163         T12,
42164         T13,
42165         T14,
42166         T15,
42167         T16,
42168         T17,
42169         T18,
42170         T19,
42171         T20,
42172         T21,
42173         T22,
42174         T23,
42175         T24,
42176         T25,
42177         T26,
42178         T27,
42179         T28,
42180         T29,
42181         T30,
42182         T31,
42183         T32,
42184         T33,
42185         T34,
42186         T35,
42187         T36,
42188         T37,
42189         T38,
42190         T39,
42191         T40,
42192         T41,
42193         T42,
42194         T43,
42195         T44,
42196         T45,
42197         T46,
42198         T47,
42199         T48,
42200         T49,
42201         T50,
42202         T51,
42203         T52,
42204         T53,
42205         T54,
42206         T55,
42207         T56,
42208         T57,
42209         T58,
42210         T59,
42211         T60,
42212         T61,
42213         T62,
42214         T63,
42215         T64,
42216         T65,
42217         T66,
42218         T67,
42219         T68,
42220         T69,
42221         T70,
42222         T71,
42223         T72,
42224         T73,
42225         T74,
42226         T75,
42227         T76,
42228         T77,
42229         T78,
42230         T79,
42231         T80)> type_;
42232 
42233     Event operator()(const EnqueueArgs& enqueueArgs,
42234         T0 arg0,
42235         T1 arg1,
42236         T2 arg2,
42237         T3 arg3,
42238         T4 arg4,
42239         T5 arg5,
42240         T6 arg6,
42241         T7 arg7,
42242         T8 arg8,
42243         T9 arg9,
42244         T10 arg10,
42245         T11 arg11,
42246         T12 arg12,
42247         T13 arg13,
42248         T14 arg14,
42249         T15 arg15,
42250         T16 arg16,
42251         T17 arg17,
42252         T18 arg18,
42253         T19 arg19,
42254         T20 arg20,
42255         T21 arg21,
42256         T22 arg22,
42257         T23 arg23,
42258         T24 arg24,
42259         T25 arg25,
42260         T26 arg26,
42261         T27 arg27,
42262         T28 arg28,
42263         T29 arg29,
42264         T30 arg30,
42265         T31 arg31,
42266         T32 arg32,
42267         T33 arg33,
42268         T34 arg34,
42269         T35 arg35,
42270         T36 arg36,
42271         T37 arg37,
42272         T38 arg38,
42273         T39 arg39,
42274         T40 arg40,
42275         T41 arg41,
42276         T42 arg42,
42277         T43 arg43,
42278         T44 arg44,
42279         T45 arg45,
42280         T46 arg46,
42281         T47 arg47,
42282         T48 arg48,
42283         T49 arg49,
42284         T50 arg50,
42285         T51 arg51,
42286         T52 arg52,
42287         T53 arg53,
42288         T54 arg54,
42289         T55 arg55,
42290         T56 arg56,
42291         T57 arg57,
42292         T58 arg58,
42293         T59 arg59,
42294         T60 arg60,
42295         T61 arg61,
42296         T62 arg62,
42297         T63 arg63,
42298         T64 arg64,
42299         T65 arg65,
42300         T66 arg66,
42301         T67 arg67,
42302         T68 arg68,
42303         T69 arg69,
42304         T70 arg70,
42305         T71 arg71,
42306         T72 arg72,
42307         T73 arg73,
42308         T74 arg74,
42309         T75 arg75,
42310         T76 arg76,
42311         T77 arg77,
42312         T78 arg78,
42313         T79 arg79,
42314         T80 arg80)
42315     {
42316         return functor_(
42317             enqueueArgs,
42318             arg0,
42319             arg1,
42320             arg2,
42321             arg3,
42322             arg4,
42323             arg5,
42324             arg6,
42325             arg7,
42326             arg8,
42327             arg9,
42328             arg10,
42329             arg11,
42330             arg12,
42331             arg13,
42332             arg14,
42333             arg15,
42334             arg16,
42335             arg17,
42336             arg18,
42337             arg19,
42338             arg20,
42339             arg21,
42340             arg22,
42341             arg23,
42342             arg24,
42343             arg25,
42344             arg26,
42345             arg27,
42346             arg28,
42347             arg29,
42348             arg30,
42349             arg31,
42350             arg32,
42351             arg33,
42352             arg34,
42353             arg35,
42354             arg36,
42355             arg37,
42356             arg38,
42357             arg39,
42358             arg40,
42359             arg41,
42360             arg42,
42361             arg43,
42362             arg44,
42363             arg45,
42364             arg46,
42365             arg47,
42366             arg48,
42367             arg49,
42368             arg50,
42369             arg51,
42370             arg52,
42371             arg53,
42372             arg54,
42373             arg55,
42374             arg56,
42375             arg57,
42376             arg58,
42377             arg59,
42378             arg60,
42379             arg61,
42380             arg62,
42381             arg63,
42382             arg64,
42383             arg65,
42384             arg66,
42385             arg67,
42386             arg68,
42387             arg69,
42388             arg70,
42389             arg71,
42390             arg72,
42391             arg73,
42392             arg74,
42393             arg75,
42394             arg76,
42395             arg77,
42396             arg78,
42397             arg79,
42398             arg80);
42399     }
42400 
42401     operator type_ ()    
42402     {
42403         return type_(*this);
42404     }
42405 
42406 };
42407 
42408 template<
42409     typename T0,
42410     typename T1,
42411     typename T2,
42412     typename T3,
42413     typename T4,
42414     typename T5,
42415     typename T6,
42416     typename T7,
42417     typename T8,
42418     typename T9,
42419     typename T10,
42420     typename T11,
42421     typename T12,
42422     typename T13,
42423     typename T14,
42424     typename T15,
42425     typename T16,
42426     typename T17,
42427     typename T18,
42428     typename T19,
42429     typename T20,
42430     typename T21,
42431     typename T22,
42432     typename T23,
42433     typename T24,
42434     typename T25,
42435     typename T26,
42436     typename T27,
42437     typename T28,
42438     typename T29,
42439     typename T30,
42440     typename T31,
42441     typename T32,
42442     typename T33,
42443     typename T34,
42444     typename T35,
42445     typename T36,
42446     typename T37,
42447     typename T38,
42448     typename T39,
42449     typename T40,
42450     typename T41,
42451     typename T42,
42452     typename T43,
42453     typename T44,
42454     typename T45,
42455     typename T46,
42456     typename T47,
42457     typename T48,
42458     typename T49,
42459     typename T50,
42460     typename T51,
42461     typename T52,
42462     typename T53,
42463     typename T54,
42464     typename T55,
42465     typename T56,
42466     typename T57,
42467     typename T58,
42468     typename T59,
42469     typename T60,
42470     typename T61,
42471     typename T62,
42472     typename T63,
42473     typename T64,
42474     typename T65,
42475     typename T66,
42476     typename T67,
42477     typename T68,
42478     typename T69,
42479     typename T70,
42480     typename T71,
42481     typename T72,
42482     typename T73,
42483     typename T74,
42484     typename T75,
42485     typename T76,
42486     typename T77,
42487     typename T78,
42488     typename T79,
42489     typename T80,
42490     typename T81>
42491 struct functionImplementation_<
42492     T0,
42493     T1,
42494     T2,
42495     T3,
42496     T4,
42497     T5,
42498     T6,
42499     T7,
42500     T8,
42501     T9,
42502     T10,
42503     T11,
42504     T12,
42505     T13,
42506     T14,
42507     T15,
42508     T16,
42509     T17,
42510     T18,
42511     T19,
42512     T20,
42513     T21,
42514     T22,
42515     T23,
42516     T24,
42517     T25,
42518     T26,
42519     T27,
42520     T28,
42521     T29,
42522     T30,
42523     T31,
42524     T32,
42525     T33,
42526     T34,
42527     T35,
42528     T36,
42529     T37,
42530     T38,
42531     T39,
42532     T40,
42533     T41,
42534     T42,
42535     T43,
42536     T44,
42537     T45,
42538     T46,
42539     T47,
42540     T48,
42541     T49,
42542     T50,
42543     T51,
42544     T52,
42545     T53,
42546     T54,
42547     T55,
42548     T56,
42549     T57,
42550     T58,
42551     T59,
42552     T60,
42553     T61,
42554     T62,
42555     T63,
42556     T64,
42557     T65,
42558     T66,
42559     T67,
42560     T68,
42561     T69,
42562     T70,
42563     T71,
42564     T72,
42565     T73,
42566     T74,
42567     T75,
42568     T76,
42569     T77,
42570     T78,
42571     T79,
42572     T80,
42573     T81,
42574     NullType,
42575     NullType,
42576     NullType,
42577     NullType,
42578     NullType,
42579     NullType,
42580     NullType,
42581     NullType,
42582     NullType,
42583     NullType,
42584     NullType,
42585     NullType,
42586     NullType,
42587     NullType,
42588     NullType,
42589     NullType,
42590     NullType,
42591     NullType,
42592     NullType,
42593     NullType,
42594     NullType,
42595     NullType,
42596     NullType,
42597     NullType,
42598     NullType,
42599     NullType,
42600     NullType,
42601     NullType,
42602     NullType,
42603     NullType,
42604     NullType,
42605     NullType,
42606     NullType,
42607     NullType,
42608     NullType,
42609     NullType,
42610     NullType,
42611     NullType,
42612     NullType,
42613     NullType,
42614     NullType,
42615     NullType,
42616     NullType,
42617     NullType,
42618     NullType,
42619     NullType>
42620 {
42621     typedef detail::KernelFunctorGlobal<
42622         T0,
42623         T1,
42624         T2,
42625         T3,
42626         T4,
42627         T5,
42628         T6,
42629         T7,
42630         T8,
42631         T9,
42632         T10,
42633         T11,
42634         T12,
42635         T13,
42636         T14,
42637         T15,
42638         T16,
42639         T17,
42640         T18,
42641         T19,
42642         T20,
42643         T21,
42644         T22,
42645         T23,
42646         T24,
42647         T25,
42648         T26,
42649         T27,
42650         T28,
42651         T29,
42652         T30,
42653         T31,
42654         T32,
42655         T33,
42656         T34,
42657         T35,
42658         T36,
42659         T37,
42660         T38,
42661         T39,
42662         T40,
42663         T41,
42664         T42,
42665         T43,
42666         T44,
42667         T45,
42668         T46,
42669         T47,
42670         T48,
42671         T49,
42672         T50,
42673         T51,
42674         T52,
42675         T53,
42676         T54,
42677         T55,
42678         T56,
42679         T57,
42680         T58,
42681         T59,
42682         T60,
42683         T61,
42684         T62,
42685         T63,
42686         T64,
42687         T65,
42688         T66,
42689         T67,
42690         T68,
42691         T69,
42692         T70,
42693         T71,
42694         T72,
42695         T73,
42696         T74,
42697         T75,
42698         T76,
42699         T77,
42700         T78,
42701         T79,
42702         T80,
42703         T81,
42704         NullType,
42705         NullType,
42706         NullType,
42707         NullType,
42708         NullType,
42709         NullType,
42710         NullType,
42711         NullType,
42712         NullType,
42713         NullType,
42714         NullType,
42715         NullType,
42716         NullType,
42717         NullType,
42718         NullType,
42719         NullType,
42720         NullType,
42721         NullType,
42722         NullType,
42723         NullType,
42724         NullType,
42725         NullType,
42726         NullType,
42727         NullType,
42728         NullType,
42729         NullType,
42730         NullType,
42731         NullType,
42732         NullType,
42733         NullType,
42734         NullType,
42735         NullType,
42736         NullType,
42737         NullType,
42738         NullType,
42739         NullType,
42740         NullType,
42741         NullType,
42742         NullType,
42743         NullType,
42744         NullType,
42745         NullType,
42746         NullType,
42747         NullType,
42748         NullType,
42749         NullType> FunctorType;
42750 
42751     FunctorType functor_;
42752 
42753     functionImplementation_(const FunctorType &functor) :
42754         functor_(functor)
42755     {
42756     }
42757         
42758     typedef std::tr1::function<Event (
42759         const EnqueueArgs&,
42760         T0,
42761         T1,
42762         T2,
42763         T3,
42764         T4,
42765         T5,
42766         T6,
42767         T7,
42768         T8,
42769         T9,
42770         T10,
42771         T11,
42772         T12,
42773         T13,
42774         T14,
42775         T15,
42776         T16,
42777         T17,
42778         T18,
42779         T19,
42780         T20,
42781         T21,
42782         T22,
42783         T23,
42784         T24,
42785         T25,
42786         T26,
42787         T27,
42788         T28,
42789         T29,
42790         T30,
42791         T31,
42792         T32,
42793         T33,
42794         T34,
42795         T35,
42796         T36,
42797         T37,
42798         T38,
42799         T39,
42800         T40,
42801         T41,
42802         T42,
42803         T43,
42804         T44,
42805         T45,
42806         T46,
42807         T47,
42808         T48,
42809         T49,
42810         T50,
42811         T51,
42812         T52,
42813         T53,
42814         T54,
42815         T55,
42816         T56,
42817         T57,
42818         T58,
42819         T59,
42820         T60,
42821         T61,
42822         T62,
42823         T63,
42824         T64,
42825         T65,
42826         T66,
42827         T67,
42828         T68,
42829         T69,
42830         T70,
42831         T71,
42832         T72,
42833         T73,
42834         T74,
42835         T75,
42836         T76,
42837         T77,
42838         T78,
42839         T79,
42840         T80,
42841         T81)> type_;
42842 
42843     Event operator()(const EnqueueArgs& enqueueArgs,
42844         T0 arg0,
42845         T1 arg1,
42846         T2 arg2,
42847         T3 arg3,
42848         T4 arg4,
42849         T5 arg5,
42850         T6 arg6,
42851         T7 arg7,
42852         T8 arg8,
42853         T9 arg9,
42854         T10 arg10,
42855         T11 arg11,
42856         T12 arg12,
42857         T13 arg13,
42858         T14 arg14,
42859         T15 arg15,
42860         T16 arg16,
42861         T17 arg17,
42862         T18 arg18,
42863         T19 arg19,
42864         T20 arg20,
42865         T21 arg21,
42866         T22 arg22,
42867         T23 arg23,
42868         T24 arg24,
42869         T25 arg25,
42870         T26 arg26,
42871         T27 arg27,
42872         T28 arg28,
42873         T29 arg29,
42874         T30 arg30,
42875         T31 arg31,
42876         T32 arg32,
42877         T33 arg33,
42878         T34 arg34,
42879         T35 arg35,
42880         T36 arg36,
42881         T37 arg37,
42882         T38 arg38,
42883         T39 arg39,
42884         T40 arg40,
42885         T41 arg41,
42886         T42 arg42,
42887         T43 arg43,
42888         T44 arg44,
42889         T45 arg45,
42890         T46 arg46,
42891         T47 arg47,
42892         T48 arg48,
42893         T49 arg49,
42894         T50 arg50,
42895         T51 arg51,
42896         T52 arg52,
42897         T53 arg53,
42898         T54 arg54,
42899         T55 arg55,
42900         T56 arg56,
42901         T57 arg57,
42902         T58 arg58,
42903         T59 arg59,
42904         T60 arg60,
42905         T61 arg61,
42906         T62 arg62,
42907         T63 arg63,
42908         T64 arg64,
42909         T65 arg65,
42910         T66 arg66,
42911         T67 arg67,
42912         T68 arg68,
42913         T69 arg69,
42914         T70 arg70,
42915         T71 arg71,
42916         T72 arg72,
42917         T73 arg73,
42918         T74 arg74,
42919         T75 arg75,
42920         T76 arg76,
42921         T77 arg77,
42922         T78 arg78,
42923         T79 arg79,
42924         T80 arg80,
42925         T81 arg81)
42926     {
42927         return functor_(
42928             enqueueArgs,
42929             arg0,
42930             arg1,
42931             arg2,
42932             arg3,
42933             arg4,
42934             arg5,
42935             arg6,
42936             arg7,
42937             arg8,
42938             arg9,
42939             arg10,
42940             arg11,
42941             arg12,
42942             arg13,
42943             arg14,
42944             arg15,
42945             arg16,
42946             arg17,
42947             arg18,
42948             arg19,
42949             arg20,
42950             arg21,
42951             arg22,
42952             arg23,
42953             arg24,
42954             arg25,
42955             arg26,
42956             arg27,
42957             arg28,
42958             arg29,
42959             arg30,
42960             arg31,
42961             arg32,
42962             arg33,
42963             arg34,
42964             arg35,
42965             arg36,
42966             arg37,
42967             arg38,
42968             arg39,
42969             arg40,
42970             arg41,
42971             arg42,
42972             arg43,
42973             arg44,
42974             arg45,
42975             arg46,
42976             arg47,
42977             arg48,
42978             arg49,
42979             arg50,
42980             arg51,
42981             arg52,
42982             arg53,
42983             arg54,
42984             arg55,
42985             arg56,
42986             arg57,
42987             arg58,
42988             arg59,
42989             arg60,
42990             arg61,
42991             arg62,
42992             arg63,
42993             arg64,
42994             arg65,
42995             arg66,
42996             arg67,
42997             arg68,
42998             arg69,
42999             arg70,
43000             arg71,
43001             arg72,
43002             arg73,
43003             arg74,
43004             arg75,
43005             arg76,
43006             arg77,
43007             arg78,
43008             arg79,
43009             arg80,
43010             arg81);
43011     }
43012 
43013     operator type_ ()    
43014     {
43015         return type_(*this);
43016     }
43017 
43018 };
43019 
43020 template<
43021     typename T0,
43022     typename T1,
43023     typename T2,
43024     typename T3,
43025     typename T4,
43026     typename T5,
43027     typename T6,
43028     typename T7,
43029     typename T8,
43030     typename T9,
43031     typename T10,
43032     typename T11,
43033     typename T12,
43034     typename T13,
43035     typename T14,
43036     typename T15,
43037     typename T16,
43038     typename T17,
43039     typename T18,
43040     typename T19,
43041     typename T20,
43042     typename T21,
43043     typename T22,
43044     typename T23,
43045     typename T24,
43046     typename T25,
43047     typename T26,
43048     typename T27,
43049     typename T28,
43050     typename T29,
43051     typename T30,
43052     typename T31,
43053     typename T32,
43054     typename T33,
43055     typename T34,
43056     typename T35,
43057     typename T36,
43058     typename T37,
43059     typename T38,
43060     typename T39,
43061     typename T40,
43062     typename T41,
43063     typename T42,
43064     typename T43,
43065     typename T44,
43066     typename T45,
43067     typename T46,
43068     typename T47,
43069     typename T48,
43070     typename T49,
43071     typename T50,
43072     typename T51,
43073     typename T52,
43074     typename T53,
43075     typename T54,
43076     typename T55,
43077     typename T56,
43078     typename T57,
43079     typename T58,
43080     typename T59,
43081     typename T60,
43082     typename T61,
43083     typename T62,
43084     typename T63,
43085     typename T64,
43086     typename T65,
43087     typename T66,
43088     typename T67,
43089     typename T68,
43090     typename T69,
43091     typename T70,
43092     typename T71,
43093     typename T72,
43094     typename T73,
43095     typename T74,
43096     typename T75,
43097     typename T76,
43098     typename T77,
43099     typename T78,
43100     typename T79,
43101     typename T80,
43102     typename T81,
43103     typename T82>
43104 struct functionImplementation_<
43105     T0,
43106     T1,
43107     T2,
43108     T3,
43109     T4,
43110     T5,
43111     T6,
43112     T7,
43113     T8,
43114     T9,
43115     T10,
43116     T11,
43117     T12,
43118     T13,
43119     T14,
43120     T15,
43121     T16,
43122     T17,
43123     T18,
43124     T19,
43125     T20,
43126     T21,
43127     T22,
43128     T23,
43129     T24,
43130     T25,
43131     T26,
43132     T27,
43133     T28,
43134     T29,
43135     T30,
43136     T31,
43137     T32,
43138     T33,
43139     T34,
43140     T35,
43141     T36,
43142     T37,
43143     T38,
43144     T39,
43145     T40,
43146     T41,
43147     T42,
43148     T43,
43149     T44,
43150     T45,
43151     T46,
43152     T47,
43153     T48,
43154     T49,
43155     T50,
43156     T51,
43157     T52,
43158     T53,
43159     T54,
43160     T55,
43161     T56,
43162     T57,
43163     T58,
43164     T59,
43165     T60,
43166     T61,
43167     T62,
43168     T63,
43169     T64,
43170     T65,
43171     T66,
43172     T67,
43173     T68,
43174     T69,
43175     T70,
43176     T71,
43177     T72,
43178     T73,
43179     T74,
43180     T75,
43181     T76,
43182     T77,
43183     T78,
43184     T79,
43185     T80,
43186     T81,
43187     T82,
43188     NullType,
43189     NullType,
43190     NullType,
43191     NullType,
43192     NullType,
43193     NullType,
43194     NullType,
43195     NullType,
43196     NullType,
43197     NullType,
43198     NullType,
43199     NullType,
43200     NullType,
43201     NullType,
43202     NullType,
43203     NullType,
43204     NullType,
43205     NullType,
43206     NullType,
43207     NullType,
43208     NullType,
43209     NullType,
43210     NullType,
43211     NullType,
43212     NullType,
43213     NullType,
43214     NullType,
43215     NullType,
43216     NullType,
43217     NullType,
43218     NullType,
43219     NullType,
43220     NullType,
43221     NullType,
43222     NullType,
43223     NullType,
43224     NullType,
43225     NullType,
43226     NullType,
43227     NullType,
43228     NullType,
43229     NullType,
43230     NullType,
43231     NullType,
43232     NullType>
43233 {
43234     typedef detail::KernelFunctorGlobal<
43235         T0,
43236         T1,
43237         T2,
43238         T3,
43239         T4,
43240         T5,
43241         T6,
43242         T7,
43243         T8,
43244         T9,
43245         T10,
43246         T11,
43247         T12,
43248         T13,
43249         T14,
43250         T15,
43251         T16,
43252         T17,
43253         T18,
43254         T19,
43255         T20,
43256         T21,
43257         T22,
43258         T23,
43259         T24,
43260         T25,
43261         T26,
43262         T27,
43263         T28,
43264         T29,
43265         T30,
43266         T31,
43267         T32,
43268         T33,
43269         T34,
43270         T35,
43271         T36,
43272         T37,
43273         T38,
43274         T39,
43275         T40,
43276         T41,
43277         T42,
43278         T43,
43279         T44,
43280         T45,
43281         T46,
43282         T47,
43283         T48,
43284         T49,
43285         T50,
43286         T51,
43287         T52,
43288         T53,
43289         T54,
43290         T55,
43291         T56,
43292         T57,
43293         T58,
43294         T59,
43295         T60,
43296         T61,
43297         T62,
43298         T63,
43299         T64,
43300         T65,
43301         T66,
43302         T67,
43303         T68,
43304         T69,
43305         T70,
43306         T71,
43307         T72,
43308         T73,
43309         T74,
43310         T75,
43311         T76,
43312         T77,
43313         T78,
43314         T79,
43315         T80,
43316         T81,
43317         T82,
43318         NullType,
43319         NullType,
43320         NullType,
43321         NullType,
43322         NullType,
43323         NullType,
43324         NullType,
43325         NullType,
43326         NullType,
43327         NullType,
43328         NullType,
43329         NullType,
43330         NullType,
43331         NullType,
43332         NullType,
43333         NullType,
43334         NullType,
43335         NullType,
43336         NullType,
43337         NullType,
43338         NullType,
43339         NullType,
43340         NullType,
43341         NullType,
43342         NullType,
43343         NullType,
43344         NullType,
43345         NullType,
43346         NullType,
43347         NullType,
43348         NullType,
43349         NullType,
43350         NullType,
43351         NullType,
43352         NullType,
43353         NullType,
43354         NullType,
43355         NullType,
43356         NullType,
43357         NullType,
43358         NullType,
43359         NullType,
43360         NullType,
43361         NullType,
43362         NullType> FunctorType;
43363 
43364     FunctorType functor_;
43365 
43366     functionImplementation_(const FunctorType &functor) :
43367         functor_(functor)
43368     {
43369     }
43370         
43371     typedef std::tr1::function<Event (
43372         const EnqueueArgs&,
43373         T0,
43374         T1,
43375         T2,
43376         T3,
43377         T4,
43378         T5,
43379         T6,
43380         T7,
43381         T8,
43382         T9,
43383         T10,
43384         T11,
43385         T12,
43386         T13,
43387         T14,
43388         T15,
43389         T16,
43390         T17,
43391         T18,
43392         T19,
43393         T20,
43394         T21,
43395         T22,
43396         T23,
43397         T24,
43398         T25,
43399         T26,
43400         T27,
43401         T28,
43402         T29,
43403         T30,
43404         T31,
43405         T32,
43406         T33,
43407         T34,
43408         T35,
43409         T36,
43410         T37,
43411         T38,
43412         T39,
43413         T40,
43414         T41,
43415         T42,
43416         T43,
43417         T44,
43418         T45,
43419         T46,
43420         T47,
43421         T48,
43422         T49,
43423         T50,
43424         T51,
43425         T52,
43426         T53,
43427         T54,
43428         T55,
43429         T56,
43430         T57,
43431         T58,
43432         T59,
43433         T60,
43434         T61,
43435         T62,
43436         T63,
43437         T64,
43438         T65,
43439         T66,
43440         T67,
43441         T68,
43442         T69,
43443         T70,
43444         T71,
43445         T72,
43446         T73,
43447         T74,
43448         T75,
43449         T76,
43450         T77,
43451         T78,
43452         T79,
43453         T80,
43454         T81,
43455         T82)> type_;
43456 
43457     Event operator()(const EnqueueArgs& enqueueArgs,
43458         T0 arg0,
43459         T1 arg1,
43460         T2 arg2,
43461         T3 arg3,
43462         T4 arg4,
43463         T5 arg5,
43464         T6 arg6,
43465         T7 arg7,
43466         T8 arg8,
43467         T9 arg9,
43468         T10 arg10,
43469         T11 arg11,
43470         T12 arg12,
43471         T13 arg13,
43472         T14 arg14,
43473         T15 arg15,
43474         T16 arg16,
43475         T17 arg17,
43476         T18 arg18,
43477         T19 arg19,
43478         T20 arg20,
43479         T21 arg21,
43480         T22 arg22,
43481         T23 arg23,
43482         T24 arg24,
43483         T25 arg25,
43484         T26 arg26,
43485         T27 arg27,
43486         T28 arg28,
43487         T29 arg29,
43488         T30 arg30,
43489         T31 arg31,
43490         T32 arg32,
43491         T33 arg33,
43492         T34 arg34,
43493         T35 arg35,
43494         T36 arg36,
43495         T37 arg37,
43496         T38 arg38,
43497         T39 arg39,
43498         T40 arg40,
43499         T41 arg41,
43500         T42 arg42,
43501         T43 arg43,
43502         T44 arg44,
43503         T45 arg45,
43504         T46 arg46,
43505         T47 arg47,
43506         T48 arg48,
43507         T49 arg49,
43508         T50 arg50,
43509         T51 arg51,
43510         T52 arg52,
43511         T53 arg53,
43512         T54 arg54,
43513         T55 arg55,
43514         T56 arg56,
43515         T57 arg57,
43516         T58 arg58,
43517         T59 arg59,
43518         T60 arg60,
43519         T61 arg61,
43520         T62 arg62,
43521         T63 arg63,
43522         T64 arg64,
43523         T65 arg65,
43524         T66 arg66,
43525         T67 arg67,
43526         T68 arg68,
43527         T69 arg69,
43528         T70 arg70,
43529         T71 arg71,
43530         T72 arg72,
43531         T73 arg73,
43532         T74 arg74,
43533         T75 arg75,
43534         T76 arg76,
43535         T77 arg77,
43536         T78 arg78,
43537         T79 arg79,
43538         T80 arg80,
43539         T81 arg81,
43540         T82 arg82)
43541     {
43542         return functor_(
43543             enqueueArgs,
43544             arg0,
43545             arg1,
43546             arg2,
43547             arg3,
43548             arg4,
43549             arg5,
43550             arg6,
43551             arg7,
43552             arg8,
43553             arg9,
43554             arg10,
43555             arg11,
43556             arg12,
43557             arg13,
43558             arg14,
43559             arg15,
43560             arg16,
43561             arg17,
43562             arg18,
43563             arg19,
43564             arg20,
43565             arg21,
43566             arg22,
43567             arg23,
43568             arg24,
43569             arg25,
43570             arg26,
43571             arg27,
43572             arg28,
43573             arg29,
43574             arg30,
43575             arg31,
43576             arg32,
43577             arg33,
43578             arg34,
43579             arg35,
43580             arg36,
43581             arg37,
43582             arg38,
43583             arg39,
43584             arg40,
43585             arg41,
43586             arg42,
43587             arg43,
43588             arg44,
43589             arg45,
43590             arg46,
43591             arg47,
43592             arg48,
43593             arg49,
43594             arg50,
43595             arg51,
43596             arg52,
43597             arg53,
43598             arg54,
43599             arg55,
43600             arg56,
43601             arg57,
43602             arg58,
43603             arg59,
43604             arg60,
43605             arg61,
43606             arg62,
43607             arg63,
43608             arg64,
43609             arg65,
43610             arg66,
43611             arg67,
43612             arg68,
43613             arg69,
43614             arg70,
43615             arg71,
43616             arg72,
43617             arg73,
43618             arg74,
43619             arg75,
43620             arg76,
43621             arg77,
43622             arg78,
43623             arg79,
43624             arg80,
43625             arg81,
43626             arg82);
43627     }
43628 
43629     operator type_ ()    
43630     {
43631         return type_(*this);
43632     }
43633 
43634 };
43635 
43636 template<
43637     typename T0,
43638     typename T1,
43639     typename T2,
43640     typename T3,
43641     typename T4,
43642     typename T5,
43643     typename T6,
43644     typename T7,
43645     typename T8,
43646     typename T9,
43647     typename T10,
43648     typename T11,
43649     typename T12,
43650     typename T13,
43651     typename T14,
43652     typename T15,
43653     typename T16,
43654     typename T17,
43655     typename T18,
43656     typename T19,
43657     typename T20,
43658     typename T21,
43659     typename T22,
43660     typename T23,
43661     typename T24,
43662     typename T25,
43663     typename T26,
43664     typename T27,
43665     typename T28,
43666     typename T29,
43667     typename T30,
43668     typename T31,
43669     typename T32,
43670     typename T33,
43671     typename T34,
43672     typename T35,
43673     typename T36,
43674     typename T37,
43675     typename T38,
43676     typename T39,
43677     typename T40,
43678     typename T41,
43679     typename T42,
43680     typename T43,
43681     typename T44,
43682     typename T45,
43683     typename T46,
43684     typename T47,
43685     typename T48,
43686     typename T49,
43687     typename T50,
43688     typename T51,
43689     typename T52,
43690     typename T53,
43691     typename T54,
43692     typename T55,
43693     typename T56,
43694     typename T57,
43695     typename T58,
43696     typename T59,
43697     typename T60,
43698     typename T61,
43699     typename T62,
43700     typename T63,
43701     typename T64,
43702     typename T65,
43703     typename T66,
43704     typename T67,
43705     typename T68,
43706     typename T69,
43707     typename T70,
43708     typename T71,
43709     typename T72,
43710     typename T73,
43711     typename T74,
43712     typename T75,
43713     typename T76,
43714     typename T77,
43715     typename T78,
43716     typename T79,
43717     typename T80,
43718     typename T81,
43719     typename T82,
43720     typename T83>
43721 struct functionImplementation_<
43722     T0,
43723     T1,
43724     T2,
43725     T3,
43726     T4,
43727     T5,
43728     T6,
43729     T7,
43730     T8,
43731     T9,
43732     T10,
43733     T11,
43734     T12,
43735     T13,
43736     T14,
43737     T15,
43738     T16,
43739     T17,
43740     T18,
43741     T19,
43742     T20,
43743     T21,
43744     T22,
43745     T23,
43746     T24,
43747     T25,
43748     T26,
43749     T27,
43750     T28,
43751     T29,
43752     T30,
43753     T31,
43754     T32,
43755     T33,
43756     T34,
43757     T35,
43758     T36,
43759     T37,
43760     T38,
43761     T39,
43762     T40,
43763     T41,
43764     T42,
43765     T43,
43766     T44,
43767     T45,
43768     T46,
43769     T47,
43770     T48,
43771     T49,
43772     T50,
43773     T51,
43774     T52,
43775     T53,
43776     T54,
43777     T55,
43778     T56,
43779     T57,
43780     T58,
43781     T59,
43782     T60,
43783     T61,
43784     T62,
43785     T63,
43786     T64,
43787     T65,
43788     T66,
43789     T67,
43790     T68,
43791     T69,
43792     T70,
43793     T71,
43794     T72,
43795     T73,
43796     T74,
43797     T75,
43798     T76,
43799     T77,
43800     T78,
43801     T79,
43802     T80,
43803     T81,
43804     T82,
43805     T83,
43806     NullType,
43807     NullType,
43808     NullType,
43809     NullType,
43810     NullType,
43811     NullType,
43812     NullType,
43813     NullType,
43814     NullType,
43815     NullType,
43816     NullType,
43817     NullType,
43818     NullType,
43819     NullType,
43820     NullType,
43821     NullType,
43822     NullType,
43823     NullType,
43824     NullType,
43825     NullType,
43826     NullType,
43827     NullType,
43828     NullType,
43829     NullType,
43830     NullType,
43831     NullType,
43832     NullType,
43833     NullType,
43834     NullType,
43835     NullType,
43836     NullType,
43837     NullType,
43838     NullType,
43839     NullType,
43840     NullType,
43841     NullType,
43842     NullType,
43843     NullType,
43844     NullType,
43845     NullType,
43846     NullType,
43847     NullType,
43848     NullType,
43849     NullType>
43850 {
43851     typedef detail::KernelFunctorGlobal<
43852         T0,
43853         T1,
43854         T2,
43855         T3,
43856         T4,
43857         T5,
43858         T6,
43859         T7,
43860         T8,
43861         T9,
43862         T10,
43863         T11,
43864         T12,
43865         T13,
43866         T14,
43867         T15,
43868         T16,
43869         T17,
43870         T18,
43871         T19,
43872         T20,
43873         T21,
43874         T22,
43875         T23,
43876         T24,
43877         T25,
43878         T26,
43879         T27,
43880         T28,
43881         T29,
43882         T30,
43883         T31,
43884         T32,
43885         T33,
43886         T34,
43887         T35,
43888         T36,
43889         T37,
43890         T38,
43891         T39,
43892         T40,
43893         T41,
43894         T42,
43895         T43,
43896         T44,
43897         T45,
43898         T46,
43899         T47,
43900         T48,
43901         T49,
43902         T50,
43903         T51,
43904         T52,
43905         T53,
43906         T54,
43907         T55,
43908         T56,
43909         T57,
43910         T58,
43911         T59,
43912         T60,
43913         T61,
43914         T62,
43915         T63,
43916         T64,
43917         T65,
43918         T66,
43919         T67,
43920         T68,
43921         T69,
43922         T70,
43923         T71,
43924         T72,
43925         T73,
43926         T74,
43927         T75,
43928         T76,
43929         T77,
43930         T78,
43931         T79,
43932         T80,
43933         T81,
43934         T82,
43935         T83,
43936         NullType,
43937         NullType,
43938         NullType,
43939         NullType,
43940         NullType,
43941         NullType,
43942         NullType,
43943         NullType,
43944         NullType,
43945         NullType,
43946         NullType,
43947         NullType,
43948         NullType,
43949         NullType,
43950         NullType,
43951         NullType,
43952         NullType,
43953         NullType,
43954         NullType,
43955         NullType,
43956         NullType,
43957         NullType,
43958         NullType,
43959         NullType,
43960         NullType,
43961         NullType,
43962         NullType,
43963         NullType,
43964         NullType,
43965         NullType,
43966         NullType,
43967         NullType,
43968         NullType,
43969         NullType,
43970         NullType,
43971         NullType,
43972         NullType,
43973         NullType,
43974         NullType,
43975         NullType,
43976         NullType,
43977         NullType,
43978         NullType,
43979         NullType> FunctorType;
43980 
43981     FunctorType functor_;
43982 
43983     functionImplementation_(const FunctorType &functor) :
43984         functor_(functor)
43985     {
43986     }
43987         
43988     typedef std::tr1::function<Event (
43989         const EnqueueArgs&,
43990         T0,
43991         T1,
43992         T2,
43993         T3,
43994         T4,
43995         T5,
43996         T6,
43997         T7,
43998         T8,
43999         T9,
44000         T10,
44001         T11,
44002         T12,
44003         T13,
44004         T14,
44005         T15,
44006         T16,
44007         T17,
44008         T18,
44009         T19,
44010         T20,
44011         T21,
44012         T22,
44013         T23,
44014         T24,
44015         T25,
44016         T26,
44017         T27,
44018         T28,
44019         T29,
44020         T30,
44021         T31,
44022         T32,
44023         T33,
44024         T34,
44025         T35,
44026         T36,
44027         T37,
44028         T38,
44029         T39,
44030         T40,
44031         T41,
44032         T42,
44033         T43,
44034         T44,
44035         T45,
44036         T46,
44037         T47,
44038         T48,
44039         T49,
44040         T50,
44041         T51,
44042         T52,
44043         T53,
44044         T54,
44045         T55,
44046         T56,
44047         T57,
44048         T58,
44049         T59,
44050         T60,
44051         T61,
44052         T62,
44053         T63,
44054         T64,
44055         T65,
44056         T66,
44057         T67,
44058         T68,
44059         T69,
44060         T70,
44061         T71,
44062         T72,
44063         T73,
44064         T74,
44065         T75,
44066         T76,
44067         T77,
44068         T78,
44069         T79,
44070         T80,
44071         T81,
44072         T82,
44073         T83)> type_;
44074 
44075     Event operator()(const EnqueueArgs& enqueueArgs,
44076         T0 arg0,
44077         T1 arg1,
44078         T2 arg2,
44079         T3 arg3,
44080         T4 arg4,
44081         T5 arg5,
44082         T6 arg6,
44083         T7 arg7,
44084         T8 arg8,
44085         T9 arg9,
44086         T10 arg10,
44087         T11 arg11,
44088         T12 arg12,
44089         T13 arg13,
44090         T14 arg14,
44091         T15 arg15,
44092         T16 arg16,
44093         T17 arg17,
44094         T18 arg18,
44095         T19 arg19,
44096         T20 arg20,
44097         T21 arg21,
44098         T22 arg22,
44099         T23 arg23,
44100         T24 arg24,
44101         T25 arg25,
44102         T26 arg26,
44103         T27 arg27,
44104         T28 arg28,
44105         T29 arg29,
44106         T30 arg30,
44107         T31 arg31,
44108         T32 arg32,
44109         T33 arg33,
44110         T34 arg34,
44111         T35 arg35,
44112         T36 arg36,
44113         T37 arg37,
44114         T38 arg38,
44115         T39 arg39,
44116         T40 arg40,
44117         T41 arg41,
44118         T42 arg42,
44119         T43 arg43,
44120         T44 arg44,
44121         T45 arg45,
44122         T46 arg46,
44123         T47 arg47,
44124         T48 arg48,
44125         T49 arg49,
44126         T50 arg50,
44127         T51 arg51,
44128         T52 arg52,
44129         T53 arg53,
44130         T54 arg54,
44131         T55 arg55,
44132         T56 arg56,
44133         T57 arg57,
44134         T58 arg58,
44135         T59 arg59,
44136         T60 arg60,
44137         T61 arg61,
44138         T62 arg62,
44139         T63 arg63,
44140         T64 arg64,
44141         T65 arg65,
44142         T66 arg66,
44143         T67 arg67,
44144         T68 arg68,
44145         T69 arg69,
44146         T70 arg70,
44147         T71 arg71,
44148         T72 arg72,
44149         T73 arg73,
44150         T74 arg74,
44151         T75 arg75,
44152         T76 arg76,
44153         T77 arg77,
44154         T78 arg78,
44155         T79 arg79,
44156         T80 arg80,
44157         T81 arg81,
44158         T82 arg82,
44159         T83 arg83)
44160     {
44161         return functor_(
44162             enqueueArgs,
44163             arg0,
44164             arg1,
44165             arg2,
44166             arg3,
44167             arg4,
44168             arg5,
44169             arg6,
44170             arg7,
44171             arg8,
44172             arg9,
44173             arg10,
44174             arg11,
44175             arg12,
44176             arg13,
44177             arg14,
44178             arg15,
44179             arg16,
44180             arg17,
44181             arg18,
44182             arg19,
44183             arg20,
44184             arg21,
44185             arg22,
44186             arg23,
44187             arg24,
44188             arg25,
44189             arg26,
44190             arg27,
44191             arg28,
44192             arg29,
44193             arg30,
44194             arg31,
44195             arg32,
44196             arg33,
44197             arg34,
44198             arg35,
44199             arg36,
44200             arg37,
44201             arg38,
44202             arg39,
44203             arg40,
44204             arg41,
44205             arg42,
44206             arg43,
44207             arg44,
44208             arg45,
44209             arg46,
44210             arg47,
44211             arg48,
44212             arg49,
44213             arg50,
44214             arg51,
44215             arg52,
44216             arg53,
44217             arg54,
44218             arg55,
44219             arg56,
44220             arg57,
44221             arg58,
44222             arg59,
44223             arg60,
44224             arg61,
44225             arg62,
44226             arg63,
44227             arg64,
44228             arg65,
44229             arg66,
44230             arg67,
44231             arg68,
44232             arg69,
44233             arg70,
44234             arg71,
44235             arg72,
44236             arg73,
44237             arg74,
44238             arg75,
44239             arg76,
44240             arg77,
44241             arg78,
44242             arg79,
44243             arg80,
44244             arg81,
44245             arg82,
44246             arg83);
44247     }
44248 
44249     operator type_ ()    
44250     {
44251         return type_(*this);
44252     }
44253 
44254 };
44255 
44256 template<
44257     typename T0,
44258     typename T1,
44259     typename T2,
44260     typename T3,
44261     typename T4,
44262     typename T5,
44263     typename T6,
44264     typename T7,
44265     typename T8,
44266     typename T9,
44267     typename T10,
44268     typename T11,
44269     typename T12,
44270     typename T13,
44271     typename T14,
44272     typename T15,
44273     typename T16,
44274     typename T17,
44275     typename T18,
44276     typename T19,
44277     typename T20,
44278     typename T21,
44279     typename T22,
44280     typename T23,
44281     typename T24,
44282     typename T25,
44283     typename T26,
44284     typename T27,
44285     typename T28,
44286     typename T29,
44287     typename T30,
44288     typename T31,
44289     typename T32,
44290     typename T33,
44291     typename T34,
44292     typename T35,
44293     typename T36,
44294     typename T37,
44295     typename T38,
44296     typename T39,
44297     typename T40,
44298     typename T41,
44299     typename T42,
44300     typename T43,
44301     typename T44,
44302     typename T45,
44303     typename T46,
44304     typename T47,
44305     typename T48,
44306     typename T49,
44307     typename T50,
44308     typename T51,
44309     typename T52,
44310     typename T53,
44311     typename T54,
44312     typename T55,
44313     typename T56,
44314     typename T57,
44315     typename T58,
44316     typename T59,
44317     typename T60,
44318     typename T61,
44319     typename T62,
44320     typename T63,
44321     typename T64,
44322     typename T65,
44323     typename T66,
44324     typename T67,
44325     typename T68,
44326     typename T69,
44327     typename T70,
44328     typename T71,
44329     typename T72,
44330     typename T73,
44331     typename T74,
44332     typename T75,
44333     typename T76,
44334     typename T77,
44335     typename T78,
44336     typename T79,
44337     typename T80,
44338     typename T81,
44339     typename T82,
44340     typename T83,
44341     typename T84>
44342 struct functionImplementation_<
44343     T0,
44344     T1,
44345     T2,
44346     T3,
44347     T4,
44348     T5,
44349     T6,
44350     T7,
44351     T8,
44352     T9,
44353     T10,
44354     T11,
44355     T12,
44356     T13,
44357     T14,
44358     T15,
44359     T16,
44360     T17,
44361     T18,
44362     T19,
44363     T20,
44364     T21,
44365     T22,
44366     T23,
44367     T24,
44368     T25,
44369     T26,
44370     T27,
44371     T28,
44372     T29,
44373     T30,
44374     T31,
44375     T32,
44376     T33,
44377     T34,
44378     T35,
44379     T36,
44380     T37,
44381     T38,
44382     T39,
44383     T40,
44384     T41,
44385     T42,
44386     T43,
44387     T44,
44388     T45,
44389     T46,
44390     T47,
44391     T48,
44392     T49,
44393     T50,
44394     T51,
44395     T52,
44396     T53,
44397     T54,
44398     T55,
44399     T56,
44400     T57,
44401     T58,
44402     T59,
44403     T60,
44404     T61,
44405     T62,
44406     T63,
44407     T64,
44408     T65,
44409     T66,
44410     T67,
44411     T68,
44412     T69,
44413     T70,
44414     T71,
44415     T72,
44416     T73,
44417     T74,
44418     T75,
44419     T76,
44420     T77,
44421     T78,
44422     T79,
44423     T80,
44424     T81,
44425     T82,
44426     T83,
44427     T84,
44428     NullType,
44429     NullType,
44430     NullType,
44431     NullType,
44432     NullType,
44433     NullType,
44434     NullType,
44435     NullType,
44436     NullType,
44437     NullType,
44438     NullType,
44439     NullType,
44440     NullType,
44441     NullType,
44442     NullType,
44443     NullType,
44444     NullType,
44445     NullType,
44446     NullType,
44447     NullType,
44448     NullType,
44449     NullType,
44450     NullType,
44451     NullType,
44452     NullType,
44453     NullType,
44454     NullType,
44455     NullType,
44456     NullType,
44457     NullType,
44458     NullType,
44459     NullType,
44460     NullType,
44461     NullType,
44462     NullType,
44463     NullType,
44464     NullType,
44465     NullType,
44466     NullType,
44467     NullType,
44468     NullType,
44469     NullType,
44470     NullType>
44471 {
44472     typedef detail::KernelFunctorGlobal<
44473         T0,
44474         T1,
44475         T2,
44476         T3,
44477         T4,
44478         T5,
44479         T6,
44480         T7,
44481         T8,
44482         T9,
44483         T10,
44484         T11,
44485         T12,
44486         T13,
44487         T14,
44488         T15,
44489         T16,
44490         T17,
44491         T18,
44492         T19,
44493         T20,
44494         T21,
44495         T22,
44496         T23,
44497         T24,
44498         T25,
44499         T26,
44500         T27,
44501         T28,
44502         T29,
44503         T30,
44504         T31,
44505         T32,
44506         T33,
44507         T34,
44508         T35,
44509         T36,
44510         T37,
44511         T38,
44512         T39,
44513         T40,
44514         T41,
44515         T42,
44516         T43,
44517         T44,
44518         T45,
44519         T46,
44520         T47,
44521         T48,
44522         T49,
44523         T50,
44524         T51,
44525         T52,
44526         T53,
44527         T54,
44528         T55,
44529         T56,
44530         T57,
44531         T58,
44532         T59,
44533         T60,
44534         T61,
44535         T62,
44536         T63,
44537         T64,
44538         T65,
44539         T66,
44540         T67,
44541         T68,
44542         T69,
44543         T70,
44544         T71,
44545         T72,
44546         T73,
44547         T74,
44548         T75,
44549         T76,
44550         T77,
44551         T78,
44552         T79,
44553         T80,
44554         T81,
44555         T82,
44556         T83,
44557         T84,
44558         NullType,
44559         NullType,
44560         NullType,
44561         NullType,
44562         NullType,
44563         NullType,
44564         NullType,
44565         NullType,
44566         NullType,
44567         NullType,
44568         NullType,
44569         NullType,
44570         NullType,
44571         NullType,
44572         NullType,
44573         NullType,
44574         NullType,
44575         NullType,
44576         NullType,
44577         NullType,
44578         NullType,
44579         NullType,
44580         NullType,
44581         NullType,
44582         NullType,
44583         NullType,
44584         NullType,
44585         NullType,
44586         NullType,
44587         NullType,
44588         NullType,
44589         NullType,
44590         NullType,
44591         NullType,
44592         NullType,
44593         NullType,
44594         NullType,
44595         NullType,
44596         NullType,
44597         NullType,
44598         NullType,
44599         NullType,
44600         NullType> FunctorType;
44601 
44602     FunctorType functor_;
44603 
44604     functionImplementation_(const FunctorType &functor) :
44605         functor_(functor)
44606     {
44607     }
44608         
44609     typedef std::tr1::function<Event (
44610         const EnqueueArgs&,
44611         T0,
44612         T1,
44613         T2,
44614         T3,
44615         T4,
44616         T5,
44617         T6,
44618         T7,
44619         T8,
44620         T9,
44621         T10,
44622         T11,
44623         T12,
44624         T13,
44625         T14,
44626         T15,
44627         T16,
44628         T17,
44629         T18,
44630         T19,
44631         T20,
44632         T21,
44633         T22,
44634         T23,
44635         T24,
44636         T25,
44637         T26,
44638         T27,
44639         T28,
44640         T29,
44641         T30,
44642         T31,
44643         T32,
44644         T33,
44645         T34,
44646         T35,
44647         T36,
44648         T37,
44649         T38,
44650         T39,
44651         T40,
44652         T41,
44653         T42,
44654         T43,
44655         T44,
44656         T45,
44657         T46,
44658         T47,
44659         T48,
44660         T49,
44661         T50,
44662         T51,
44663         T52,
44664         T53,
44665         T54,
44666         T55,
44667         T56,
44668         T57,
44669         T58,
44670         T59,
44671         T60,
44672         T61,
44673         T62,
44674         T63,
44675         T64,
44676         T65,
44677         T66,
44678         T67,
44679         T68,
44680         T69,
44681         T70,
44682         T71,
44683         T72,
44684         T73,
44685         T74,
44686         T75,
44687         T76,
44688         T77,
44689         T78,
44690         T79,
44691         T80,
44692         T81,
44693         T82,
44694         T83,
44695         T84)> type_;
44696 
44697     Event operator()(const EnqueueArgs& enqueueArgs,
44698         T0 arg0,
44699         T1 arg1,
44700         T2 arg2,
44701         T3 arg3,
44702         T4 arg4,
44703         T5 arg5,
44704         T6 arg6,
44705         T7 arg7,
44706         T8 arg8,
44707         T9 arg9,
44708         T10 arg10,
44709         T11 arg11,
44710         T12 arg12,
44711         T13 arg13,
44712         T14 arg14,
44713         T15 arg15,
44714         T16 arg16,
44715         T17 arg17,
44716         T18 arg18,
44717         T19 arg19,
44718         T20 arg20,
44719         T21 arg21,
44720         T22 arg22,
44721         T23 arg23,
44722         T24 arg24,
44723         T25 arg25,
44724         T26 arg26,
44725         T27 arg27,
44726         T28 arg28,
44727         T29 arg29,
44728         T30 arg30,
44729         T31 arg31,
44730         T32 arg32,
44731         T33 arg33,
44732         T34 arg34,
44733         T35 arg35,
44734         T36 arg36,
44735         T37 arg37,
44736         T38 arg38,
44737         T39 arg39,
44738         T40 arg40,
44739         T41 arg41,
44740         T42 arg42,
44741         T43 arg43,
44742         T44 arg44,
44743         T45 arg45,
44744         T46 arg46,
44745         T47 arg47,
44746         T48 arg48,
44747         T49 arg49,
44748         T50 arg50,
44749         T51 arg51,
44750         T52 arg52,
44751         T53 arg53,
44752         T54 arg54,
44753         T55 arg55,
44754         T56 arg56,
44755         T57 arg57,
44756         T58 arg58,
44757         T59 arg59,
44758         T60 arg60,
44759         T61 arg61,
44760         T62 arg62,
44761         T63 arg63,
44762         T64 arg64,
44763         T65 arg65,
44764         T66 arg66,
44765         T67 arg67,
44766         T68 arg68,
44767         T69 arg69,
44768         T70 arg70,
44769         T71 arg71,
44770         T72 arg72,
44771         T73 arg73,
44772         T74 arg74,
44773         T75 arg75,
44774         T76 arg76,
44775         T77 arg77,
44776         T78 arg78,
44777         T79 arg79,
44778         T80 arg80,
44779         T81 arg81,
44780         T82 arg82,
44781         T83 arg83,
44782         T84 arg84)
44783     {
44784         return functor_(
44785             enqueueArgs,
44786             arg0,
44787             arg1,
44788             arg2,
44789             arg3,
44790             arg4,
44791             arg5,
44792             arg6,
44793             arg7,
44794             arg8,
44795             arg9,
44796             arg10,
44797             arg11,
44798             arg12,
44799             arg13,
44800             arg14,
44801             arg15,
44802             arg16,
44803             arg17,
44804             arg18,
44805             arg19,
44806             arg20,
44807             arg21,
44808             arg22,
44809             arg23,
44810             arg24,
44811             arg25,
44812             arg26,
44813             arg27,
44814             arg28,
44815             arg29,
44816             arg30,
44817             arg31,
44818             arg32,
44819             arg33,
44820             arg34,
44821             arg35,
44822             arg36,
44823             arg37,
44824             arg38,
44825             arg39,
44826             arg40,
44827             arg41,
44828             arg42,
44829             arg43,
44830             arg44,
44831             arg45,
44832             arg46,
44833             arg47,
44834             arg48,
44835             arg49,
44836             arg50,
44837             arg51,
44838             arg52,
44839             arg53,
44840             arg54,
44841             arg55,
44842             arg56,
44843             arg57,
44844             arg58,
44845             arg59,
44846             arg60,
44847             arg61,
44848             arg62,
44849             arg63,
44850             arg64,
44851             arg65,
44852             arg66,
44853             arg67,
44854             arg68,
44855             arg69,
44856             arg70,
44857             arg71,
44858             arg72,
44859             arg73,
44860             arg74,
44861             arg75,
44862             arg76,
44863             arg77,
44864             arg78,
44865             arg79,
44866             arg80,
44867             arg81,
44868             arg82,
44869             arg83,
44870             arg84);
44871     }
44872 
44873     operator type_ ()    
44874     {
44875         return type_(*this);
44876     }
44877 
44878 };
44879 
44880 template<
44881     typename T0,
44882     typename T1,
44883     typename T2,
44884     typename T3,
44885     typename T4,
44886     typename T5,
44887     typename T6,
44888     typename T7,
44889     typename T8,
44890     typename T9,
44891     typename T10,
44892     typename T11,
44893     typename T12,
44894     typename T13,
44895     typename T14,
44896     typename T15,
44897     typename T16,
44898     typename T17,
44899     typename T18,
44900     typename T19,
44901     typename T20,
44902     typename T21,
44903     typename T22,
44904     typename T23,
44905     typename T24,
44906     typename T25,
44907     typename T26,
44908     typename T27,
44909     typename T28,
44910     typename T29,
44911     typename T30,
44912     typename T31,
44913     typename T32,
44914     typename T33,
44915     typename T34,
44916     typename T35,
44917     typename T36,
44918     typename T37,
44919     typename T38,
44920     typename T39,
44921     typename T40,
44922     typename T41,
44923     typename T42,
44924     typename T43,
44925     typename T44,
44926     typename T45,
44927     typename T46,
44928     typename T47,
44929     typename T48,
44930     typename T49,
44931     typename T50,
44932     typename T51,
44933     typename T52,
44934     typename T53,
44935     typename T54,
44936     typename T55,
44937     typename T56,
44938     typename T57,
44939     typename T58,
44940     typename T59,
44941     typename T60,
44942     typename T61,
44943     typename T62,
44944     typename T63,
44945     typename T64,
44946     typename T65,
44947     typename T66,
44948     typename T67,
44949     typename T68,
44950     typename T69,
44951     typename T70,
44952     typename T71,
44953     typename T72,
44954     typename T73,
44955     typename T74,
44956     typename T75,
44957     typename T76,
44958     typename T77,
44959     typename T78,
44960     typename T79,
44961     typename T80,
44962     typename T81,
44963     typename T82,
44964     typename T83,
44965     typename T84,
44966     typename T85>
44967 struct functionImplementation_<
44968     T0,
44969     T1,
44970     T2,
44971     T3,
44972     T4,
44973     T5,
44974     T6,
44975     T7,
44976     T8,
44977     T9,
44978     T10,
44979     T11,
44980     T12,
44981     T13,
44982     T14,
44983     T15,
44984     T16,
44985     T17,
44986     T18,
44987     T19,
44988     T20,
44989     T21,
44990     T22,
44991     T23,
44992     T24,
44993     T25,
44994     T26,
44995     T27,
44996     T28,
44997     T29,
44998     T30,
44999     T31,
45000     T32,
45001     T33,
45002     T34,
45003     T35,
45004     T36,
45005     T37,
45006     T38,
45007     T39,
45008     T40,
45009     T41,
45010     T42,
45011     T43,
45012     T44,
45013     T45,
45014     T46,
45015     T47,
45016     T48,
45017     T49,
45018     T50,
45019     T51,
45020     T52,
45021     T53,
45022     T54,
45023     T55,
45024     T56,
45025     T57,
45026     T58,
45027     T59,
45028     T60,
45029     T61,
45030     T62,
45031     T63,
45032     T64,
45033     T65,
45034     T66,
45035     T67,
45036     T68,
45037     T69,
45038     T70,
45039     T71,
45040     T72,
45041     T73,
45042     T74,
45043     T75,
45044     T76,
45045     T77,
45046     T78,
45047     T79,
45048     T80,
45049     T81,
45050     T82,
45051     T83,
45052     T84,
45053     T85,
45054     NullType,
45055     NullType,
45056     NullType,
45057     NullType,
45058     NullType,
45059     NullType,
45060     NullType,
45061     NullType,
45062     NullType,
45063     NullType,
45064     NullType,
45065     NullType,
45066     NullType,
45067     NullType,
45068     NullType,
45069     NullType,
45070     NullType,
45071     NullType,
45072     NullType,
45073     NullType,
45074     NullType,
45075     NullType,
45076     NullType,
45077     NullType,
45078     NullType,
45079     NullType,
45080     NullType,
45081     NullType,
45082     NullType,
45083     NullType,
45084     NullType,
45085     NullType,
45086     NullType,
45087     NullType,
45088     NullType,
45089     NullType,
45090     NullType,
45091     NullType,
45092     NullType,
45093     NullType,
45094     NullType,
45095     NullType>
45096 {
45097     typedef detail::KernelFunctorGlobal<
45098         T0,
45099         T1,
45100         T2,
45101         T3,
45102         T4,
45103         T5,
45104         T6,
45105         T7,
45106         T8,
45107         T9,
45108         T10,
45109         T11,
45110         T12,
45111         T13,
45112         T14,
45113         T15,
45114         T16,
45115         T17,
45116         T18,
45117         T19,
45118         T20,
45119         T21,
45120         T22,
45121         T23,
45122         T24,
45123         T25,
45124         T26,
45125         T27,
45126         T28,
45127         T29,
45128         T30,
45129         T31,
45130         T32,
45131         T33,
45132         T34,
45133         T35,
45134         T36,
45135         T37,
45136         T38,
45137         T39,
45138         T40,
45139         T41,
45140         T42,
45141         T43,
45142         T44,
45143         T45,
45144         T46,
45145         T47,
45146         T48,
45147         T49,
45148         T50,
45149         T51,
45150         T52,
45151         T53,
45152         T54,
45153         T55,
45154         T56,
45155         T57,
45156         T58,
45157         T59,
45158         T60,
45159         T61,
45160         T62,
45161         T63,
45162         T64,
45163         T65,
45164         T66,
45165         T67,
45166         T68,
45167         T69,
45168         T70,
45169         T71,
45170         T72,
45171         T73,
45172         T74,
45173         T75,
45174         T76,
45175         T77,
45176         T78,
45177         T79,
45178         T80,
45179         T81,
45180         T82,
45181         T83,
45182         T84,
45183         T85,
45184         NullType,
45185         NullType,
45186         NullType,
45187         NullType,
45188         NullType,
45189         NullType,
45190         NullType,
45191         NullType,
45192         NullType,
45193         NullType,
45194         NullType,
45195         NullType,
45196         NullType,
45197         NullType,
45198         NullType,
45199         NullType,
45200         NullType,
45201         NullType,
45202         NullType,
45203         NullType,
45204         NullType,
45205         NullType,
45206         NullType,
45207         NullType,
45208         NullType,
45209         NullType,
45210         NullType,
45211         NullType,
45212         NullType,
45213         NullType,
45214         NullType,
45215         NullType,
45216         NullType,
45217         NullType,
45218         NullType,
45219         NullType,
45220         NullType,
45221         NullType,
45222         NullType,
45223         NullType,
45224         NullType,
45225         NullType> FunctorType;
45226 
45227     FunctorType functor_;
45228 
45229     functionImplementation_(const FunctorType &functor) :
45230         functor_(functor)
45231     {
45232     }
45233         
45234     typedef std::tr1::function<Event (
45235         const EnqueueArgs&,
45236         T0,
45237         T1,
45238         T2,
45239         T3,
45240         T4,
45241         T5,
45242         T6,
45243         T7,
45244         T8,
45245         T9,
45246         T10,
45247         T11,
45248         T12,
45249         T13,
45250         T14,
45251         T15,
45252         T16,
45253         T17,
45254         T18,
45255         T19,
45256         T20,
45257         T21,
45258         T22,
45259         T23,
45260         T24,
45261         T25,
45262         T26,
45263         T27,
45264         T28,
45265         T29,
45266         T30,
45267         T31,
45268         T32,
45269         T33,
45270         T34,
45271         T35,
45272         T36,
45273         T37,
45274         T38,
45275         T39,
45276         T40,
45277         T41,
45278         T42,
45279         T43,
45280         T44,
45281         T45,
45282         T46,
45283         T47,
45284         T48,
45285         T49,
45286         T50,
45287         T51,
45288         T52,
45289         T53,
45290         T54,
45291         T55,
45292         T56,
45293         T57,
45294         T58,
45295         T59,
45296         T60,
45297         T61,
45298         T62,
45299         T63,
45300         T64,
45301         T65,
45302         T66,
45303         T67,
45304         T68,
45305         T69,
45306         T70,
45307         T71,
45308         T72,
45309         T73,
45310         T74,
45311         T75,
45312         T76,
45313         T77,
45314         T78,
45315         T79,
45316         T80,
45317         T81,
45318         T82,
45319         T83,
45320         T84,
45321         T85)> type_;
45322 
45323     Event operator()(const EnqueueArgs& enqueueArgs,
45324         T0 arg0,
45325         T1 arg1,
45326         T2 arg2,
45327         T3 arg3,
45328         T4 arg4,
45329         T5 arg5,
45330         T6 arg6,
45331         T7 arg7,
45332         T8 arg8,
45333         T9 arg9,
45334         T10 arg10,
45335         T11 arg11,
45336         T12 arg12,
45337         T13 arg13,
45338         T14 arg14,
45339         T15 arg15,
45340         T16 arg16,
45341         T17 arg17,
45342         T18 arg18,
45343         T19 arg19,
45344         T20 arg20,
45345         T21 arg21,
45346         T22 arg22,
45347         T23 arg23,
45348         T24 arg24,
45349         T25 arg25,
45350         T26 arg26,
45351         T27 arg27,
45352         T28 arg28,
45353         T29 arg29,
45354         T30 arg30,
45355         T31 arg31,
45356         T32 arg32,
45357         T33 arg33,
45358         T34 arg34,
45359         T35 arg35,
45360         T36 arg36,
45361         T37 arg37,
45362         T38 arg38,
45363         T39 arg39,
45364         T40 arg40,
45365         T41 arg41,
45366         T42 arg42,
45367         T43 arg43,
45368         T44 arg44,
45369         T45 arg45,
45370         T46 arg46,
45371         T47 arg47,
45372         T48 arg48,
45373         T49 arg49,
45374         T50 arg50,
45375         T51 arg51,
45376         T52 arg52,
45377         T53 arg53,
45378         T54 arg54,
45379         T55 arg55,
45380         T56 arg56,
45381         T57 arg57,
45382         T58 arg58,
45383         T59 arg59,
45384         T60 arg60,
45385         T61 arg61,
45386         T62 arg62,
45387         T63 arg63,
45388         T64 arg64,
45389         T65 arg65,
45390         T66 arg66,
45391         T67 arg67,
45392         T68 arg68,
45393         T69 arg69,
45394         T70 arg70,
45395         T71 arg71,
45396         T72 arg72,
45397         T73 arg73,
45398         T74 arg74,
45399         T75 arg75,
45400         T76 arg76,
45401         T77 arg77,
45402         T78 arg78,
45403         T79 arg79,
45404         T80 arg80,
45405         T81 arg81,
45406         T82 arg82,
45407         T83 arg83,
45408         T84 arg84,
45409         T85 arg85)
45410     {
45411         return functor_(
45412             enqueueArgs,
45413             arg0,
45414             arg1,
45415             arg2,
45416             arg3,
45417             arg4,
45418             arg5,
45419             arg6,
45420             arg7,
45421             arg8,
45422             arg9,
45423             arg10,
45424             arg11,
45425             arg12,
45426             arg13,
45427             arg14,
45428             arg15,
45429             arg16,
45430             arg17,
45431             arg18,
45432             arg19,
45433             arg20,
45434             arg21,
45435             arg22,
45436             arg23,
45437             arg24,
45438             arg25,
45439             arg26,
45440             arg27,
45441             arg28,
45442             arg29,
45443             arg30,
45444             arg31,
45445             arg32,
45446             arg33,
45447             arg34,
45448             arg35,
45449             arg36,
45450             arg37,
45451             arg38,
45452             arg39,
45453             arg40,
45454             arg41,
45455             arg42,
45456             arg43,
45457             arg44,
45458             arg45,
45459             arg46,
45460             arg47,
45461             arg48,
45462             arg49,
45463             arg50,
45464             arg51,
45465             arg52,
45466             arg53,
45467             arg54,
45468             arg55,
45469             arg56,
45470             arg57,
45471             arg58,
45472             arg59,
45473             arg60,
45474             arg61,
45475             arg62,
45476             arg63,
45477             arg64,
45478             arg65,
45479             arg66,
45480             arg67,
45481             arg68,
45482             arg69,
45483             arg70,
45484             arg71,
45485             arg72,
45486             arg73,
45487             arg74,
45488             arg75,
45489             arg76,
45490             arg77,
45491             arg78,
45492             arg79,
45493             arg80,
45494             arg81,
45495             arg82,
45496             arg83,
45497             arg84,
45498             arg85);
45499     }
45500 
45501     operator type_ ()    
45502     {
45503         return type_(*this);
45504     }
45505 
45506 };
45507 
45508 template<
45509     typename T0,
45510     typename T1,
45511     typename T2,
45512     typename T3,
45513     typename T4,
45514     typename T5,
45515     typename T6,
45516     typename T7,
45517     typename T8,
45518     typename T9,
45519     typename T10,
45520     typename T11,
45521     typename T12,
45522     typename T13,
45523     typename T14,
45524     typename T15,
45525     typename T16,
45526     typename T17,
45527     typename T18,
45528     typename T19,
45529     typename T20,
45530     typename T21,
45531     typename T22,
45532     typename T23,
45533     typename T24,
45534     typename T25,
45535     typename T26,
45536     typename T27,
45537     typename T28,
45538     typename T29,
45539     typename T30,
45540     typename T31,
45541     typename T32,
45542     typename T33,
45543     typename T34,
45544     typename T35,
45545     typename T36,
45546     typename T37,
45547     typename T38,
45548     typename T39,
45549     typename T40,
45550     typename T41,
45551     typename T42,
45552     typename T43,
45553     typename T44,
45554     typename T45,
45555     typename T46,
45556     typename T47,
45557     typename T48,
45558     typename T49,
45559     typename T50,
45560     typename T51,
45561     typename T52,
45562     typename T53,
45563     typename T54,
45564     typename T55,
45565     typename T56,
45566     typename T57,
45567     typename T58,
45568     typename T59,
45569     typename T60,
45570     typename T61,
45571     typename T62,
45572     typename T63,
45573     typename T64,
45574     typename T65,
45575     typename T66,
45576     typename T67,
45577     typename T68,
45578     typename T69,
45579     typename T70,
45580     typename T71,
45581     typename T72,
45582     typename T73,
45583     typename T74,
45584     typename T75,
45585     typename T76,
45586     typename T77,
45587     typename T78,
45588     typename T79,
45589     typename T80,
45590     typename T81,
45591     typename T82,
45592     typename T83,
45593     typename T84,
45594     typename T85,
45595     typename T86>
45596 struct functionImplementation_<
45597     T0,
45598     T1,
45599     T2,
45600     T3,
45601     T4,
45602     T5,
45603     T6,
45604     T7,
45605     T8,
45606     T9,
45607     T10,
45608     T11,
45609     T12,
45610     T13,
45611     T14,
45612     T15,
45613     T16,
45614     T17,
45615     T18,
45616     T19,
45617     T20,
45618     T21,
45619     T22,
45620     T23,
45621     T24,
45622     T25,
45623     T26,
45624     T27,
45625     T28,
45626     T29,
45627     T30,
45628     T31,
45629     T32,
45630     T33,
45631     T34,
45632     T35,
45633     T36,
45634     T37,
45635     T38,
45636     T39,
45637     T40,
45638     T41,
45639     T42,
45640     T43,
45641     T44,
45642     T45,
45643     T46,
45644     T47,
45645     T48,
45646     T49,
45647     T50,
45648     T51,
45649     T52,
45650     T53,
45651     T54,
45652     T55,
45653     T56,
45654     T57,
45655     T58,
45656     T59,
45657     T60,
45658     T61,
45659     T62,
45660     T63,
45661     T64,
45662     T65,
45663     T66,
45664     T67,
45665     T68,
45666     T69,
45667     T70,
45668     T71,
45669     T72,
45670     T73,
45671     T74,
45672     T75,
45673     T76,
45674     T77,
45675     T78,
45676     T79,
45677     T80,
45678     T81,
45679     T82,
45680     T83,
45681     T84,
45682     T85,
45683     T86,
45684     NullType,
45685     NullType,
45686     NullType,
45687     NullType,
45688     NullType,
45689     NullType,
45690     NullType,
45691     NullType,
45692     NullType,
45693     NullType,
45694     NullType,
45695     NullType,
45696     NullType,
45697     NullType,
45698     NullType,
45699     NullType,
45700     NullType,
45701     NullType,
45702     NullType,
45703     NullType,
45704     NullType,
45705     NullType,
45706     NullType,
45707     NullType,
45708     NullType,
45709     NullType,
45710     NullType,
45711     NullType,
45712     NullType,
45713     NullType,
45714     NullType,
45715     NullType,
45716     NullType,
45717     NullType,
45718     NullType,
45719     NullType,
45720     NullType,
45721     NullType,
45722     NullType,
45723     NullType,
45724     NullType>
45725 {
45726     typedef detail::KernelFunctorGlobal<
45727         T0,
45728         T1,
45729         T2,
45730         T3,
45731         T4,
45732         T5,
45733         T6,
45734         T7,
45735         T8,
45736         T9,
45737         T10,
45738         T11,
45739         T12,
45740         T13,
45741         T14,
45742         T15,
45743         T16,
45744         T17,
45745         T18,
45746         T19,
45747         T20,
45748         T21,
45749         T22,
45750         T23,
45751         T24,
45752         T25,
45753         T26,
45754         T27,
45755         T28,
45756         T29,
45757         T30,
45758         T31,
45759         T32,
45760         T33,
45761         T34,
45762         T35,
45763         T36,
45764         T37,
45765         T38,
45766         T39,
45767         T40,
45768         T41,
45769         T42,
45770         T43,
45771         T44,
45772         T45,
45773         T46,
45774         T47,
45775         T48,
45776         T49,
45777         T50,
45778         T51,
45779         T52,
45780         T53,
45781         T54,
45782         T55,
45783         T56,
45784         T57,
45785         T58,
45786         T59,
45787         T60,
45788         T61,
45789         T62,
45790         T63,
45791         T64,
45792         T65,
45793         T66,
45794         T67,
45795         T68,
45796         T69,
45797         T70,
45798         T71,
45799         T72,
45800         T73,
45801         T74,
45802         T75,
45803         T76,
45804         T77,
45805         T78,
45806         T79,
45807         T80,
45808         T81,
45809         T82,
45810         T83,
45811         T84,
45812         T85,
45813         T86,
45814         NullType,
45815         NullType,
45816         NullType,
45817         NullType,
45818         NullType,
45819         NullType,
45820         NullType,
45821         NullType,
45822         NullType,
45823         NullType,
45824         NullType,
45825         NullType,
45826         NullType,
45827         NullType,
45828         NullType,
45829         NullType,
45830         NullType,
45831         NullType,
45832         NullType,
45833         NullType,
45834         NullType,
45835         NullType,
45836         NullType,
45837         NullType,
45838         NullType,
45839         NullType,
45840         NullType,
45841         NullType,
45842         NullType,
45843         NullType,
45844         NullType,
45845         NullType,
45846         NullType,
45847         NullType,
45848         NullType,
45849         NullType,
45850         NullType,
45851         NullType,
45852         NullType,
45853         NullType,
45854         NullType> FunctorType;
45855 
45856     FunctorType functor_;
45857 
45858     functionImplementation_(const FunctorType &functor) :
45859         functor_(functor)
45860     {
45861     }
45862         
45863     typedef std::tr1::function<Event (
45864         const EnqueueArgs&,
45865         T0,
45866         T1,
45867         T2,
45868         T3,
45869         T4,
45870         T5,
45871         T6,
45872         T7,
45873         T8,
45874         T9,
45875         T10,
45876         T11,
45877         T12,
45878         T13,
45879         T14,
45880         T15,
45881         T16,
45882         T17,
45883         T18,
45884         T19,
45885         T20,
45886         T21,
45887         T22,
45888         T23,
45889         T24,
45890         T25,
45891         T26,
45892         T27,
45893         T28,
45894         T29,
45895         T30,
45896         T31,
45897         T32,
45898         T33,
45899         T34,
45900         T35,
45901         T36,
45902         T37,
45903         T38,
45904         T39,
45905         T40,
45906         T41,
45907         T42,
45908         T43,
45909         T44,
45910         T45,
45911         T46,
45912         T47,
45913         T48,
45914         T49,
45915         T50,
45916         T51,
45917         T52,
45918         T53,
45919         T54,
45920         T55,
45921         T56,
45922         T57,
45923         T58,
45924         T59,
45925         T60,
45926         T61,
45927         T62,
45928         T63,
45929         T64,
45930         T65,
45931         T66,
45932         T67,
45933         T68,
45934         T69,
45935         T70,
45936         T71,
45937         T72,
45938         T73,
45939         T74,
45940         T75,
45941         T76,
45942         T77,
45943         T78,
45944         T79,
45945         T80,
45946         T81,
45947         T82,
45948         T83,
45949         T84,
45950         T85,
45951         T86)> type_;
45952 
45953     Event operator()(const EnqueueArgs& enqueueArgs,
45954         T0 arg0,
45955         T1 arg1,
45956         T2 arg2,
45957         T3 arg3,
45958         T4 arg4,
45959         T5 arg5,
45960         T6 arg6,
45961         T7 arg7,
45962         T8 arg8,
45963         T9 arg9,
45964         T10 arg10,
45965         T11 arg11,
45966         T12 arg12,
45967         T13 arg13,
45968         T14 arg14,
45969         T15 arg15,
45970         T16 arg16,
45971         T17 arg17,
45972         T18 arg18,
45973         T19 arg19,
45974         T20 arg20,
45975         T21 arg21,
45976         T22 arg22,
45977         T23 arg23,
45978         T24 arg24,
45979         T25 arg25,
45980         T26 arg26,
45981         T27 arg27,
45982         T28 arg28,
45983         T29 arg29,
45984         T30 arg30,
45985         T31 arg31,
45986         T32 arg32,
45987         T33 arg33,
45988         T34 arg34,
45989         T35 arg35,
45990         T36 arg36,
45991         T37 arg37,
45992         T38 arg38,
45993         T39 arg39,
45994         T40 arg40,
45995         T41 arg41,
45996         T42 arg42,
45997         T43 arg43,
45998         T44 arg44,
45999         T45 arg45,
46000         T46 arg46,
46001         T47 arg47,
46002         T48 arg48,
46003         T49 arg49,
46004         T50 arg50,
46005         T51 arg51,
46006         T52 arg52,
46007         T53 arg53,
46008         T54 arg54,
46009         T55 arg55,
46010         T56 arg56,
46011         T57 arg57,
46012         T58 arg58,
46013         T59 arg59,
46014         T60 arg60,
46015         T61 arg61,
46016         T62 arg62,
46017         T63 arg63,
46018         T64 arg64,
46019         T65 arg65,
46020         T66 arg66,
46021         T67 arg67,
46022         T68 arg68,
46023         T69 arg69,
46024         T70 arg70,
46025         T71 arg71,
46026         T72 arg72,
46027         T73 arg73,
46028         T74 arg74,
46029         T75 arg75,
46030         T76 arg76,
46031         T77 arg77,
46032         T78 arg78,
46033         T79 arg79,
46034         T80 arg80,
46035         T81 arg81,
46036         T82 arg82,
46037         T83 arg83,
46038         T84 arg84,
46039         T85 arg85,
46040         T86 arg86)
46041     {
46042         return functor_(
46043             enqueueArgs,
46044             arg0,
46045             arg1,
46046             arg2,
46047             arg3,
46048             arg4,
46049             arg5,
46050             arg6,
46051             arg7,
46052             arg8,
46053             arg9,
46054             arg10,
46055             arg11,
46056             arg12,
46057             arg13,
46058             arg14,
46059             arg15,
46060             arg16,
46061             arg17,
46062             arg18,
46063             arg19,
46064             arg20,
46065             arg21,
46066             arg22,
46067             arg23,
46068             arg24,
46069             arg25,
46070             arg26,
46071             arg27,
46072             arg28,
46073             arg29,
46074             arg30,
46075             arg31,
46076             arg32,
46077             arg33,
46078             arg34,
46079             arg35,
46080             arg36,
46081             arg37,
46082             arg38,
46083             arg39,
46084             arg40,
46085             arg41,
46086             arg42,
46087             arg43,
46088             arg44,
46089             arg45,
46090             arg46,
46091             arg47,
46092             arg48,
46093             arg49,
46094             arg50,
46095             arg51,
46096             arg52,
46097             arg53,
46098             arg54,
46099             arg55,
46100             arg56,
46101             arg57,
46102             arg58,
46103             arg59,
46104             arg60,
46105             arg61,
46106             arg62,
46107             arg63,
46108             arg64,
46109             arg65,
46110             arg66,
46111             arg67,
46112             arg68,
46113             arg69,
46114             arg70,
46115             arg71,
46116             arg72,
46117             arg73,
46118             arg74,
46119             arg75,
46120             arg76,
46121             arg77,
46122             arg78,
46123             arg79,
46124             arg80,
46125             arg81,
46126             arg82,
46127             arg83,
46128             arg84,
46129             arg85,
46130             arg86);
46131     }
46132 
46133     operator type_ ()    
46134     {
46135         return type_(*this);
46136     }
46137 
46138 };
46139 
46140 template<
46141     typename T0,
46142     typename T1,
46143     typename T2,
46144     typename T3,
46145     typename T4,
46146     typename T5,
46147     typename T6,
46148     typename T7,
46149     typename T8,
46150     typename T9,
46151     typename T10,
46152     typename T11,
46153     typename T12,
46154     typename T13,
46155     typename T14,
46156     typename T15,
46157     typename T16,
46158     typename T17,
46159     typename T18,
46160     typename T19,
46161     typename T20,
46162     typename T21,
46163     typename T22,
46164     typename T23,
46165     typename T24,
46166     typename T25,
46167     typename T26,
46168     typename T27,
46169     typename T28,
46170     typename T29,
46171     typename T30,
46172     typename T31,
46173     typename T32,
46174     typename T33,
46175     typename T34,
46176     typename T35,
46177     typename T36,
46178     typename T37,
46179     typename T38,
46180     typename T39,
46181     typename T40,
46182     typename T41,
46183     typename T42,
46184     typename T43,
46185     typename T44,
46186     typename T45,
46187     typename T46,
46188     typename T47,
46189     typename T48,
46190     typename T49,
46191     typename T50,
46192     typename T51,
46193     typename T52,
46194     typename T53,
46195     typename T54,
46196     typename T55,
46197     typename T56,
46198     typename T57,
46199     typename T58,
46200     typename T59,
46201     typename T60,
46202     typename T61,
46203     typename T62,
46204     typename T63,
46205     typename T64,
46206     typename T65,
46207     typename T66,
46208     typename T67,
46209     typename T68,
46210     typename T69,
46211     typename T70,
46212     typename T71,
46213     typename T72,
46214     typename T73,
46215     typename T74,
46216     typename T75,
46217     typename T76,
46218     typename T77,
46219     typename T78,
46220     typename T79,
46221     typename T80,
46222     typename T81,
46223     typename T82,
46224     typename T83,
46225     typename T84,
46226     typename T85,
46227     typename T86,
46228     typename T87>
46229 struct functionImplementation_<
46230     T0,
46231     T1,
46232     T2,
46233     T3,
46234     T4,
46235     T5,
46236     T6,
46237     T7,
46238     T8,
46239     T9,
46240     T10,
46241     T11,
46242     T12,
46243     T13,
46244     T14,
46245     T15,
46246     T16,
46247     T17,
46248     T18,
46249     T19,
46250     T20,
46251     T21,
46252     T22,
46253     T23,
46254     T24,
46255     T25,
46256     T26,
46257     T27,
46258     T28,
46259     T29,
46260     T30,
46261     T31,
46262     T32,
46263     T33,
46264     T34,
46265     T35,
46266     T36,
46267     T37,
46268     T38,
46269     T39,
46270     T40,
46271     T41,
46272     T42,
46273     T43,
46274     T44,
46275     T45,
46276     T46,
46277     T47,
46278     T48,
46279     T49,
46280     T50,
46281     T51,
46282     T52,
46283     T53,
46284     T54,
46285     T55,
46286     T56,
46287     T57,
46288     T58,
46289     T59,
46290     T60,
46291     T61,
46292     T62,
46293     T63,
46294     T64,
46295     T65,
46296     T66,
46297     T67,
46298     T68,
46299     T69,
46300     T70,
46301     T71,
46302     T72,
46303     T73,
46304     T74,
46305     T75,
46306     T76,
46307     T77,
46308     T78,
46309     T79,
46310     T80,
46311     T81,
46312     T82,
46313     T83,
46314     T84,
46315     T85,
46316     T86,
46317     T87,
46318     NullType,
46319     NullType,
46320     NullType,
46321     NullType,
46322     NullType,
46323     NullType,
46324     NullType,
46325     NullType,
46326     NullType,
46327     NullType,
46328     NullType,
46329     NullType,
46330     NullType,
46331     NullType,
46332     NullType,
46333     NullType,
46334     NullType,
46335     NullType,
46336     NullType,
46337     NullType,
46338     NullType,
46339     NullType,
46340     NullType,
46341     NullType,
46342     NullType,
46343     NullType,
46344     NullType,
46345     NullType,
46346     NullType,
46347     NullType,
46348     NullType,
46349     NullType,
46350     NullType,
46351     NullType,
46352     NullType,
46353     NullType,
46354     NullType,
46355     NullType,
46356     NullType,
46357     NullType>
46358 {
46359     typedef detail::KernelFunctorGlobal<
46360         T0,
46361         T1,
46362         T2,
46363         T3,
46364         T4,
46365         T5,
46366         T6,
46367         T7,
46368         T8,
46369         T9,
46370         T10,
46371         T11,
46372         T12,
46373         T13,
46374         T14,
46375         T15,
46376         T16,
46377         T17,
46378         T18,
46379         T19,
46380         T20,
46381         T21,
46382         T22,
46383         T23,
46384         T24,
46385         T25,
46386         T26,
46387         T27,
46388         T28,
46389         T29,
46390         T30,
46391         T31,
46392         T32,
46393         T33,
46394         T34,
46395         T35,
46396         T36,
46397         T37,
46398         T38,
46399         T39,
46400         T40,
46401         T41,
46402         T42,
46403         T43,
46404         T44,
46405         T45,
46406         T46,
46407         T47,
46408         T48,
46409         T49,
46410         T50,
46411         T51,
46412         T52,
46413         T53,
46414         T54,
46415         T55,
46416         T56,
46417         T57,
46418         T58,
46419         T59,
46420         T60,
46421         T61,
46422         T62,
46423         T63,
46424         T64,
46425         T65,
46426         T66,
46427         T67,
46428         T68,
46429         T69,
46430         T70,
46431         T71,
46432         T72,
46433         T73,
46434         T74,
46435         T75,
46436         T76,
46437         T77,
46438         T78,
46439         T79,
46440         T80,
46441         T81,
46442         T82,
46443         T83,
46444         T84,
46445         T85,
46446         T86,
46447         T87,
46448         NullType,
46449         NullType,
46450         NullType,
46451         NullType,
46452         NullType,
46453         NullType,
46454         NullType,
46455         NullType,
46456         NullType,
46457         NullType,
46458         NullType,
46459         NullType,
46460         NullType,
46461         NullType,
46462         NullType,
46463         NullType,
46464         NullType,
46465         NullType,
46466         NullType,
46467         NullType,
46468         NullType,
46469         NullType,
46470         NullType,
46471         NullType,
46472         NullType,
46473         NullType,
46474         NullType,
46475         NullType,
46476         NullType,
46477         NullType,
46478         NullType,
46479         NullType,
46480         NullType,
46481         NullType,
46482         NullType,
46483         NullType,
46484         NullType,
46485         NullType,
46486         NullType,
46487         NullType> FunctorType;
46488 
46489     FunctorType functor_;
46490 
46491     functionImplementation_(const FunctorType &functor) :
46492         functor_(functor)
46493     {
46494     }
46495         
46496     typedef std::tr1::function<Event (
46497         const EnqueueArgs&,
46498         T0,
46499         T1,
46500         T2,
46501         T3,
46502         T4,
46503         T5,
46504         T6,
46505         T7,
46506         T8,
46507         T9,
46508         T10,
46509         T11,
46510         T12,
46511         T13,
46512         T14,
46513         T15,
46514         T16,
46515         T17,
46516         T18,
46517         T19,
46518         T20,
46519         T21,
46520         T22,
46521         T23,
46522         T24,
46523         T25,
46524         T26,
46525         T27,
46526         T28,
46527         T29,
46528         T30,
46529         T31,
46530         T32,
46531         T33,
46532         T34,
46533         T35,
46534         T36,
46535         T37,
46536         T38,
46537         T39,
46538         T40,
46539         T41,
46540         T42,
46541         T43,
46542         T44,
46543         T45,
46544         T46,
46545         T47,
46546         T48,
46547         T49,
46548         T50,
46549         T51,
46550         T52,
46551         T53,
46552         T54,
46553         T55,
46554         T56,
46555         T57,
46556         T58,
46557         T59,
46558         T60,
46559         T61,
46560         T62,
46561         T63,
46562         T64,
46563         T65,
46564         T66,
46565         T67,
46566         T68,
46567         T69,
46568         T70,
46569         T71,
46570         T72,
46571         T73,
46572         T74,
46573         T75,
46574         T76,
46575         T77,
46576         T78,
46577         T79,
46578         T80,
46579         T81,
46580         T82,
46581         T83,
46582         T84,
46583         T85,
46584         T86,
46585         T87)> type_;
46586 
46587     Event operator()(const EnqueueArgs& enqueueArgs,
46588         T0 arg0,
46589         T1 arg1,
46590         T2 arg2,
46591         T3 arg3,
46592         T4 arg4,
46593         T5 arg5,
46594         T6 arg6,
46595         T7 arg7,
46596         T8 arg8,
46597         T9 arg9,
46598         T10 arg10,
46599         T11 arg11,
46600         T12 arg12,
46601         T13 arg13,
46602         T14 arg14,
46603         T15 arg15,
46604         T16 arg16,
46605         T17 arg17,
46606         T18 arg18,
46607         T19 arg19,
46608         T20 arg20,
46609         T21 arg21,
46610         T22 arg22,
46611         T23 arg23,
46612         T24 arg24,
46613         T25 arg25,
46614         T26 arg26,
46615         T27 arg27,
46616         T28 arg28,
46617         T29 arg29,
46618         T30 arg30,
46619         T31 arg31,
46620         T32 arg32,
46621         T33 arg33,
46622         T34 arg34,
46623         T35 arg35,
46624         T36 arg36,
46625         T37 arg37,
46626         T38 arg38,
46627         T39 arg39,
46628         T40 arg40,
46629         T41 arg41,
46630         T42 arg42,
46631         T43 arg43,
46632         T44 arg44,
46633         T45 arg45,
46634         T46 arg46,
46635         T47 arg47,
46636         T48 arg48,
46637         T49 arg49,
46638         T50 arg50,
46639         T51 arg51,
46640         T52 arg52,
46641         T53 arg53,
46642         T54 arg54,
46643         T55 arg55,
46644         T56 arg56,
46645         T57 arg57,
46646         T58 arg58,
46647         T59 arg59,
46648         T60 arg60,
46649         T61 arg61,
46650         T62 arg62,
46651         T63 arg63,
46652         T64 arg64,
46653         T65 arg65,
46654         T66 arg66,
46655         T67 arg67,
46656         T68 arg68,
46657         T69 arg69,
46658         T70 arg70,
46659         T71 arg71,
46660         T72 arg72,
46661         T73 arg73,
46662         T74 arg74,
46663         T75 arg75,
46664         T76 arg76,
46665         T77 arg77,
46666         T78 arg78,
46667         T79 arg79,
46668         T80 arg80,
46669         T81 arg81,
46670         T82 arg82,
46671         T83 arg83,
46672         T84 arg84,
46673         T85 arg85,
46674         T86 arg86,
46675         T87 arg87)
46676     {
46677         return functor_(
46678             enqueueArgs,
46679             arg0,
46680             arg1,
46681             arg2,
46682             arg3,
46683             arg4,
46684             arg5,
46685             arg6,
46686             arg7,
46687             arg8,
46688             arg9,
46689             arg10,
46690             arg11,
46691             arg12,
46692             arg13,
46693             arg14,
46694             arg15,
46695             arg16,
46696             arg17,
46697             arg18,
46698             arg19,
46699             arg20,
46700             arg21,
46701             arg22,
46702             arg23,
46703             arg24,
46704             arg25,
46705             arg26,
46706             arg27,
46707             arg28,
46708             arg29,
46709             arg30,
46710             arg31,
46711             arg32,
46712             arg33,
46713             arg34,
46714             arg35,
46715             arg36,
46716             arg37,
46717             arg38,
46718             arg39,
46719             arg40,
46720             arg41,
46721             arg42,
46722             arg43,
46723             arg44,
46724             arg45,
46725             arg46,
46726             arg47,
46727             arg48,
46728             arg49,
46729             arg50,
46730             arg51,
46731             arg52,
46732             arg53,
46733             arg54,
46734             arg55,
46735             arg56,
46736             arg57,
46737             arg58,
46738             arg59,
46739             arg60,
46740             arg61,
46741             arg62,
46742             arg63,
46743             arg64,
46744             arg65,
46745             arg66,
46746             arg67,
46747             arg68,
46748             arg69,
46749             arg70,
46750             arg71,
46751             arg72,
46752             arg73,
46753             arg74,
46754             arg75,
46755             arg76,
46756             arg77,
46757             arg78,
46758             arg79,
46759             arg80,
46760             arg81,
46761             arg82,
46762             arg83,
46763             arg84,
46764             arg85,
46765             arg86,
46766             arg87);
46767     }
46768 
46769     operator type_ ()    
46770     {
46771         return type_(*this);
46772     }
46773 
46774 };
46775 
46776 template<
46777     typename T0,
46778     typename T1,
46779     typename T2,
46780     typename T3,
46781     typename T4,
46782     typename T5,
46783     typename T6,
46784     typename T7,
46785     typename T8,
46786     typename T9,
46787     typename T10,
46788     typename T11,
46789     typename T12,
46790     typename T13,
46791     typename T14,
46792     typename T15,
46793     typename T16,
46794     typename T17,
46795     typename T18,
46796     typename T19,
46797     typename T20,
46798     typename T21,
46799     typename T22,
46800     typename T23,
46801     typename T24,
46802     typename T25,
46803     typename T26,
46804     typename T27,
46805     typename T28,
46806     typename T29,
46807     typename T30,
46808     typename T31,
46809     typename T32,
46810     typename T33,
46811     typename T34,
46812     typename T35,
46813     typename T36,
46814     typename T37,
46815     typename T38,
46816     typename T39,
46817     typename T40,
46818     typename T41,
46819     typename T42,
46820     typename T43,
46821     typename T44,
46822     typename T45,
46823     typename T46,
46824     typename T47,
46825     typename T48,
46826     typename T49,
46827     typename T50,
46828     typename T51,
46829     typename T52,
46830     typename T53,
46831     typename T54,
46832     typename T55,
46833     typename T56,
46834     typename T57,
46835     typename T58,
46836     typename T59,
46837     typename T60,
46838     typename T61,
46839     typename T62,
46840     typename T63,
46841     typename T64,
46842     typename T65,
46843     typename T66,
46844     typename T67,
46845     typename T68,
46846     typename T69,
46847     typename T70,
46848     typename T71,
46849     typename T72,
46850     typename T73,
46851     typename T74,
46852     typename T75,
46853     typename T76,
46854     typename T77,
46855     typename T78,
46856     typename T79,
46857     typename T80,
46858     typename T81,
46859     typename T82,
46860     typename T83,
46861     typename T84,
46862     typename T85,
46863     typename T86,
46864     typename T87,
46865     typename T88>
46866 struct functionImplementation_<
46867     T0,
46868     T1,
46869     T2,
46870     T3,
46871     T4,
46872     T5,
46873     T6,
46874     T7,
46875     T8,
46876     T9,
46877     T10,
46878     T11,
46879     T12,
46880     T13,
46881     T14,
46882     T15,
46883     T16,
46884     T17,
46885     T18,
46886     T19,
46887     T20,
46888     T21,
46889     T22,
46890     T23,
46891     T24,
46892     T25,
46893     T26,
46894     T27,
46895     T28,
46896     T29,
46897     T30,
46898     T31,
46899     T32,
46900     T33,
46901     T34,
46902     T35,
46903     T36,
46904     T37,
46905     T38,
46906     T39,
46907     T40,
46908     T41,
46909     T42,
46910     T43,
46911     T44,
46912     T45,
46913     T46,
46914     T47,
46915     T48,
46916     T49,
46917     T50,
46918     T51,
46919     T52,
46920     T53,
46921     T54,
46922     T55,
46923     T56,
46924     T57,
46925     T58,
46926     T59,
46927     T60,
46928     T61,
46929     T62,
46930     T63,
46931     T64,
46932     T65,
46933     T66,
46934     T67,
46935     T68,
46936     T69,
46937     T70,
46938     T71,
46939     T72,
46940     T73,
46941     T74,
46942     T75,
46943     T76,
46944     T77,
46945     T78,
46946     T79,
46947     T80,
46948     T81,
46949     T82,
46950     T83,
46951     T84,
46952     T85,
46953     T86,
46954     T87,
46955     T88,
46956     NullType,
46957     NullType,
46958     NullType,
46959     NullType,
46960     NullType,
46961     NullType,
46962     NullType,
46963     NullType,
46964     NullType,
46965     NullType,
46966     NullType,
46967     NullType,
46968     NullType,
46969     NullType,
46970     NullType,
46971     NullType,
46972     NullType,
46973     NullType,
46974     NullType,
46975     NullType,
46976     NullType,
46977     NullType,
46978     NullType,
46979     NullType,
46980     NullType,
46981     NullType,
46982     NullType,
46983     NullType,
46984     NullType,
46985     NullType,
46986     NullType,
46987     NullType,
46988     NullType,
46989     NullType,
46990     NullType,
46991     NullType,
46992     NullType,
46993     NullType,
46994     NullType>
46995 {
46996     typedef detail::KernelFunctorGlobal<
46997         T0,
46998         T1,
46999         T2,
47000         T3,
47001         T4,
47002         T5,
47003         T6,
47004         T7,
47005         T8,
47006         T9,
47007         T10,
47008         T11,
47009         T12,
47010         T13,
47011         T14,
47012         T15,
47013         T16,
47014         T17,
47015         T18,
47016         T19,
47017         T20,
47018         T21,
47019         T22,
47020         T23,
47021         T24,
47022         T25,
47023         T26,
47024         T27,
47025         T28,
47026         T29,
47027         T30,
47028         T31,
47029         T32,
47030         T33,
47031         T34,
47032         T35,
47033         T36,
47034         T37,
47035         T38,
47036         T39,
47037         T40,
47038         T41,
47039         T42,
47040         T43,
47041         T44,
47042         T45,
47043         T46,
47044         T47,
47045         T48,
47046         T49,
47047         T50,
47048         T51,
47049         T52,
47050         T53,
47051         T54,
47052         T55,
47053         T56,
47054         T57,
47055         T58,
47056         T59,
47057         T60,
47058         T61,
47059         T62,
47060         T63,
47061         T64,
47062         T65,
47063         T66,
47064         T67,
47065         T68,
47066         T69,
47067         T70,
47068         T71,
47069         T72,
47070         T73,
47071         T74,
47072         T75,
47073         T76,
47074         T77,
47075         T78,
47076         T79,
47077         T80,
47078         T81,
47079         T82,
47080         T83,
47081         T84,
47082         T85,
47083         T86,
47084         T87,
47085         T88,
47086         NullType,
47087         NullType,
47088         NullType,
47089         NullType,
47090         NullType,
47091         NullType,
47092         NullType,
47093         NullType,
47094         NullType,
47095         NullType,
47096         NullType,
47097         NullType,
47098         NullType,
47099         NullType,
47100         NullType,
47101         NullType,
47102         NullType,
47103         NullType,
47104         NullType,
47105         NullType,
47106         NullType,
47107         NullType,
47108         NullType,
47109         NullType,
47110         NullType,
47111         NullType,
47112         NullType,
47113         NullType,
47114         NullType,
47115         NullType,
47116         NullType,
47117         NullType,
47118         NullType,
47119         NullType,
47120         NullType,
47121         NullType,
47122         NullType,
47123         NullType,
47124         NullType> FunctorType;
47125 
47126     FunctorType functor_;
47127 
47128     functionImplementation_(const FunctorType &functor) :
47129         functor_(functor)
47130     {
47131     }
47132         
47133     typedef std::tr1::function<Event (
47134         const EnqueueArgs&,
47135         T0,
47136         T1,
47137         T2,
47138         T3,
47139         T4,
47140         T5,
47141         T6,
47142         T7,
47143         T8,
47144         T9,
47145         T10,
47146         T11,
47147         T12,
47148         T13,
47149         T14,
47150         T15,
47151         T16,
47152         T17,
47153         T18,
47154         T19,
47155         T20,
47156         T21,
47157         T22,
47158         T23,
47159         T24,
47160         T25,
47161         T26,
47162         T27,
47163         T28,
47164         T29,
47165         T30,
47166         T31,
47167         T32,
47168         T33,
47169         T34,
47170         T35,
47171         T36,
47172         T37,
47173         T38,
47174         T39,
47175         T40,
47176         T41,
47177         T42,
47178         T43,
47179         T44,
47180         T45,
47181         T46,
47182         T47,
47183         T48,
47184         T49,
47185         T50,
47186         T51,
47187         T52,
47188         T53,
47189         T54,
47190         T55,
47191         T56,
47192         T57,
47193         T58,
47194         T59,
47195         T60,
47196         T61,
47197         T62,
47198         T63,
47199         T64,
47200         T65,
47201         T66,
47202         T67,
47203         T68,
47204         T69,
47205         T70,
47206         T71,
47207         T72,
47208         T73,
47209         T74,
47210         T75,
47211         T76,
47212         T77,
47213         T78,
47214         T79,
47215         T80,
47216         T81,
47217         T82,
47218         T83,
47219         T84,
47220         T85,
47221         T86,
47222         T87,
47223         T88)> type_;
47224 
47225     Event operator()(const EnqueueArgs& enqueueArgs,
47226         T0 arg0,
47227         T1 arg1,
47228         T2 arg2,
47229         T3 arg3,
47230         T4 arg4,
47231         T5 arg5,
47232         T6 arg6,
47233         T7 arg7,
47234         T8 arg8,
47235         T9 arg9,
47236         T10 arg10,
47237         T11 arg11,
47238         T12 arg12,
47239         T13 arg13,
47240         T14 arg14,
47241         T15 arg15,
47242         T16 arg16,
47243         T17 arg17,
47244         T18 arg18,
47245         T19 arg19,
47246         T20 arg20,
47247         T21 arg21,
47248         T22 arg22,
47249         T23 arg23,
47250         T24 arg24,
47251         T25 arg25,
47252         T26 arg26,
47253         T27 arg27,
47254         T28 arg28,
47255         T29 arg29,
47256         T30 arg30,
47257         T31 arg31,
47258         T32 arg32,
47259         T33 arg33,
47260         T34 arg34,
47261         T35 arg35,
47262         T36 arg36,
47263         T37 arg37,
47264         T38 arg38,
47265         T39 arg39,
47266         T40 arg40,
47267         T41 arg41,
47268         T42 arg42,
47269         T43 arg43,
47270         T44 arg44,
47271         T45 arg45,
47272         T46 arg46,
47273         T47 arg47,
47274         T48 arg48,
47275         T49 arg49,
47276         T50 arg50,
47277         T51 arg51,
47278         T52 arg52,
47279         T53 arg53,
47280         T54 arg54,
47281         T55 arg55,
47282         T56 arg56,
47283         T57 arg57,
47284         T58 arg58,
47285         T59 arg59,
47286         T60 arg60,
47287         T61 arg61,
47288         T62 arg62,
47289         T63 arg63,
47290         T64 arg64,
47291         T65 arg65,
47292         T66 arg66,
47293         T67 arg67,
47294         T68 arg68,
47295         T69 arg69,
47296         T70 arg70,
47297         T71 arg71,
47298         T72 arg72,
47299         T73 arg73,
47300         T74 arg74,
47301         T75 arg75,
47302         T76 arg76,
47303         T77 arg77,
47304         T78 arg78,
47305         T79 arg79,
47306         T80 arg80,
47307         T81 arg81,
47308         T82 arg82,
47309         T83 arg83,
47310         T84 arg84,
47311         T85 arg85,
47312         T86 arg86,
47313         T87 arg87,
47314         T88 arg88)
47315     {
47316         return functor_(
47317             enqueueArgs,
47318             arg0,
47319             arg1,
47320             arg2,
47321             arg3,
47322             arg4,
47323             arg5,
47324             arg6,
47325             arg7,
47326             arg8,
47327             arg9,
47328             arg10,
47329             arg11,
47330             arg12,
47331             arg13,
47332             arg14,
47333             arg15,
47334             arg16,
47335             arg17,
47336             arg18,
47337             arg19,
47338             arg20,
47339             arg21,
47340             arg22,
47341             arg23,
47342             arg24,
47343             arg25,
47344             arg26,
47345             arg27,
47346             arg28,
47347             arg29,
47348             arg30,
47349             arg31,
47350             arg32,
47351             arg33,
47352             arg34,
47353             arg35,
47354             arg36,
47355             arg37,
47356             arg38,
47357             arg39,
47358             arg40,
47359             arg41,
47360             arg42,
47361             arg43,
47362             arg44,
47363             arg45,
47364             arg46,
47365             arg47,
47366             arg48,
47367             arg49,
47368             arg50,
47369             arg51,
47370             arg52,
47371             arg53,
47372             arg54,
47373             arg55,
47374             arg56,
47375             arg57,
47376             arg58,
47377             arg59,
47378             arg60,
47379             arg61,
47380             arg62,
47381             arg63,
47382             arg64,
47383             arg65,
47384             arg66,
47385             arg67,
47386             arg68,
47387             arg69,
47388             arg70,
47389             arg71,
47390             arg72,
47391             arg73,
47392             arg74,
47393             arg75,
47394             arg76,
47395             arg77,
47396             arg78,
47397             arg79,
47398             arg80,
47399             arg81,
47400             arg82,
47401             arg83,
47402             arg84,
47403             arg85,
47404             arg86,
47405             arg87,
47406             arg88);
47407     }
47408 
47409     operator type_ ()    
47410     {
47411         return type_(*this);
47412     }
47413 
47414 };
47415 
47416 template<
47417     typename T0,
47418     typename T1,
47419     typename T2,
47420     typename T3,
47421     typename T4,
47422     typename T5,
47423     typename T6,
47424     typename T7,
47425     typename T8,
47426     typename T9,
47427     typename T10,
47428     typename T11,
47429     typename T12,
47430     typename T13,
47431     typename T14,
47432     typename T15,
47433     typename T16,
47434     typename T17,
47435     typename T18,
47436     typename T19,
47437     typename T20,
47438     typename T21,
47439     typename T22,
47440     typename T23,
47441     typename T24,
47442     typename T25,
47443     typename T26,
47444     typename T27,
47445     typename T28,
47446     typename T29,
47447     typename T30,
47448     typename T31,
47449     typename T32,
47450     typename T33,
47451     typename T34,
47452     typename T35,
47453     typename T36,
47454     typename T37,
47455     typename T38,
47456     typename T39,
47457     typename T40,
47458     typename T41,
47459     typename T42,
47460     typename T43,
47461     typename T44,
47462     typename T45,
47463     typename T46,
47464     typename T47,
47465     typename T48,
47466     typename T49,
47467     typename T50,
47468     typename T51,
47469     typename T52,
47470     typename T53,
47471     typename T54,
47472     typename T55,
47473     typename T56,
47474     typename T57,
47475     typename T58,
47476     typename T59,
47477     typename T60,
47478     typename T61,
47479     typename T62,
47480     typename T63,
47481     typename T64,
47482     typename T65,
47483     typename T66,
47484     typename T67,
47485     typename T68,
47486     typename T69,
47487     typename T70,
47488     typename T71,
47489     typename T72,
47490     typename T73,
47491     typename T74,
47492     typename T75,
47493     typename T76,
47494     typename T77,
47495     typename T78,
47496     typename T79,
47497     typename T80,
47498     typename T81,
47499     typename T82,
47500     typename T83,
47501     typename T84,
47502     typename T85,
47503     typename T86,
47504     typename T87,
47505     typename T88,
47506     typename T89>
47507 struct functionImplementation_<
47508     T0,
47509     T1,
47510     T2,
47511     T3,
47512     T4,
47513     T5,
47514     T6,
47515     T7,
47516     T8,
47517     T9,
47518     T10,
47519     T11,
47520     T12,
47521     T13,
47522     T14,
47523     T15,
47524     T16,
47525     T17,
47526     T18,
47527     T19,
47528     T20,
47529     T21,
47530     T22,
47531     T23,
47532     T24,
47533     T25,
47534     T26,
47535     T27,
47536     T28,
47537     T29,
47538     T30,
47539     T31,
47540     T32,
47541     T33,
47542     T34,
47543     T35,
47544     T36,
47545     T37,
47546     T38,
47547     T39,
47548     T40,
47549     T41,
47550     T42,
47551     T43,
47552     T44,
47553     T45,
47554     T46,
47555     T47,
47556     T48,
47557     T49,
47558     T50,
47559     T51,
47560     T52,
47561     T53,
47562     T54,
47563     T55,
47564     T56,
47565     T57,
47566     T58,
47567     T59,
47568     T60,
47569     T61,
47570     T62,
47571     T63,
47572     T64,
47573     T65,
47574     T66,
47575     T67,
47576     T68,
47577     T69,
47578     T70,
47579     T71,
47580     T72,
47581     T73,
47582     T74,
47583     T75,
47584     T76,
47585     T77,
47586     T78,
47587     T79,
47588     T80,
47589     T81,
47590     T82,
47591     T83,
47592     T84,
47593     T85,
47594     T86,
47595     T87,
47596     T88,
47597     T89,
47598     NullType,
47599     NullType,
47600     NullType,
47601     NullType,
47602     NullType,
47603     NullType,
47604     NullType,
47605     NullType,
47606     NullType,
47607     NullType,
47608     NullType,
47609     NullType,
47610     NullType,
47611     NullType,
47612     NullType,
47613     NullType,
47614     NullType,
47615     NullType,
47616     NullType,
47617     NullType,
47618     NullType,
47619     NullType,
47620     NullType,
47621     NullType,
47622     NullType,
47623     NullType,
47624     NullType,
47625     NullType,
47626     NullType,
47627     NullType,
47628     NullType,
47629     NullType,
47630     NullType,
47631     NullType,
47632     NullType,
47633     NullType,
47634     NullType,
47635     NullType>
47636 {
47637     typedef detail::KernelFunctorGlobal<
47638         T0,
47639         T1,
47640         T2,
47641         T3,
47642         T4,
47643         T5,
47644         T6,
47645         T7,
47646         T8,
47647         T9,
47648         T10,
47649         T11,
47650         T12,
47651         T13,
47652         T14,
47653         T15,
47654         T16,
47655         T17,
47656         T18,
47657         T19,
47658         T20,
47659         T21,
47660         T22,
47661         T23,
47662         T24,
47663         T25,
47664         T26,
47665         T27,
47666         T28,
47667         T29,
47668         T30,
47669         T31,
47670         T32,
47671         T33,
47672         T34,
47673         T35,
47674         T36,
47675         T37,
47676         T38,
47677         T39,
47678         T40,
47679         T41,
47680         T42,
47681         T43,
47682         T44,
47683         T45,
47684         T46,
47685         T47,
47686         T48,
47687         T49,
47688         T50,
47689         T51,
47690         T52,
47691         T53,
47692         T54,
47693         T55,
47694         T56,
47695         T57,
47696         T58,
47697         T59,
47698         T60,
47699         T61,
47700         T62,
47701         T63,
47702         T64,
47703         T65,
47704         T66,
47705         T67,
47706         T68,
47707         T69,
47708         T70,
47709         T71,
47710         T72,
47711         T73,
47712         T74,
47713         T75,
47714         T76,
47715         T77,
47716         T78,
47717         T79,
47718         T80,
47719         T81,
47720         T82,
47721         T83,
47722         T84,
47723         T85,
47724         T86,
47725         T87,
47726         T88,
47727         T89,
47728         NullType,
47729         NullType,
47730         NullType,
47731         NullType,
47732         NullType,
47733         NullType,
47734         NullType,
47735         NullType,
47736         NullType,
47737         NullType,
47738         NullType,
47739         NullType,
47740         NullType,
47741         NullType,
47742         NullType,
47743         NullType,
47744         NullType,
47745         NullType,
47746         NullType,
47747         NullType,
47748         NullType,
47749         NullType,
47750         NullType,
47751         NullType,
47752         NullType,
47753         NullType,
47754         NullType,
47755         NullType,
47756         NullType,
47757         NullType,
47758         NullType,
47759         NullType,
47760         NullType,
47761         NullType,
47762         NullType,
47763         NullType,
47764         NullType,
47765         NullType> FunctorType;
47766 
47767     FunctorType functor_;
47768 
47769     functionImplementation_(const FunctorType &functor) :
47770         functor_(functor)
47771     {
47772     }
47773         
47774     typedef std::tr1::function<Event (
47775         const EnqueueArgs&,
47776         T0,
47777         T1,
47778         T2,
47779         T3,
47780         T4,
47781         T5,
47782         T6,
47783         T7,
47784         T8,
47785         T9,
47786         T10,
47787         T11,
47788         T12,
47789         T13,
47790         T14,
47791         T15,
47792         T16,
47793         T17,
47794         T18,
47795         T19,
47796         T20,
47797         T21,
47798         T22,
47799         T23,
47800         T24,
47801         T25,
47802         T26,
47803         T27,
47804         T28,
47805         T29,
47806         T30,
47807         T31,
47808         T32,
47809         T33,
47810         T34,
47811         T35,
47812         T36,
47813         T37,
47814         T38,
47815         T39,
47816         T40,
47817         T41,
47818         T42,
47819         T43,
47820         T44,
47821         T45,
47822         T46,
47823         T47,
47824         T48,
47825         T49,
47826         T50,
47827         T51,
47828         T52,
47829         T53,
47830         T54,
47831         T55,
47832         T56,
47833         T57,
47834         T58,
47835         T59,
47836         T60,
47837         T61,
47838         T62,
47839         T63,
47840         T64,
47841         T65,
47842         T66,
47843         T67,
47844         T68,
47845         T69,
47846         T70,
47847         T71,
47848         T72,
47849         T73,
47850         T74,
47851         T75,
47852         T76,
47853         T77,
47854         T78,
47855         T79,
47856         T80,
47857         T81,
47858         T82,
47859         T83,
47860         T84,
47861         T85,
47862         T86,
47863         T87,
47864         T88,
47865         T89)> type_;
47866 
47867     Event operator()(const EnqueueArgs& enqueueArgs,
47868         T0 arg0,
47869         T1 arg1,
47870         T2 arg2,
47871         T3 arg3,
47872         T4 arg4,
47873         T5 arg5,
47874         T6 arg6,
47875         T7 arg7,
47876         T8 arg8,
47877         T9 arg9,
47878         T10 arg10,
47879         T11 arg11,
47880         T12 arg12,
47881         T13 arg13,
47882         T14 arg14,
47883         T15 arg15,
47884         T16 arg16,
47885         T17 arg17,
47886         T18 arg18,
47887         T19 arg19,
47888         T20 arg20,
47889         T21 arg21,
47890         T22 arg22,
47891         T23 arg23,
47892         T24 arg24,
47893         T25 arg25,
47894         T26 arg26,
47895         T27 arg27,
47896         T28 arg28,
47897         T29 arg29,
47898         T30 arg30,
47899         T31 arg31,
47900         T32 arg32,
47901         T33 arg33,
47902         T34 arg34,
47903         T35 arg35,
47904         T36 arg36,
47905         T37 arg37,
47906         T38 arg38,
47907         T39 arg39,
47908         T40 arg40,
47909         T41 arg41,
47910         T42 arg42,
47911         T43 arg43,
47912         T44 arg44,
47913         T45 arg45,
47914         T46 arg46,
47915         T47 arg47,
47916         T48 arg48,
47917         T49 arg49,
47918         T50 arg50,
47919         T51 arg51,
47920         T52 arg52,
47921         T53 arg53,
47922         T54 arg54,
47923         T55 arg55,
47924         T56 arg56,
47925         T57 arg57,
47926         T58 arg58,
47927         T59 arg59,
47928         T60 arg60,
47929         T61 arg61,
47930         T62 arg62,
47931         T63 arg63,
47932         T64 arg64,
47933         T65 arg65,
47934         T66 arg66,
47935         T67 arg67,
47936         T68 arg68,
47937         T69 arg69,
47938         T70 arg70,
47939         T71 arg71,
47940         T72 arg72,
47941         T73 arg73,
47942         T74 arg74,
47943         T75 arg75,
47944         T76 arg76,
47945         T77 arg77,
47946         T78 arg78,
47947         T79 arg79,
47948         T80 arg80,
47949         T81 arg81,
47950         T82 arg82,
47951         T83 arg83,
47952         T84 arg84,
47953         T85 arg85,
47954         T86 arg86,
47955         T87 arg87,
47956         T88 arg88,
47957         T89 arg89)
47958     {
47959         return functor_(
47960             enqueueArgs,
47961             arg0,
47962             arg1,
47963             arg2,
47964             arg3,
47965             arg4,
47966             arg5,
47967             arg6,
47968             arg7,
47969             arg8,
47970             arg9,
47971             arg10,
47972             arg11,
47973             arg12,
47974             arg13,
47975             arg14,
47976             arg15,
47977             arg16,
47978             arg17,
47979             arg18,
47980             arg19,
47981             arg20,
47982             arg21,
47983             arg22,
47984             arg23,
47985             arg24,
47986             arg25,
47987             arg26,
47988             arg27,
47989             arg28,
47990             arg29,
47991             arg30,
47992             arg31,
47993             arg32,
47994             arg33,
47995             arg34,
47996             arg35,
47997             arg36,
47998             arg37,
47999             arg38,
48000             arg39,
48001             arg40,
48002             arg41,
48003             arg42,
48004             arg43,
48005             arg44,
48006             arg45,
48007             arg46,
48008             arg47,
48009             arg48,
48010             arg49,
48011             arg50,
48012             arg51,
48013             arg52,
48014             arg53,
48015             arg54,
48016             arg55,
48017             arg56,
48018             arg57,
48019             arg58,
48020             arg59,
48021             arg60,
48022             arg61,
48023             arg62,
48024             arg63,
48025             arg64,
48026             arg65,
48027             arg66,
48028             arg67,
48029             arg68,
48030             arg69,
48031             arg70,
48032             arg71,
48033             arg72,
48034             arg73,
48035             arg74,
48036             arg75,
48037             arg76,
48038             arg77,
48039             arg78,
48040             arg79,
48041             arg80,
48042             arg81,
48043             arg82,
48044             arg83,
48045             arg84,
48046             arg85,
48047             arg86,
48048             arg87,
48049             arg88,
48050             arg89);
48051     }
48052 
48053     operator type_ ()    
48054     {
48055         return type_(*this);
48056     }
48057 
48058 };
48059 
48060 template<
48061     typename T0,
48062     typename T1,
48063     typename T2,
48064     typename T3,
48065     typename T4,
48066     typename T5,
48067     typename T6,
48068     typename T7,
48069     typename T8,
48070     typename T9,
48071     typename T10,
48072     typename T11,
48073     typename T12,
48074     typename T13,
48075     typename T14,
48076     typename T15,
48077     typename T16,
48078     typename T17,
48079     typename T18,
48080     typename T19,
48081     typename T20,
48082     typename T21,
48083     typename T22,
48084     typename T23,
48085     typename T24,
48086     typename T25,
48087     typename T26,
48088     typename T27,
48089     typename T28,
48090     typename T29,
48091     typename T30,
48092     typename T31,
48093     typename T32,
48094     typename T33,
48095     typename T34,
48096     typename T35,
48097     typename T36,
48098     typename T37,
48099     typename T38,
48100     typename T39,
48101     typename T40,
48102     typename T41,
48103     typename T42,
48104     typename T43,
48105     typename T44,
48106     typename T45,
48107     typename T46,
48108     typename T47,
48109     typename T48,
48110     typename T49,
48111     typename T50,
48112     typename T51,
48113     typename T52,
48114     typename T53,
48115     typename T54,
48116     typename T55,
48117     typename T56,
48118     typename T57,
48119     typename T58,
48120     typename T59,
48121     typename T60,
48122     typename T61,
48123     typename T62,
48124     typename T63,
48125     typename T64,
48126     typename T65,
48127     typename T66,
48128     typename T67,
48129     typename T68,
48130     typename T69,
48131     typename T70,
48132     typename T71,
48133     typename T72,
48134     typename T73,
48135     typename T74,
48136     typename T75,
48137     typename T76,
48138     typename T77,
48139     typename T78,
48140     typename T79,
48141     typename T80,
48142     typename T81,
48143     typename T82,
48144     typename T83,
48145     typename T84,
48146     typename T85,
48147     typename T86,
48148     typename T87,
48149     typename T88,
48150     typename T89,
48151     typename T90>
48152 struct functionImplementation_<
48153     T0,
48154     T1,
48155     T2,
48156     T3,
48157     T4,
48158     T5,
48159     T6,
48160     T7,
48161     T8,
48162     T9,
48163     T10,
48164     T11,
48165     T12,
48166     T13,
48167     T14,
48168     T15,
48169     T16,
48170     T17,
48171     T18,
48172     T19,
48173     T20,
48174     T21,
48175     T22,
48176     T23,
48177     T24,
48178     T25,
48179     T26,
48180     T27,
48181     T28,
48182     T29,
48183     T30,
48184     T31,
48185     T32,
48186     T33,
48187     T34,
48188     T35,
48189     T36,
48190     T37,
48191     T38,
48192     T39,
48193     T40,
48194     T41,
48195     T42,
48196     T43,
48197     T44,
48198     T45,
48199     T46,
48200     T47,
48201     T48,
48202     T49,
48203     T50,
48204     T51,
48205     T52,
48206     T53,
48207     T54,
48208     T55,
48209     T56,
48210     T57,
48211     T58,
48212     T59,
48213     T60,
48214     T61,
48215     T62,
48216     T63,
48217     T64,
48218     T65,
48219     T66,
48220     T67,
48221     T68,
48222     T69,
48223     T70,
48224     T71,
48225     T72,
48226     T73,
48227     T74,
48228     T75,
48229     T76,
48230     T77,
48231     T78,
48232     T79,
48233     T80,
48234     T81,
48235     T82,
48236     T83,
48237     T84,
48238     T85,
48239     T86,
48240     T87,
48241     T88,
48242     T89,
48243     T90,
48244     NullType,
48245     NullType,
48246     NullType,
48247     NullType,
48248     NullType,
48249     NullType,
48250     NullType,
48251     NullType,
48252     NullType,
48253     NullType,
48254     NullType,
48255     NullType,
48256     NullType,
48257     NullType,
48258     NullType,
48259     NullType,
48260     NullType,
48261     NullType,
48262     NullType,
48263     NullType,
48264     NullType,
48265     NullType,
48266     NullType,
48267     NullType,
48268     NullType,
48269     NullType,
48270     NullType,
48271     NullType,
48272     NullType,
48273     NullType,
48274     NullType,
48275     NullType,
48276     NullType,
48277     NullType,
48278     NullType,
48279     NullType,
48280     NullType>
48281 {
48282     typedef detail::KernelFunctorGlobal<
48283         T0,
48284         T1,
48285         T2,
48286         T3,
48287         T4,
48288         T5,
48289         T6,
48290         T7,
48291         T8,
48292         T9,
48293         T10,
48294         T11,
48295         T12,
48296         T13,
48297         T14,
48298         T15,
48299         T16,
48300         T17,
48301         T18,
48302         T19,
48303         T20,
48304         T21,
48305         T22,
48306         T23,
48307         T24,
48308         T25,
48309         T26,
48310         T27,
48311         T28,
48312         T29,
48313         T30,
48314         T31,
48315         T32,
48316         T33,
48317         T34,
48318         T35,
48319         T36,
48320         T37,
48321         T38,
48322         T39,
48323         T40,
48324         T41,
48325         T42,
48326         T43,
48327         T44,
48328         T45,
48329         T46,
48330         T47,
48331         T48,
48332         T49,
48333         T50,
48334         T51,
48335         T52,
48336         T53,
48337         T54,
48338         T55,
48339         T56,
48340         T57,
48341         T58,
48342         T59,
48343         T60,
48344         T61,
48345         T62,
48346         T63,
48347         T64,
48348         T65,
48349         T66,
48350         T67,
48351         T68,
48352         T69,
48353         T70,
48354         T71,
48355         T72,
48356         T73,
48357         T74,
48358         T75,
48359         T76,
48360         T77,
48361         T78,
48362         T79,
48363         T80,
48364         T81,
48365         T82,
48366         T83,
48367         T84,
48368         T85,
48369         T86,
48370         T87,
48371         T88,
48372         T89,
48373         T90,
48374         NullType,
48375         NullType,
48376         NullType,
48377         NullType,
48378         NullType,
48379         NullType,
48380         NullType,
48381         NullType,
48382         NullType,
48383         NullType,
48384         NullType,
48385         NullType,
48386         NullType,
48387         NullType,
48388         NullType,
48389         NullType,
48390         NullType,
48391         NullType,
48392         NullType,
48393         NullType,
48394         NullType,
48395         NullType,
48396         NullType,
48397         NullType,
48398         NullType,
48399         NullType,
48400         NullType,
48401         NullType,
48402         NullType,
48403         NullType,
48404         NullType,
48405         NullType,
48406         NullType,
48407         NullType,
48408         NullType,
48409         NullType,
48410         NullType> FunctorType;
48411 
48412     FunctorType functor_;
48413 
48414     functionImplementation_(const FunctorType &functor) :
48415         functor_(functor)
48416     {
48417     }
48418         
48419     typedef std::tr1::function<Event (
48420         const EnqueueArgs&,
48421         T0,
48422         T1,
48423         T2,
48424         T3,
48425         T4,
48426         T5,
48427         T6,
48428         T7,
48429         T8,
48430         T9,
48431         T10,
48432         T11,
48433         T12,
48434         T13,
48435         T14,
48436         T15,
48437         T16,
48438         T17,
48439         T18,
48440         T19,
48441         T20,
48442         T21,
48443         T22,
48444         T23,
48445         T24,
48446         T25,
48447         T26,
48448         T27,
48449         T28,
48450         T29,
48451         T30,
48452         T31,
48453         T32,
48454         T33,
48455         T34,
48456         T35,
48457         T36,
48458         T37,
48459         T38,
48460         T39,
48461         T40,
48462         T41,
48463         T42,
48464         T43,
48465         T44,
48466         T45,
48467         T46,
48468         T47,
48469         T48,
48470         T49,
48471         T50,
48472         T51,
48473         T52,
48474         T53,
48475         T54,
48476         T55,
48477         T56,
48478         T57,
48479         T58,
48480         T59,
48481         T60,
48482         T61,
48483         T62,
48484         T63,
48485         T64,
48486         T65,
48487         T66,
48488         T67,
48489         T68,
48490         T69,
48491         T70,
48492         T71,
48493         T72,
48494         T73,
48495         T74,
48496         T75,
48497         T76,
48498         T77,
48499         T78,
48500         T79,
48501         T80,
48502         T81,
48503         T82,
48504         T83,
48505         T84,
48506         T85,
48507         T86,
48508         T87,
48509         T88,
48510         T89,
48511         T90)> type_;
48512 
48513     Event operator()(const EnqueueArgs& enqueueArgs,
48514         T0 arg0,
48515         T1 arg1,
48516         T2 arg2,
48517         T3 arg3,
48518         T4 arg4,
48519         T5 arg5,
48520         T6 arg6,
48521         T7 arg7,
48522         T8 arg8,
48523         T9 arg9,
48524         T10 arg10,
48525         T11 arg11,
48526         T12 arg12,
48527         T13 arg13,
48528         T14 arg14,
48529         T15 arg15,
48530         T16 arg16,
48531         T17 arg17,
48532         T18 arg18,
48533         T19 arg19,
48534         T20 arg20,
48535         T21 arg21,
48536         T22 arg22,
48537         T23 arg23,
48538         T24 arg24,
48539         T25 arg25,
48540         T26 arg26,
48541         T27 arg27,
48542         T28 arg28,
48543         T29 arg29,
48544         T30 arg30,
48545         T31 arg31,
48546         T32 arg32,
48547         T33 arg33,
48548         T34 arg34,
48549         T35 arg35,
48550         T36 arg36,
48551         T37 arg37,
48552         T38 arg38,
48553         T39 arg39,
48554         T40 arg40,
48555         T41 arg41,
48556         T42 arg42,
48557         T43 arg43,
48558         T44 arg44,
48559         T45 arg45,
48560         T46 arg46,
48561         T47 arg47,
48562         T48 arg48,
48563         T49 arg49,
48564         T50 arg50,
48565         T51 arg51,
48566         T52 arg52,
48567         T53 arg53,
48568         T54 arg54,
48569         T55 arg55,
48570         T56 arg56,
48571         T57 arg57,
48572         T58 arg58,
48573         T59 arg59,
48574         T60 arg60,
48575         T61 arg61,
48576         T62 arg62,
48577         T63 arg63,
48578         T64 arg64,
48579         T65 arg65,
48580         T66 arg66,
48581         T67 arg67,
48582         T68 arg68,
48583         T69 arg69,
48584         T70 arg70,
48585         T71 arg71,
48586         T72 arg72,
48587         T73 arg73,
48588         T74 arg74,
48589         T75 arg75,
48590         T76 arg76,
48591         T77 arg77,
48592         T78 arg78,
48593         T79 arg79,
48594         T80 arg80,
48595         T81 arg81,
48596         T82 arg82,
48597         T83 arg83,
48598         T84 arg84,
48599         T85 arg85,
48600         T86 arg86,
48601         T87 arg87,
48602         T88 arg88,
48603         T89 arg89,
48604         T90 arg90)
48605     {
48606         return functor_(
48607             enqueueArgs,
48608             arg0,
48609             arg1,
48610             arg2,
48611             arg3,
48612             arg4,
48613             arg5,
48614             arg6,
48615             arg7,
48616             arg8,
48617             arg9,
48618             arg10,
48619             arg11,
48620             arg12,
48621             arg13,
48622             arg14,
48623             arg15,
48624             arg16,
48625             arg17,
48626             arg18,
48627             arg19,
48628             arg20,
48629             arg21,
48630             arg22,
48631             arg23,
48632             arg24,
48633             arg25,
48634             arg26,
48635             arg27,
48636             arg28,
48637             arg29,
48638             arg30,
48639             arg31,
48640             arg32,
48641             arg33,
48642             arg34,
48643             arg35,
48644             arg36,
48645             arg37,
48646             arg38,
48647             arg39,
48648             arg40,
48649             arg41,
48650             arg42,
48651             arg43,
48652             arg44,
48653             arg45,
48654             arg46,
48655             arg47,
48656             arg48,
48657             arg49,
48658             arg50,
48659             arg51,
48660             arg52,
48661             arg53,
48662             arg54,
48663             arg55,
48664             arg56,
48665             arg57,
48666             arg58,
48667             arg59,
48668             arg60,
48669             arg61,
48670             arg62,
48671             arg63,
48672             arg64,
48673             arg65,
48674             arg66,
48675             arg67,
48676             arg68,
48677             arg69,
48678             arg70,
48679             arg71,
48680             arg72,
48681             arg73,
48682             arg74,
48683             arg75,
48684             arg76,
48685             arg77,
48686             arg78,
48687             arg79,
48688             arg80,
48689             arg81,
48690             arg82,
48691             arg83,
48692             arg84,
48693             arg85,
48694             arg86,
48695             arg87,
48696             arg88,
48697             arg89,
48698             arg90);
48699     }
48700 
48701     operator type_ ()    
48702     {
48703         return type_(*this);
48704     }
48705 
48706 };
48707 
48708 template<
48709     typename T0,
48710     typename T1,
48711     typename T2,
48712     typename T3,
48713     typename T4,
48714     typename T5,
48715     typename T6,
48716     typename T7,
48717     typename T8,
48718     typename T9,
48719     typename T10,
48720     typename T11,
48721     typename T12,
48722     typename T13,
48723     typename T14,
48724     typename T15,
48725     typename T16,
48726     typename T17,
48727     typename T18,
48728     typename T19,
48729     typename T20,
48730     typename T21,
48731     typename T22,
48732     typename T23,
48733     typename T24,
48734     typename T25,
48735     typename T26,
48736     typename T27,
48737     typename T28,
48738     typename T29,
48739     typename T30,
48740     typename T31,
48741     typename T32,
48742     typename T33,
48743     typename T34,
48744     typename T35,
48745     typename T36,
48746     typename T37,
48747     typename T38,
48748     typename T39,
48749     typename T40,
48750     typename T41,
48751     typename T42,
48752     typename T43,
48753     typename T44,
48754     typename T45,
48755     typename T46,
48756     typename T47,
48757     typename T48,
48758     typename T49,
48759     typename T50,
48760     typename T51,
48761     typename T52,
48762     typename T53,
48763     typename T54,
48764     typename T55,
48765     typename T56,
48766     typename T57,
48767     typename T58,
48768     typename T59,
48769     typename T60,
48770     typename T61,
48771     typename T62,
48772     typename T63,
48773     typename T64,
48774     typename T65,
48775     typename T66,
48776     typename T67,
48777     typename T68,
48778     typename T69,
48779     typename T70,
48780     typename T71,
48781     typename T72,
48782     typename T73,
48783     typename T74,
48784     typename T75,
48785     typename T76,
48786     typename T77,
48787     typename T78,
48788     typename T79,
48789     typename T80,
48790     typename T81,
48791     typename T82,
48792     typename T83,
48793     typename T84,
48794     typename T85,
48795     typename T86,
48796     typename T87,
48797     typename T88,
48798     typename T89,
48799     typename T90,
48800     typename T91>
48801 struct functionImplementation_<
48802     T0,
48803     T1,
48804     T2,
48805     T3,
48806     T4,
48807     T5,
48808     T6,
48809     T7,
48810     T8,
48811     T9,
48812     T10,
48813     T11,
48814     T12,
48815     T13,
48816     T14,
48817     T15,
48818     T16,
48819     T17,
48820     T18,
48821     T19,
48822     T20,
48823     T21,
48824     T22,
48825     T23,
48826     T24,
48827     T25,
48828     T26,
48829     T27,
48830     T28,
48831     T29,
48832     T30,
48833     T31,
48834     T32,
48835     T33,
48836     T34,
48837     T35,
48838     T36,
48839     T37,
48840     T38,
48841     T39,
48842     T40,
48843     T41,
48844     T42,
48845     T43,
48846     T44,
48847     T45,
48848     T46,
48849     T47,
48850     T48,
48851     T49,
48852     T50,
48853     T51,
48854     T52,
48855     T53,
48856     T54,
48857     T55,
48858     T56,
48859     T57,
48860     T58,
48861     T59,
48862     T60,
48863     T61,
48864     T62,
48865     T63,
48866     T64,
48867     T65,
48868     T66,
48869     T67,
48870     T68,
48871     T69,
48872     T70,
48873     T71,
48874     T72,
48875     T73,
48876     T74,
48877     T75,
48878     T76,
48879     T77,
48880     T78,
48881     T79,
48882     T80,
48883     T81,
48884     T82,
48885     T83,
48886     T84,
48887     T85,
48888     T86,
48889     T87,
48890     T88,
48891     T89,
48892     T90,
48893     T91,
48894     NullType,
48895     NullType,
48896     NullType,
48897     NullType,
48898     NullType,
48899     NullType,
48900     NullType,
48901     NullType,
48902     NullType,
48903     NullType,
48904     NullType,
48905     NullType,
48906     NullType,
48907     NullType,
48908     NullType,
48909     NullType,
48910     NullType,
48911     NullType,
48912     NullType,
48913     NullType,
48914     NullType,
48915     NullType,
48916     NullType,
48917     NullType,
48918     NullType,
48919     NullType,
48920     NullType,
48921     NullType,
48922     NullType,
48923     NullType,
48924     NullType,
48925     NullType,
48926     NullType,
48927     NullType,
48928     NullType,
48929     NullType>
48930 {
48931     typedef detail::KernelFunctorGlobal<
48932         T0,
48933         T1,
48934         T2,
48935         T3,
48936         T4,
48937         T5,
48938         T6,
48939         T7,
48940         T8,
48941         T9,
48942         T10,
48943         T11,
48944         T12,
48945         T13,
48946         T14,
48947         T15,
48948         T16,
48949         T17,
48950         T18,
48951         T19,
48952         T20,
48953         T21,
48954         T22,
48955         T23,
48956         T24,
48957         T25,
48958         T26,
48959         T27,
48960         T28,
48961         T29,
48962         T30,
48963         T31,
48964         T32,
48965         T33,
48966         T34,
48967         T35,
48968         T36,
48969         T37,
48970         T38,
48971         T39,
48972         T40,
48973         T41,
48974         T42,
48975         T43,
48976         T44,
48977         T45,
48978         T46,
48979         T47,
48980         T48,
48981         T49,
48982         T50,
48983         T51,
48984         T52,
48985         T53,
48986         T54,
48987         T55,
48988         T56,
48989         T57,
48990         T58,
48991         T59,
48992         T60,
48993         T61,
48994         T62,
48995         T63,
48996         T64,
48997         T65,
48998         T66,
48999         T67,
49000         T68,
49001         T69,
49002         T70,
49003         T71,
49004         T72,
49005         T73,
49006         T74,
49007         T75,
49008         T76,
49009         T77,
49010         T78,
49011         T79,
49012         T80,
49013         T81,
49014         T82,
49015         T83,
49016         T84,
49017         T85,
49018         T86,
49019         T87,
49020         T88,
49021         T89,
49022         T90,
49023         T91,
49024         NullType,
49025         NullType,
49026         NullType,
49027         NullType,
49028         NullType,
49029         NullType,
49030         NullType,
49031         NullType,
49032         NullType,
49033         NullType,
49034         NullType,
49035         NullType,
49036         NullType,
49037         NullType,
49038         NullType,
49039         NullType,
49040         NullType,
49041         NullType,
49042         NullType,
49043         NullType,
49044         NullType,
49045         NullType,
49046         NullType,
49047         NullType,
49048         NullType,
49049         NullType,
49050         NullType,
49051         NullType,
49052         NullType,
49053         NullType,
49054         NullType,
49055         NullType,
49056         NullType,
49057         NullType,
49058         NullType,
49059         NullType> FunctorType;
49060 
49061     FunctorType functor_;
49062 
49063     functionImplementation_(const FunctorType &functor) :
49064         functor_(functor)
49065     {
49066     }
49067         
49068     typedef std::tr1::function<Event (
49069         const EnqueueArgs&,
49070         T0,
49071         T1,
49072         T2,
49073         T3,
49074         T4,
49075         T5,
49076         T6,
49077         T7,
49078         T8,
49079         T9,
49080         T10,
49081         T11,
49082         T12,
49083         T13,
49084         T14,
49085         T15,
49086         T16,
49087         T17,
49088         T18,
49089         T19,
49090         T20,
49091         T21,
49092         T22,
49093         T23,
49094         T24,
49095         T25,
49096         T26,
49097         T27,
49098         T28,
49099         T29,
49100         T30,
49101         T31,
49102         T32,
49103         T33,
49104         T34,
49105         T35,
49106         T36,
49107         T37,
49108         T38,
49109         T39,
49110         T40,
49111         T41,
49112         T42,
49113         T43,
49114         T44,
49115         T45,
49116         T46,
49117         T47,
49118         T48,
49119         T49,
49120         T50,
49121         T51,
49122         T52,
49123         T53,
49124         T54,
49125         T55,
49126         T56,
49127         T57,
49128         T58,
49129         T59,
49130         T60,
49131         T61,
49132         T62,
49133         T63,
49134         T64,
49135         T65,
49136         T66,
49137         T67,
49138         T68,
49139         T69,
49140         T70,
49141         T71,
49142         T72,
49143         T73,
49144         T74,
49145         T75,
49146         T76,
49147         T77,
49148         T78,
49149         T79,
49150         T80,
49151         T81,
49152         T82,
49153         T83,
49154         T84,
49155         T85,
49156         T86,
49157         T87,
49158         T88,
49159         T89,
49160         T90,
49161         T91)> type_;
49162 
49163     Event operator()(const EnqueueArgs& enqueueArgs,
49164         T0 arg0,
49165         T1 arg1,
49166         T2 arg2,
49167         T3 arg3,
49168         T4 arg4,
49169         T5 arg5,
49170         T6 arg6,
49171         T7 arg7,
49172         T8 arg8,
49173         T9 arg9,
49174         T10 arg10,
49175         T11 arg11,
49176         T12 arg12,
49177         T13 arg13,
49178         T14 arg14,
49179         T15 arg15,
49180         T16 arg16,
49181         T17 arg17,
49182         T18 arg18,
49183         T19 arg19,
49184         T20 arg20,
49185         T21 arg21,
49186         T22 arg22,
49187         T23 arg23,
49188         T24 arg24,
49189         T25 arg25,
49190         T26 arg26,
49191         T27 arg27,
49192         T28 arg28,
49193         T29 arg29,
49194         T30 arg30,
49195         T31 arg31,
49196         T32 arg32,
49197         T33 arg33,
49198         T34 arg34,
49199         T35 arg35,
49200         T36 arg36,
49201         T37 arg37,
49202         T38 arg38,
49203         T39 arg39,
49204         T40 arg40,
49205         T41 arg41,
49206         T42 arg42,
49207         T43 arg43,
49208         T44 arg44,
49209         T45 arg45,
49210         T46 arg46,
49211         T47 arg47,
49212         T48 arg48,
49213         T49 arg49,
49214         T50 arg50,
49215         T51 arg51,
49216         T52 arg52,
49217         T53 arg53,
49218         T54 arg54,
49219         T55 arg55,
49220         T56 arg56,
49221         T57 arg57,
49222         T58 arg58,
49223         T59 arg59,
49224         T60 arg60,
49225         T61 arg61,
49226         T62 arg62,
49227         T63 arg63,
49228         T64 arg64,
49229         T65 arg65,
49230         T66 arg66,
49231         T67 arg67,
49232         T68 arg68,
49233         T69 arg69,
49234         T70 arg70,
49235         T71 arg71,
49236         T72 arg72,
49237         T73 arg73,
49238         T74 arg74,
49239         T75 arg75,
49240         T76 arg76,
49241         T77 arg77,
49242         T78 arg78,
49243         T79 arg79,
49244         T80 arg80,
49245         T81 arg81,
49246         T82 arg82,
49247         T83 arg83,
49248         T84 arg84,
49249         T85 arg85,
49250         T86 arg86,
49251         T87 arg87,
49252         T88 arg88,
49253         T89 arg89,
49254         T90 arg90,
49255         T91 arg91)
49256     {
49257         return functor_(
49258             enqueueArgs,
49259             arg0,
49260             arg1,
49261             arg2,
49262             arg3,
49263             arg4,
49264             arg5,
49265             arg6,
49266             arg7,
49267             arg8,
49268             arg9,
49269             arg10,
49270             arg11,
49271             arg12,
49272             arg13,
49273             arg14,
49274             arg15,
49275             arg16,
49276             arg17,
49277             arg18,
49278             arg19,
49279             arg20,
49280             arg21,
49281             arg22,
49282             arg23,
49283             arg24,
49284             arg25,
49285             arg26,
49286             arg27,
49287             arg28,
49288             arg29,
49289             arg30,
49290             arg31,
49291             arg32,
49292             arg33,
49293             arg34,
49294             arg35,
49295             arg36,
49296             arg37,
49297             arg38,
49298             arg39,
49299             arg40,
49300             arg41,
49301             arg42,
49302             arg43,
49303             arg44,
49304             arg45,
49305             arg46,
49306             arg47,
49307             arg48,
49308             arg49,
49309             arg50,
49310             arg51,
49311             arg52,
49312             arg53,
49313             arg54,
49314             arg55,
49315             arg56,
49316             arg57,
49317             arg58,
49318             arg59,
49319             arg60,
49320             arg61,
49321             arg62,
49322             arg63,
49323             arg64,
49324             arg65,
49325             arg66,
49326             arg67,
49327             arg68,
49328             arg69,
49329             arg70,
49330             arg71,
49331             arg72,
49332             arg73,
49333             arg74,
49334             arg75,
49335             arg76,
49336             arg77,
49337             arg78,
49338             arg79,
49339             arg80,
49340             arg81,
49341             arg82,
49342             arg83,
49343             arg84,
49344             arg85,
49345             arg86,
49346             arg87,
49347             arg88,
49348             arg89,
49349             arg90,
49350             arg91);
49351     }
49352 
49353     operator type_ ()    
49354     {
49355         return type_(*this);
49356     }
49357 
49358 };
49359 
49360 template<
49361     typename T0,
49362     typename T1,
49363     typename T2,
49364     typename T3,
49365     typename T4,
49366     typename T5,
49367     typename T6,
49368     typename T7,
49369     typename T8,
49370     typename T9,
49371     typename T10,
49372     typename T11,
49373     typename T12,
49374     typename T13,
49375     typename T14,
49376     typename T15,
49377     typename T16,
49378     typename T17,
49379     typename T18,
49380     typename T19,
49381     typename T20,
49382     typename T21,
49383     typename T22,
49384     typename T23,
49385     typename T24,
49386     typename T25,
49387     typename T26,
49388     typename T27,
49389     typename T28,
49390     typename T29,
49391     typename T30,
49392     typename T31,
49393     typename T32,
49394     typename T33,
49395     typename T34,
49396     typename T35,
49397     typename T36,
49398     typename T37,
49399     typename T38,
49400     typename T39,
49401     typename T40,
49402     typename T41,
49403     typename T42,
49404     typename T43,
49405     typename T44,
49406     typename T45,
49407     typename T46,
49408     typename T47,
49409     typename T48,
49410     typename T49,
49411     typename T50,
49412     typename T51,
49413     typename T52,
49414     typename T53,
49415     typename T54,
49416     typename T55,
49417     typename T56,
49418     typename T57,
49419     typename T58,
49420     typename T59,
49421     typename T60,
49422     typename T61,
49423     typename T62,
49424     typename T63,
49425     typename T64,
49426     typename T65,
49427     typename T66,
49428     typename T67,
49429     typename T68,
49430     typename T69,
49431     typename T70,
49432     typename T71,
49433     typename T72,
49434     typename T73,
49435     typename T74,
49436     typename T75,
49437     typename T76,
49438     typename T77,
49439     typename T78,
49440     typename T79,
49441     typename T80,
49442     typename T81,
49443     typename T82,
49444     typename T83,
49445     typename T84,
49446     typename T85,
49447     typename T86,
49448     typename T87,
49449     typename T88,
49450     typename T89,
49451     typename T90,
49452     typename T91,
49453     typename T92>
49454 struct functionImplementation_<
49455     T0,
49456     T1,
49457     T2,
49458     T3,
49459     T4,
49460     T5,
49461     T6,
49462     T7,
49463     T8,
49464     T9,
49465     T10,
49466     T11,
49467     T12,
49468     T13,
49469     T14,
49470     T15,
49471     T16,
49472     T17,
49473     T18,
49474     T19,
49475     T20,
49476     T21,
49477     T22,
49478     T23,
49479     T24,
49480     T25,
49481     T26,
49482     T27,
49483     T28,
49484     T29,
49485     T30,
49486     T31,
49487     T32,
49488     T33,
49489     T34,
49490     T35,
49491     T36,
49492     T37,
49493     T38,
49494     T39,
49495     T40,
49496     T41,
49497     T42,
49498     T43,
49499     T44,
49500     T45,
49501     T46,
49502     T47,
49503     T48,
49504     T49,
49505     T50,
49506     T51,
49507     T52,
49508     T53,
49509     T54,
49510     T55,
49511     T56,
49512     T57,
49513     T58,
49514     T59,
49515     T60,
49516     T61,
49517     T62,
49518     T63,
49519     T64,
49520     T65,
49521     T66,
49522     T67,
49523     T68,
49524     T69,
49525     T70,
49526     T71,
49527     T72,
49528     T73,
49529     T74,
49530     T75,
49531     T76,
49532     T77,
49533     T78,
49534     T79,
49535     T80,
49536     T81,
49537     T82,
49538     T83,
49539     T84,
49540     T85,
49541     T86,
49542     T87,
49543     T88,
49544     T89,
49545     T90,
49546     T91,
49547     T92,
49548     NullType,
49549     NullType,
49550     NullType,
49551     NullType,
49552     NullType,
49553     NullType,
49554     NullType,
49555     NullType,
49556     NullType,
49557     NullType,
49558     NullType,
49559     NullType,
49560     NullType,
49561     NullType,
49562     NullType,
49563     NullType,
49564     NullType,
49565     NullType,
49566     NullType,
49567     NullType,
49568     NullType,
49569     NullType,
49570     NullType,
49571     NullType,
49572     NullType,
49573     NullType,
49574     NullType,
49575     NullType,
49576     NullType,
49577     NullType,
49578     NullType,
49579     NullType,
49580     NullType,
49581     NullType,
49582     NullType>
49583 {
49584     typedef detail::KernelFunctorGlobal<
49585         T0,
49586         T1,
49587         T2,
49588         T3,
49589         T4,
49590         T5,
49591         T6,
49592         T7,
49593         T8,
49594         T9,
49595         T10,
49596         T11,
49597         T12,
49598         T13,
49599         T14,
49600         T15,
49601         T16,
49602         T17,
49603         T18,
49604         T19,
49605         T20,
49606         T21,
49607         T22,
49608         T23,
49609         T24,
49610         T25,
49611         T26,
49612         T27,
49613         T28,
49614         T29,
49615         T30,
49616         T31,
49617         T32,
49618         T33,
49619         T34,
49620         T35,
49621         T36,
49622         T37,
49623         T38,
49624         T39,
49625         T40,
49626         T41,
49627         T42,
49628         T43,
49629         T44,
49630         T45,
49631         T46,
49632         T47,
49633         T48,
49634         T49,
49635         T50,
49636         T51,
49637         T52,
49638         T53,
49639         T54,
49640         T55,
49641         T56,
49642         T57,
49643         T58,
49644         T59,
49645         T60,
49646         T61,
49647         T62,
49648         T63,
49649         T64,
49650         T65,
49651         T66,
49652         T67,
49653         T68,
49654         T69,
49655         T70,
49656         T71,
49657         T72,
49658         T73,
49659         T74,
49660         T75,
49661         T76,
49662         T77,
49663         T78,
49664         T79,
49665         T80,
49666         T81,
49667         T82,
49668         T83,
49669         T84,
49670         T85,
49671         T86,
49672         T87,
49673         T88,
49674         T89,
49675         T90,
49676         T91,
49677         T92,
49678         NullType,
49679         NullType,
49680         NullType,
49681         NullType,
49682         NullType,
49683         NullType,
49684         NullType,
49685         NullType,
49686         NullType,
49687         NullType,
49688         NullType,
49689         NullType,
49690         NullType,
49691         NullType,
49692         NullType,
49693         NullType,
49694         NullType,
49695         NullType,
49696         NullType,
49697         NullType,
49698         NullType,
49699         NullType,
49700         NullType,
49701         NullType,
49702         NullType,
49703         NullType,
49704         NullType,
49705         NullType,
49706         NullType,
49707         NullType,
49708         NullType,
49709         NullType,
49710         NullType,
49711         NullType,
49712         NullType> FunctorType;
49713 
49714     FunctorType functor_;
49715 
49716     functionImplementation_(const FunctorType &functor) :
49717         functor_(functor)
49718     {
49719     }
49720         
49721     typedef std::tr1::function<Event (
49722         const EnqueueArgs&,
49723         T0,
49724         T1,
49725         T2,
49726         T3,
49727         T4,
49728         T5,
49729         T6,
49730         T7,
49731         T8,
49732         T9,
49733         T10,
49734         T11,
49735         T12,
49736         T13,
49737         T14,
49738         T15,
49739         T16,
49740         T17,
49741         T18,
49742         T19,
49743         T20,
49744         T21,
49745         T22,
49746         T23,
49747         T24,
49748         T25,
49749         T26,
49750         T27,
49751         T28,
49752         T29,
49753         T30,
49754         T31,
49755         T32,
49756         T33,
49757         T34,
49758         T35,
49759         T36,
49760         T37,
49761         T38,
49762         T39,
49763         T40,
49764         T41,
49765         T42,
49766         T43,
49767         T44,
49768         T45,
49769         T46,
49770         T47,
49771         T48,
49772         T49,
49773         T50,
49774         T51,
49775         T52,
49776         T53,
49777         T54,
49778         T55,
49779         T56,
49780         T57,
49781         T58,
49782         T59,
49783         T60,
49784         T61,
49785         T62,
49786         T63,
49787         T64,
49788         T65,
49789         T66,
49790         T67,
49791         T68,
49792         T69,
49793         T70,
49794         T71,
49795         T72,
49796         T73,
49797         T74,
49798         T75,
49799         T76,
49800         T77,
49801         T78,
49802         T79,
49803         T80,
49804         T81,
49805         T82,
49806         T83,
49807         T84,
49808         T85,
49809         T86,
49810         T87,
49811         T88,
49812         T89,
49813         T90,
49814         T91,
49815         T92)> type_;
49816 
49817     Event operator()(const EnqueueArgs& enqueueArgs,
49818         T0 arg0,
49819         T1 arg1,
49820         T2 arg2,
49821         T3 arg3,
49822         T4 arg4,
49823         T5 arg5,
49824         T6 arg6,
49825         T7 arg7,
49826         T8 arg8,
49827         T9 arg9,
49828         T10 arg10,
49829         T11 arg11,
49830         T12 arg12,
49831         T13 arg13,
49832         T14 arg14,
49833         T15 arg15,
49834         T16 arg16,
49835         T17 arg17,
49836         T18 arg18,
49837         T19 arg19,
49838         T20 arg20,
49839         T21 arg21,
49840         T22 arg22,
49841         T23 arg23,
49842         T24 arg24,
49843         T25 arg25,
49844         T26 arg26,
49845         T27 arg27,
49846         T28 arg28,
49847         T29 arg29,
49848         T30 arg30,
49849         T31 arg31,
49850         T32 arg32,
49851         T33 arg33,
49852         T34 arg34,
49853         T35 arg35,
49854         T36 arg36,
49855         T37 arg37,
49856         T38 arg38,
49857         T39 arg39,
49858         T40 arg40,
49859         T41 arg41,
49860         T42 arg42,
49861         T43 arg43,
49862         T44 arg44,
49863         T45 arg45,
49864         T46 arg46,
49865         T47 arg47,
49866         T48 arg48,
49867         T49 arg49,
49868         T50 arg50,
49869         T51 arg51,
49870         T52 arg52,
49871         T53 arg53,
49872         T54 arg54,
49873         T55 arg55,
49874         T56 arg56,
49875         T57 arg57,
49876         T58 arg58,
49877         T59 arg59,
49878         T60 arg60,
49879         T61 arg61,
49880         T62 arg62,
49881         T63 arg63,
49882         T64 arg64,
49883         T65 arg65,
49884         T66 arg66,
49885         T67 arg67,
49886         T68 arg68,
49887         T69 arg69,
49888         T70 arg70,
49889         T71 arg71,
49890         T72 arg72,
49891         T73 arg73,
49892         T74 arg74,
49893         T75 arg75,
49894         T76 arg76,
49895         T77 arg77,
49896         T78 arg78,
49897         T79 arg79,
49898         T80 arg80,
49899         T81 arg81,
49900         T82 arg82,
49901         T83 arg83,
49902         T84 arg84,
49903         T85 arg85,
49904         T86 arg86,
49905         T87 arg87,
49906         T88 arg88,
49907         T89 arg89,
49908         T90 arg90,
49909         T91 arg91,
49910         T92 arg92)
49911     {
49912         return functor_(
49913             enqueueArgs,
49914             arg0,
49915             arg1,
49916             arg2,
49917             arg3,
49918             arg4,
49919             arg5,
49920             arg6,
49921             arg7,
49922             arg8,
49923             arg9,
49924             arg10,
49925             arg11,
49926             arg12,
49927             arg13,
49928             arg14,
49929             arg15,
49930             arg16,
49931             arg17,
49932             arg18,
49933             arg19,
49934             arg20,
49935             arg21,
49936             arg22,
49937             arg23,
49938             arg24,
49939             arg25,
49940             arg26,
49941             arg27,
49942             arg28,
49943             arg29,
49944             arg30,
49945             arg31,
49946             arg32,
49947             arg33,
49948             arg34,
49949             arg35,
49950             arg36,
49951             arg37,
49952             arg38,
49953             arg39,
49954             arg40,
49955             arg41,
49956             arg42,
49957             arg43,
49958             arg44,
49959             arg45,
49960             arg46,
49961             arg47,
49962             arg48,
49963             arg49,
49964             arg50,
49965             arg51,
49966             arg52,
49967             arg53,
49968             arg54,
49969             arg55,
49970             arg56,
49971             arg57,
49972             arg58,
49973             arg59,
49974             arg60,
49975             arg61,
49976             arg62,
49977             arg63,
49978             arg64,
49979             arg65,
49980             arg66,
49981             arg67,
49982             arg68,
49983             arg69,
49984             arg70,
49985             arg71,
49986             arg72,
49987             arg73,
49988             arg74,
49989             arg75,
49990             arg76,
49991             arg77,
49992             arg78,
49993             arg79,
49994             arg80,
49995             arg81,
49996             arg82,
49997             arg83,
49998             arg84,
49999             arg85,
50000             arg86,
50001             arg87,
50002             arg88,
50003             arg89,
50004             arg90,
50005             arg91,
50006             arg92);
50007     }
50008 
50009     operator type_ ()    
50010     {
50011         return type_(*this);
50012     }
50013 
50014 };
50015 
50016 template<
50017     typename T0,
50018     typename T1,
50019     typename T2,
50020     typename T3,
50021     typename T4,
50022     typename T5,
50023     typename T6,
50024     typename T7,
50025     typename T8,
50026     typename T9,
50027     typename T10,
50028     typename T11,
50029     typename T12,
50030     typename T13,
50031     typename T14,
50032     typename T15,
50033     typename T16,
50034     typename T17,
50035     typename T18,
50036     typename T19,
50037     typename T20,
50038     typename T21,
50039     typename T22,
50040     typename T23,
50041     typename T24,
50042     typename T25,
50043     typename T26,
50044     typename T27,
50045     typename T28,
50046     typename T29,
50047     typename T30,
50048     typename T31,
50049     typename T32,
50050     typename T33,
50051     typename T34,
50052     typename T35,
50053     typename T36,
50054     typename T37,
50055     typename T38,
50056     typename T39,
50057     typename T40,
50058     typename T41,
50059     typename T42,
50060     typename T43,
50061     typename T44,
50062     typename T45,
50063     typename T46,
50064     typename T47,
50065     typename T48,
50066     typename T49,
50067     typename T50,
50068     typename T51,
50069     typename T52,
50070     typename T53,
50071     typename T54,
50072     typename T55,
50073     typename T56,
50074     typename T57,
50075     typename T58,
50076     typename T59,
50077     typename T60,
50078     typename T61,
50079     typename T62,
50080     typename T63,
50081     typename T64,
50082     typename T65,
50083     typename T66,
50084     typename T67,
50085     typename T68,
50086     typename T69,
50087     typename T70,
50088     typename T71,
50089     typename T72,
50090     typename T73,
50091     typename T74,
50092     typename T75,
50093     typename T76,
50094     typename T77,
50095     typename T78,
50096     typename T79,
50097     typename T80,
50098     typename T81,
50099     typename T82,
50100     typename T83,
50101     typename T84,
50102     typename T85,
50103     typename T86,
50104     typename T87,
50105     typename T88,
50106     typename T89,
50107     typename T90,
50108     typename T91,
50109     typename T92,
50110     typename T93>
50111 struct functionImplementation_<
50112     T0,
50113     T1,
50114     T2,
50115     T3,
50116     T4,
50117     T5,
50118     T6,
50119     T7,
50120     T8,
50121     T9,
50122     T10,
50123     T11,
50124     T12,
50125     T13,
50126     T14,
50127     T15,
50128     T16,
50129     T17,
50130     T18,
50131     T19,
50132     T20,
50133     T21,
50134     T22,
50135     T23,
50136     T24,
50137     T25,
50138     T26,
50139     T27,
50140     T28,
50141     T29,
50142     T30,
50143     T31,
50144     T32,
50145     T33,
50146     T34,
50147     T35,
50148     T36,
50149     T37,
50150     T38,
50151     T39,
50152     T40,
50153     T41,
50154     T42,
50155     T43,
50156     T44,
50157     T45,
50158     T46,
50159     T47,
50160     T48,
50161     T49,
50162     T50,
50163     T51,
50164     T52,
50165     T53,
50166     T54,
50167     T55,
50168     T56,
50169     T57,
50170     T58,
50171     T59,
50172     T60,
50173     T61,
50174     T62,
50175     T63,
50176     T64,
50177     T65,
50178     T66,
50179     T67,
50180     T68,
50181     T69,
50182     T70,
50183     T71,
50184     T72,
50185     T73,
50186     T74,
50187     T75,
50188     T76,
50189     T77,
50190     T78,
50191     T79,
50192     T80,
50193     T81,
50194     T82,
50195     T83,
50196     T84,
50197     T85,
50198     T86,
50199     T87,
50200     T88,
50201     T89,
50202     T90,
50203     T91,
50204     T92,
50205     T93,
50206     NullType,
50207     NullType,
50208     NullType,
50209     NullType,
50210     NullType,
50211     NullType,
50212     NullType,
50213     NullType,
50214     NullType,
50215     NullType,
50216     NullType,
50217     NullType,
50218     NullType,
50219     NullType,
50220     NullType,
50221     NullType,
50222     NullType,
50223     NullType,
50224     NullType,
50225     NullType,
50226     NullType,
50227     NullType,
50228     NullType,
50229     NullType,
50230     NullType,
50231     NullType,
50232     NullType,
50233     NullType,
50234     NullType,
50235     NullType,
50236     NullType,
50237     NullType,
50238     NullType,
50239     NullType>
50240 {
50241     typedef detail::KernelFunctorGlobal<
50242         T0,
50243         T1,
50244         T2,
50245         T3,
50246         T4,
50247         T5,
50248         T6,
50249         T7,
50250         T8,
50251         T9,
50252         T10,
50253         T11,
50254         T12,
50255         T13,
50256         T14,
50257         T15,
50258         T16,
50259         T17,
50260         T18,
50261         T19,
50262         T20,
50263         T21,
50264         T22,
50265         T23,
50266         T24,
50267         T25,
50268         T26,
50269         T27,
50270         T28,
50271         T29,
50272         T30,
50273         T31,
50274         T32,
50275         T33,
50276         T34,
50277         T35,
50278         T36,
50279         T37,
50280         T38,
50281         T39,
50282         T40,
50283         T41,
50284         T42,
50285         T43,
50286         T44,
50287         T45,
50288         T46,
50289         T47,
50290         T48,
50291         T49,
50292         T50,
50293         T51,
50294         T52,
50295         T53,
50296         T54,
50297         T55,
50298         T56,
50299         T57,
50300         T58,
50301         T59,
50302         T60,
50303         T61,
50304         T62,
50305         T63,
50306         T64,
50307         T65,
50308         T66,
50309         T67,
50310         T68,
50311         T69,
50312         T70,
50313         T71,
50314         T72,
50315         T73,
50316         T74,
50317         T75,
50318         T76,
50319         T77,
50320         T78,
50321         T79,
50322         T80,
50323         T81,
50324         T82,
50325         T83,
50326         T84,
50327         T85,
50328         T86,
50329         T87,
50330         T88,
50331         T89,
50332         T90,
50333         T91,
50334         T92,
50335         T93,
50336         NullType,
50337         NullType,
50338         NullType,
50339         NullType,
50340         NullType,
50341         NullType,
50342         NullType,
50343         NullType,
50344         NullType,
50345         NullType,
50346         NullType,
50347         NullType,
50348         NullType,
50349         NullType,
50350         NullType,
50351         NullType,
50352         NullType,
50353         NullType,
50354         NullType,
50355         NullType,
50356         NullType,
50357         NullType,
50358         NullType,
50359         NullType,
50360         NullType,
50361         NullType,
50362         NullType,
50363         NullType,
50364         NullType,
50365         NullType,
50366         NullType,
50367         NullType,
50368         NullType,
50369         NullType> FunctorType;
50370 
50371     FunctorType functor_;
50372 
50373     functionImplementation_(const FunctorType &functor) :
50374         functor_(functor)
50375     {
50376     }
50377         
50378     typedef std::tr1::function<Event (
50379         const EnqueueArgs&,
50380         T0,
50381         T1,
50382         T2,
50383         T3,
50384         T4,
50385         T5,
50386         T6,
50387         T7,
50388         T8,
50389         T9,
50390         T10,
50391         T11,
50392         T12,
50393         T13,
50394         T14,
50395         T15,
50396         T16,
50397         T17,
50398         T18,
50399         T19,
50400         T20,
50401         T21,
50402         T22,
50403         T23,
50404         T24,
50405         T25,
50406         T26,
50407         T27,
50408         T28,
50409         T29,
50410         T30,
50411         T31,
50412         T32,
50413         T33,
50414         T34,
50415         T35,
50416         T36,
50417         T37,
50418         T38,
50419         T39,
50420         T40,
50421         T41,
50422         T42,
50423         T43,
50424         T44,
50425         T45,
50426         T46,
50427         T47,
50428         T48,
50429         T49,
50430         T50,
50431         T51,
50432         T52,
50433         T53,
50434         T54,
50435         T55,
50436         T56,
50437         T57,
50438         T58,
50439         T59,
50440         T60,
50441         T61,
50442         T62,
50443         T63,
50444         T64,
50445         T65,
50446         T66,
50447         T67,
50448         T68,
50449         T69,
50450         T70,
50451         T71,
50452         T72,
50453         T73,
50454         T74,
50455         T75,
50456         T76,
50457         T77,
50458         T78,
50459         T79,
50460         T80,
50461         T81,
50462         T82,
50463         T83,
50464         T84,
50465         T85,
50466         T86,
50467         T87,
50468         T88,
50469         T89,
50470         T90,
50471         T91,
50472         T92,
50473         T93)> type_;
50474 
50475     Event operator()(const EnqueueArgs& enqueueArgs,
50476         T0 arg0,
50477         T1 arg1,
50478         T2 arg2,
50479         T3 arg3,
50480         T4 arg4,
50481         T5 arg5,
50482         T6 arg6,
50483         T7 arg7,
50484         T8 arg8,
50485         T9 arg9,
50486         T10 arg10,
50487         T11 arg11,
50488         T12 arg12,
50489         T13 arg13,
50490         T14 arg14,
50491         T15 arg15,
50492         T16 arg16,
50493         T17 arg17,
50494         T18 arg18,
50495         T19 arg19,
50496         T20 arg20,
50497         T21 arg21,
50498         T22 arg22,
50499         T23 arg23,
50500         T24 arg24,
50501         T25 arg25,
50502         T26 arg26,
50503         T27 arg27,
50504         T28 arg28,
50505         T29 arg29,
50506         T30 arg30,
50507         T31 arg31,
50508         T32 arg32,
50509         T33 arg33,
50510         T34 arg34,
50511         T35 arg35,
50512         T36 arg36,
50513         T37 arg37,
50514         T38 arg38,
50515         T39 arg39,
50516         T40 arg40,
50517         T41 arg41,
50518         T42 arg42,
50519         T43 arg43,
50520         T44 arg44,
50521         T45 arg45,
50522         T46 arg46,
50523         T47 arg47,
50524         T48 arg48,
50525         T49 arg49,
50526         T50 arg50,
50527         T51 arg51,
50528         T52 arg52,
50529         T53 arg53,
50530         T54 arg54,
50531         T55 arg55,
50532         T56 arg56,
50533         T57 arg57,
50534         T58 arg58,
50535         T59 arg59,
50536         T60 arg60,
50537         T61 arg61,
50538         T62 arg62,
50539         T63 arg63,
50540         T64 arg64,
50541         T65 arg65,
50542         T66 arg66,
50543         T67 arg67,
50544         T68 arg68,
50545         T69 arg69,
50546         T70 arg70,
50547         T71 arg71,
50548         T72 arg72,
50549         T73 arg73,
50550         T74 arg74,
50551         T75 arg75,
50552         T76 arg76,
50553         T77 arg77,
50554         T78 arg78,
50555         T79 arg79,
50556         T80 arg80,
50557         T81 arg81,
50558         T82 arg82,
50559         T83 arg83,
50560         T84 arg84,
50561         T85 arg85,
50562         T86 arg86,
50563         T87 arg87,
50564         T88 arg88,
50565         T89 arg89,
50566         T90 arg90,
50567         T91 arg91,
50568         T92 arg92,
50569         T93 arg93)
50570     {
50571         return functor_(
50572             enqueueArgs,
50573             arg0,
50574             arg1,
50575             arg2,
50576             arg3,
50577             arg4,
50578             arg5,
50579             arg6,
50580             arg7,
50581             arg8,
50582             arg9,
50583             arg10,
50584             arg11,
50585             arg12,
50586             arg13,
50587             arg14,
50588             arg15,
50589             arg16,
50590             arg17,
50591             arg18,
50592             arg19,
50593             arg20,
50594             arg21,
50595             arg22,
50596             arg23,
50597             arg24,
50598             arg25,
50599             arg26,
50600             arg27,
50601             arg28,
50602             arg29,
50603             arg30,
50604             arg31,
50605             arg32,
50606             arg33,
50607             arg34,
50608             arg35,
50609             arg36,
50610             arg37,
50611             arg38,
50612             arg39,
50613             arg40,
50614             arg41,
50615             arg42,
50616             arg43,
50617             arg44,
50618             arg45,
50619             arg46,
50620             arg47,
50621             arg48,
50622             arg49,
50623             arg50,
50624             arg51,
50625             arg52,
50626             arg53,
50627             arg54,
50628             arg55,
50629             arg56,
50630             arg57,
50631             arg58,
50632             arg59,
50633             arg60,
50634             arg61,
50635             arg62,
50636             arg63,
50637             arg64,
50638             arg65,
50639             arg66,
50640             arg67,
50641             arg68,
50642             arg69,
50643             arg70,
50644             arg71,
50645             arg72,
50646             arg73,
50647             arg74,
50648             arg75,
50649             arg76,
50650             arg77,
50651             arg78,
50652             arg79,
50653             arg80,
50654             arg81,
50655             arg82,
50656             arg83,
50657             arg84,
50658             arg85,
50659             arg86,
50660             arg87,
50661             arg88,
50662             arg89,
50663             arg90,
50664             arg91,
50665             arg92,
50666             arg93);
50667     }
50668 
50669     operator type_ ()    
50670     {
50671         return type_(*this);
50672     }
50673 
50674 };
50675 
50676 template<
50677     typename T0,
50678     typename T1,
50679     typename T2,
50680     typename T3,
50681     typename T4,
50682     typename T5,
50683     typename T6,
50684     typename T7,
50685     typename T8,
50686     typename T9,
50687     typename T10,
50688     typename T11,
50689     typename T12,
50690     typename T13,
50691     typename T14,
50692     typename T15,
50693     typename T16,
50694     typename T17,
50695     typename T18,
50696     typename T19,
50697     typename T20,
50698     typename T21,
50699     typename T22,
50700     typename T23,
50701     typename T24,
50702     typename T25,
50703     typename T26,
50704     typename T27,
50705     typename T28,
50706     typename T29,
50707     typename T30,
50708     typename T31,
50709     typename T32,
50710     typename T33,
50711     typename T34,
50712     typename T35,
50713     typename T36,
50714     typename T37,
50715     typename T38,
50716     typename T39,
50717     typename T40,
50718     typename T41,
50719     typename T42,
50720     typename T43,
50721     typename T44,
50722     typename T45,
50723     typename T46,
50724     typename T47,
50725     typename T48,
50726     typename T49,
50727     typename T50,
50728     typename T51,
50729     typename T52,
50730     typename T53,
50731     typename T54,
50732     typename T55,
50733     typename T56,
50734     typename T57,
50735     typename T58,
50736     typename T59,
50737     typename T60,
50738     typename T61,
50739     typename T62,
50740     typename T63,
50741     typename T64,
50742     typename T65,
50743     typename T66,
50744     typename T67,
50745     typename T68,
50746     typename T69,
50747     typename T70,
50748     typename T71,
50749     typename T72,
50750     typename T73,
50751     typename T74,
50752     typename T75,
50753     typename T76,
50754     typename T77,
50755     typename T78,
50756     typename T79,
50757     typename T80,
50758     typename T81,
50759     typename T82,
50760     typename T83,
50761     typename T84,
50762     typename T85,
50763     typename T86,
50764     typename T87,
50765     typename T88,
50766     typename T89,
50767     typename T90,
50768     typename T91,
50769     typename T92,
50770     typename T93,
50771     typename T94>
50772 struct functionImplementation_<
50773     T0,
50774     T1,
50775     T2,
50776     T3,
50777     T4,
50778     T5,
50779     T6,
50780     T7,
50781     T8,
50782     T9,
50783     T10,
50784     T11,
50785     T12,
50786     T13,
50787     T14,
50788     T15,
50789     T16,
50790     T17,
50791     T18,
50792     T19,
50793     T20,
50794     T21,
50795     T22,
50796     T23,
50797     T24,
50798     T25,
50799     T26,
50800     T27,
50801     T28,
50802     T29,
50803     T30,
50804     T31,
50805     T32,
50806     T33,
50807     T34,
50808     T35,
50809     T36,
50810     T37,
50811     T38,
50812     T39,
50813     T40,
50814     T41,
50815     T42,
50816     T43,
50817     T44,
50818     T45,
50819     T46,
50820     T47,
50821     T48,
50822     T49,
50823     T50,
50824     T51,
50825     T52,
50826     T53,
50827     T54,
50828     T55,
50829     T56,
50830     T57,
50831     T58,
50832     T59,
50833     T60,
50834     T61,
50835     T62,
50836     T63,
50837     T64,
50838     T65,
50839     T66,
50840     T67,
50841     T68,
50842     T69,
50843     T70,
50844     T71,
50845     T72,
50846     T73,
50847     T74,
50848     T75,
50849     T76,
50850     T77,
50851     T78,
50852     T79,
50853     T80,
50854     T81,
50855     T82,
50856     T83,
50857     T84,
50858     T85,
50859     T86,
50860     T87,
50861     T88,
50862     T89,
50863     T90,
50864     T91,
50865     T92,
50866     T93,
50867     T94,
50868     NullType,
50869     NullType,
50870     NullType,
50871     NullType,
50872     NullType,
50873     NullType,
50874     NullType,
50875     NullType,
50876     NullType,
50877     NullType,
50878     NullType,
50879     NullType,
50880     NullType,
50881     NullType,
50882     NullType,
50883     NullType,
50884     NullType,
50885     NullType,
50886     NullType,
50887     NullType,
50888     NullType,
50889     NullType,
50890     NullType,
50891     NullType,
50892     NullType,
50893     NullType,
50894     NullType,
50895     NullType,
50896     NullType,
50897     NullType,
50898     NullType,
50899     NullType,
50900     NullType>
50901 {
50902     typedef detail::KernelFunctorGlobal<
50903         T0,
50904         T1,
50905         T2,
50906         T3,
50907         T4,
50908         T5,
50909         T6,
50910         T7,
50911         T8,
50912         T9,
50913         T10,
50914         T11,
50915         T12,
50916         T13,
50917         T14,
50918         T15,
50919         T16,
50920         T17,
50921         T18,
50922         T19,
50923         T20,
50924         T21,
50925         T22,
50926         T23,
50927         T24,
50928         T25,
50929         T26,
50930         T27,
50931         T28,
50932         T29,
50933         T30,
50934         T31,
50935         T32,
50936         T33,
50937         T34,
50938         T35,
50939         T36,
50940         T37,
50941         T38,
50942         T39,
50943         T40,
50944         T41,
50945         T42,
50946         T43,
50947         T44,
50948         T45,
50949         T46,
50950         T47,
50951         T48,
50952         T49,
50953         T50,
50954         T51,
50955         T52,
50956         T53,
50957         T54,
50958         T55,
50959         T56,
50960         T57,
50961         T58,
50962         T59,
50963         T60,
50964         T61,
50965         T62,
50966         T63,
50967         T64,
50968         T65,
50969         T66,
50970         T67,
50971         T68,
50972         T69,
50973         T70,
50974         T71,
50975         T72,
50976         T73,
50977         T74,
50978         T75,
50979         T76,
50980         T77,
50981         T78,
50982         T79,
50983         T80,
50984         T81,
50985         T82,
50986         T83,
50987         T84,
50988         T85,
50989         T86,
50990         T87,
50991         T88,
50992         T89,
50993         T90,
50994         T91,
50995         T92,
50996         T93,
50997         T94,
50998         NullType,
50999         NullType,
51000         NullType,
51001         NullType,
51002         NullType,
51003         NullType,
51004         NullType,
51005         NullType,
51006         NullType,
51007         NullType,
51008         NullType,
51009         NullType,
51010         NullType,
51011         NullType,
51012         NullType,
51013         NullType,
51014         NullType,
51015         NullType,
51016         NullType,
51017         NullType,
51018         NullType,
51019         NullType,
51020         NullType,
51021         NullType,
51022         NullType,
51023         NullType,
51024         NullType,
51025         NullType,
51026         NullType,
51027         NullType,
51028         NullType,
51029         NullType,
51030         NullType> FunctorType;
51031 
51032     FunctorType functor_;
51033 
51034     functionImplementation_(const FunctorType &functor) :
51035         functor_(functor)
51036     {
51037     }
51038         
51039     typedef std::tr1::function<Event (
51040         const EnqueueArgs&,
51041         T0,
51042         T1,
51043         T2,
51044         T3,
51045         T4,
51046         T5,
51047         T6,
51048         T7,
51049         T8,
51050         T9,
51051         T10,
51052         T11,
51053         T12,
51054         T13,
51055         T14,
51056         T15,
51057         T16,
51058         T17,
51059         T18,
51060         T19,
51061         T20,
51062         T21,
51063         T22,
51064         T23,
51065         T24,
51066         T25,
51067         T26,
51068         T27,
51069         T28,
51070         T29,
51071         T30,
51072         T31,
51073         T32,
51074         T33,
51075         T34,
51076         T35,
51077         T36,
51078         T37,
51079         T38,
51080         T39,
51081         T40,
51082         T41,
51083         T42,
51084         T43,
51085         T44,
51086         T45,
51087         T46,
51088         T47,
51089         T48,
51090         T49,
51091         T50,
51092         T51,
51093         T52,
51094         T53,
51095         T54,
51096         T55,
51097         T56,
51098         T57,
51099         T58,
51100         T59,
51101         T60,
51102         T61,
51103         T62,
51104         T63,
51105         T64,
51106         T65,
51107         T66,
51108         T67,
51109         T68,
51110         T69,
51111         T70,
51112         T71,
51113         T72,
51114         T73,
51115         T74,
51116         T75,
51117         T76,
51118         T77,
51119         T78,
51120         T79,
51121         T80,
51122         T81,
51123         T82,
51124         T83,
51125         T84,
51126         T85,
51127         T86,
51128         T87,
51129         T88,
51130         T89,
51131         T90,
51132         T91,
51133         T92,
51134         T93,
51135         T94)> type_;
51136 
51137     Event operator()(const EnqueueArgs& enqueueArgs,
51138         T0 arg0,
51139         T1 arg1,
51140         T2 arg2,
51141         T3 arg3,
51142         T4 arg4,
51143         T5 arg5,
51144         T6 arg6,
51145         T7 arg7,
51146         T8 arg8,
51147         T9 arg9,
51148         T10 arg10,
51149         T11 arg11,
51150         T12 arg12,
51151         T13 arg13,
51152         T14 arg14,
51153         T15 arg15,
51154         T16 arg16,
51155         T17 arg17,
51156         T18 arg18,
51157         T19 arg19,
51158         T20 arg20,
51159         T21 arg21,
51160         T22 arg22,
51161         T23 arg23,
51162         T24 arg24,
51163         T25 arg25,
51164         T26 arg26,
51165         T27 arg27,
51166         T28 arg28,
51167         T29 arg29,
51168         T30 arg30,
51169         T31 arg31,
51170         T32 arg32,
51171         T33 arg33,
51172         T34 arg34,
51173         T35 arg35,
51174         T36 arg36,
51175         T37 arg37,
51176         T38 arg38,
51177         T39 arg39,
51178         T40 arg40,
51179         T41 arg41,
51180         T42 arg42,
51181         T43 arg43,
51182         T44 arg44,
51183         T45 arg45,
51184         T46 arg46,
51185         T47 arg47,
51186         T48 arg48,
51187         T49 arg49,
51188         T50 arg50,
51189         T51 arg51,
51190         T52 arg52,
51191         T53 arg53,
51192         T54 arg54,
51193         T55 arg55,
51194         T56 arg56,
51195         T57 arg57,
51196         T58 arg58,
51197         T59 arg59,
51198         T60 arg60,
51199         T61 arg61,
51200         T62 arg62,
51201         T63 arg63,
51202         T64 arg64,
51203         T65 arg65,
51204         T66 arg66,
51205         T67 arg67,
51206         T68 arg68,
51207         T69 arg69,
51208         T70 arg70,
51209         T71 arg71,
51210         T72 arg72,
51211         T73 arg73,
51212         T74 arg74,
51213         T75 arg75,
51214         T76 arg76,
51215         T77 arg77,
51216         T78 arg78,
51217         T79 arg79,
51218         T80 arg80,
51219         T81 arg81,
51220         T82 arg82,
51221         T83 arg83,
51222         T84 arg84,
51223         T85 arg85,
51224         T86 arg86,
51225         T87 arg87,
51226         T88 arg88,
51227         T89 arg89,
51228         T90 arg90,
51229         T91 arg91,
51230         T92 arg92,
51231         T93 arg93,
51232         T94 arg94)
51233     {
51234         return functor_(
51235             enqueueArgs,
51236             arg0,
51237             arg1,
51238             arg2,
51239             arg3,
51240             arg4,
51241             arg5,
51242             arg6,
51243             arg7,
51244             arg8,
51245             arg9,
51246             arg10,
51247             arg11,
51248             arg12,
51249             arg13,
51250             arg14,
51251             arg15,
51252             arg16,
51253             arg17,
51254             arg18,
51255             arg19,
51256             arg20,
51257             arg21,
51258             arg22,
51259             arg23,
51260             arg24,
51261             arg25,
51262             arg26,
51263             arg27,
51264             arg28,
51265             arg29,
51266             arg30,
51267             arg31,
51268             arg32,
51269             arg33,
51270             arg34,
51271             arg35,
51272             arg36,
51273             arg37,
51274             arg38,
51275             arg39,
51276             arg40,
51277             arg41,
51278             arg42,
51279             arg43,
51280             arg44,
51281             arg45,
51282             arg46,
51283             arg47,
51284             arg48,
51285             arg49,
51286             arg50,
51287             arg51,
51288             arg52,
51289             arg53,
51290             arg54,
51291             arg55,
51292             arg56,
51293             arg57,
51294             arg58,
51295             arg59,
51296             arg60,
51297             arg61,
51298             arg62,
51299             arg63,
51300             arg64,
51301             arg65,
51302             arg66,
51303             arg67,
51304             arg68,
51305             arg69,
51306             arg70,
51307             arg71,
51308             arg72,
51309             arg73,
51310             arg74,
51311             arg75,
51312             arg76,
51313             arg77,
51314             arg78,
51315             arg79,
51316             arg80,
51317             arg81,
51318             arg82,
51319             arg83,
51320             arg84,
51321             arg85,
51322             arg86,
51323             arg87,
51324             arg88,
51325             arg89,
51326             arg90,
51327             arg91,
51328             arg92,
51329             arg93,
51330             arg94);
51331     }
51332 
51333     operator type_ ()    
51334     {
51335         return type_(*this);
51336     }
51337 
51338 };
51339 
51340 template<
51341     typename T0,
51342     typename T1,
51343     typename T2,
51344     typename T3,
51345     typename T4,
51346     typename T5,
51347     typename T6,
51348     typename T7,
51349     typename T8,
51350     typename T9,
51351     typename T10,
51352     typename T11,
51353     typename T12,
51354     typename T13,
51355     typename T14,
51356     typename T15,
51357     typename T16,
51358     typename T17,
51359     typename T18,
51360     typename T19,
51361     typename T20,
51362     typename T21,
51363     typename T22,
51364     typename T23,
51365     typename T24,
51366     typename T25,
51367     typename T26,
51368     typename T27,
51369     typename T28,
51370     typename T29,
51371     typename T30,
51372     typename T31,
51373     typename T32,
51374     typename T33,
51375     typename T34,
51376     typename T35,
51377     typename T36,
51378     typename T37,
51379     typename T38,
51380     typename T39,
51381     typename T40,
51382     typename T41,
51383     typename T42,
51384     typename T43,
51385     typename T44,
51386     typename T45,
51387     typename T46,
51388     typename T47,
51389     typename T48,
51390     typename T49,
51391     typename T50,
51392     typename T51,
51393     typename T52,
51394     typename T53,
51395     typename T54,
51396     typename T55,
51397     typename T56,
51398     typename T57,
51399     typename T58,
51400     typename T59,
51401     typename T60,
51402     typename T61,
51403     typename T62,
51404     typename T63,
51405     typename T64,
51406     typename T65,
51407     typename T66,
51408     typename T67,
51409     typename T68,
51410     typename T69,
51411     typename T70,
51412     typename T71,
51413     typename T72,
51414     typename T73,
51415     typename T74,
51416     typename T75,
51417     typename T76,
51418     typename T77,
51419     typename T78,
51420     typename T79,
51421     typename T80,
51422     typename T81,
51423     typename T82,
51424     typename T83,
51425     typename T84,
51426     typename T85,
51427     typename T86,
51428     typename T87,
51429     typename T88,
51430     typename T89,
51431     typename T90,
51432     typename T91,
51433     typename T92,
51434     typename T93,
51435     typename T94,
51436     typename T95>
51437 struct functionImplementation_<
51438     T0,
51439     T1,
51440     T2,
51441     T3,
51442     T4,
51443     T5,
51444     T6,
51445     T7,
51446     T8,
51447     T9,
51448     T10,
51449     T11,
51450     T12,
51451     T13,
51452     T14,
51453     T15,
51454     T16,
51455     T17,
51456     T18,
51457     T19,
51458     T20,
51459     T21,
51460     T22,
51461     T23,
51462     T24,
51463     T25,
51464     T26,
51465     T27,
51466     T28,
51467     T29,
51468     T30,
51469     T31,
51470     T32,
51471     T33,
51472     T34,
51473     T35,
51474     T36,
51475     T37,
51476     T38,
51477     T39,
51478     T40,
51479     T41,
51480     T42,
51481     T43,
51482     T44,
51483     T45,
51484     T46,
51485     T47,
51486     T48,
51487     T49,
51488     T50,
51489     T51,
51490     T52,
51491     T53,
51492     T54,
51493     T55,
51494     T56,
51495     T57,
51496     T58,
51497     T59,
51498     T60,
51499     T61,
51500     T62,
51501     T63,
51502     T64,
51503     T65,
51504     T66,
51505     T67,
51506     T68,
51507     T69,
51508     T70,
51509     T71,
51510     T72,
51511     T73,
51512     T74,
51513     T75,
51514     T76,
51515     T77,
51516     T78,
51517     T79,
51518     T80,
51519     T81,
51520     T82,
51521     T83,
51522     T84,
51523     T85,
51524     T86,
51525     T87,
51526     T88,
51527     T89,
51528     T90,
51529     T91,
51530     T92,
51531     T93,
51532     T94,
51533     T95,
51534     NullType,
51535     NullType,
51536     NullType,
51537     NullType,
51538     NullType,
51539     NullType,
51540     NullType,
51541     NullType,
51542     NullType,
51543     NullType,
51544     NullType,
51545     NullType,
51546     NullType,
51547     NullType,
51548     NullType,
51549     NullType,
51550     NullType,
51551     NullType,
51552     NullType,
51553     NullType,
51554     NullType,
51555     NullType,
51556     NullType,
51557     NullType,
51558     NullType,
51559     NullType,
51560     NullType,
51561     NullType,
51562     NullType,
51563     NullType,
51564     NullType,
51565     NullType>
51566 {
51567     typedef detail::KernelFunctorGlobal<
51568         T0,
51569         T1,
51570         T2,
51571         T3,
51572         T4,
51573         T5,
51574         T6,
51575         T7,
51576         T8,
51577         T9,
51578         T10,
51579         T11,
51580         T12,
51581         T13,
51582         T14,
51583         T15,
51584         T16,
51585         T17,
51586         T18,
51587         T19,
51588         T20,
51589         T21,
51590         T22,
51591         T23,
51592         T24,
51593         T25,
51594         T26,
51595         T27,
51596         T28,
51597         T29,
51598         T30,
51599         T31,
51600         T32,
51601         T33,
51602         T34,
51603         T35,
51604         T36,
51605         T37,
51606         T38,
51607         T39,
51608         T40,
51609         T41,
51610         T42,
51611         T43,
51612         T44,
51613         T45,
51614         T46,
51615         T47,
51616         T48,
51617         T49,
51618         T50,
51619         T51,
51620         T52,
51621         T53,
51622         T54,
51623         T55,
51624         T56,
51625         T57,
51626         T58,
51627         T59,
51628         T60,
51629         T61,
51630         T62,
51631         T63,
51632         T64,
51633         T65,
51634         T66,
51635         T67,
51636         T68,
51637         T69,
51638         T70,
51639         T71,
51640         T72,
51641         T73,
51642         T74,
51643         T75,
51644         T76,
51645         T77,
51646         T78,
51647         T79,
51648         T80,
51649         T81,
51650         T82,
51651         T83,
51652         T84,
51653         T85,
51654         T86,
51655         T87,
51656         T88,
51657         T89,
51658         T90,
51659         T91,
51660         T92,
51661         T93,
51662         T94,
51663         T95,
51664         NullType,
51665         NullType,
51666         NullType,
51667         NullType,
51668         NullType,
51669         NullType,
51670         NullType,
51671         NullType,
51672         NullType,
51673         NullType,
51674         NullType,
51675         NullType,
51676         NullType,
51677         NullType,
51678         NullType,
51679         NullType,
51680         NullType,
51681         NullType,
51682         NullType,
51683         NullType,
51684         NullType,
51685         NullType,
51686         NullType,
51687         NullType,
51688         NullType,
51689         NullType,
51690         NullType,
51691         NullType,
51692         NullType,
51693         NullType,
51694         NullType,
51695         NullType> FunctorType;
51696 
51697     FunctorType functor_;
51698 
51699     functionImplementation_(const FunctorType &functor) :
51700         functor_(functor)
51701     {
51702     }
51703         
51704     typedef std::tr1::function<Event (
51705         const EnqueueArgs&,
51706         T0,
51707         T1,
51708         T2,
51709         T3,
51710         T4,
51711         T5,
51712         T6,
51713         T7,
51714         T8,
51715         T9,
51716         T10,
51717         T11,
51718         T12,
51719         T13,
51720         T14,
51721         T15,
51722         T16,
51723         T17,
51724         T18,
51725         T19,
51726         T20,
51727         T21,
51728         T22,
51729         T23,
51730         T24,
51731         T25,
51732         T26,
51733         T27,
51734         T28,
51735         T29,
51736         T30,
51737         T31,
51738         T32,
51739         T33,
51740         T34,
51741         T35,
51742         T36,
51743         T37,
51744         T38,
51745         T39,
51746         T40,
51747         T41,
51748         T42,
51749         T43,
51750         T44,
51751         T45,
51752         T46,
51753         T47,
51754         T48,
51755         T49,
51756         T50,
51757         T51,
51758         T52,
51759         T53,
51760         T54,
51761         T55,
51762         T56,
51763         T57,
51764         T58,
51765         T59,
51766         T60,
51767         T61,
51768         T62,
51769         T63,
51770         T64,
51771         T65,
51772         T66,
51773         T67,
51774         T68,
51775         T69,
51776         T70,
51777         T71,
51778         T72,
51779         T73,
51780         T74,
51781         T75,
51782         T76,
51783         T77,
51784         T78,
51785         T79,
51786         T80,
51787         T81,
51788         T82,
51789         T83,
51790         T84,
51791         T85,
51792         T86,
51793         T87,
51794         T88,
51795         T89,
51796         T90,
51797         T91,
51798         T92,
51799         T93,
51800         T94,
51801         T95)> type_;
51802 
51803     Event operator()(const EnqueueArgs& enqueueArgs,
51804         T0 arg0,
51805         T1 arg1,
51806         T2 arg2,
51807         T3 arg3,
51808         T4 arg4,
51809         T5 arg5,
51810         T6 arg6,
51811         T7 arg7,
51812         T8 arg8,
51813         T9 arg9,
51814         T10 arg10,
51815         T11 arg11,
51816         T12 arg12,
51817         T13 arg13,
51818         T14 arg14,
51819         T15 arg15,
51820         T16 arg16,
51821         T17 arg17,
51822         T18 arg18,
51823         T19 arg19,
51824         T20 arg20,
51825         T21 arg21,
51826         T22 arg22,
51827         T23 arg23,
51828         T24 arg24,
51829         T25 arg25,
51830         T26 arg26,
51831         T27 arg27,
51832         T28 arg28,
51833         T29 arg29,
51834         T30 arg30,
51835         T31 arg31,
51836         T32 arg32,
51837         T33 arg33,
51838         T34 arg34,
51839         T35 arg35,
51840         T36 arg36,
51841         T37 arg37,
51842         T38 arg38,
51843         T39 arg39,
51844         T40 arg40,
51845         T41 arg41,
51846         T42 arg42,
51847         T43 arg43,
51848         T44 arg44,
51849         T45 arg45,
51850         T46 arg46,
51851         T47 arg47,
51852         T48 arg48,
51853         T49 arg49,
51854         T50 arg50,
51855         T51 arg51,
51856         T52 arg52,
51857         T53 arg53,
51858         T54 arg54,
51859         T55 arg55,
51860         T56 arg56,
51861         T57 arg57,
51862         T58 arg58,
51863         T59 arg59,
51864         T60 arg60,
51865         T61 arg61,
51866         T62 arg62,
51867         T63 arg63,
51868         T64 arg64,
51869         T65 arg65,
51870         T66 arg66,
51871         T67 arg67,
51872         T68 arg68,
51873         T69 arg69,
51874         T70 arg70,
51875         T71 arg71,
51876         T72 arg72,
51877         T73 arg73,
51878         T74 arg74,
51879         T75 arg75,
51880         T76 arg76,
51881         T77 arg77,
51882         T78 arg78,
51883         T79 arg79,
51884         T80 arg80,
51885         T81 arg81,
51886         T82 arg82,
51887         T83 arg83,
51888         T84 arg84,
51889         T85 arg85,
51890         T86 arg86,
51891         T87 arg87,
51892         T88 arg88,
51893         T89 arg89,
51894         T90 arg90,
51895         T91 arg91,
51896         T92 arg92,
51897         T93 arg93,
51898         T94 arg94,
51899         T95 arg95)
51900     {
51901         return functor_(
51902             enqueueArgs,
51903             arg0,
51904             arg1,
51905             arg2,
51906             arg3,
51907             arg4,
51908             arg5,
51909             arg6,
51910             arg7,
51911             arg8,
51912             arg9,
51913             arg10,
51914             arg11,
51915             arg12,
51916             arg13,
51917             arg14,
51918             arg15,
51919             arg16,
51920             arg17,
51921             arg18,
51922             arg19,
51923             arg20,
51924             arg21,
51925             arg22,
51926             arg23,
51927             arg24,
51928             arg25,
51929             arg26,
51930             arg27,
51931             arg28,
51932             arg29,
51933             arg30,
51934             arg31,
51935             arg32,
51936             arg33,
51937             arg34,
51938             arg35,
51939             arg36,
51940             arg37,
51941             arg38,
51942             arg39,
51943             arg40,
51944             arg41,
51945             arg42,
51946             arg43,
51947             arg44,
51948             arg45,
51949             arg46,
51950             arg47,
51951             arg48,
51952             arg49,
51953             arg50,
51954             arg51,
51955             arg52,
51956             arg53,
51957             arg54,
51958             arg55,
51959             arg56,
51960             arg57,
51961             arg58,
51962             arg59,
51963             arg60,
51964             arg61,
51965             arg62,
51966             arg63,
51967             arg64,
51968             arg65,
51969             arg66,
51970             arg67,
51971             arg68,
51972             arg69,
51973             arg70,
51974             arg71,
51975             arg72,
51976             arg73,
51977             arg74,
51978             arg75,
51979             arg76,
51980             arg77,
51981             arg78,
51982             arg79,
51983             arg80,
51984             arg81,
51985             arg82,
51986             arg83,
51987             arg84,
51988             arg85,
51989             arg86,
51990             arg87,
51991             arg88,
51992             arg89,
51993             arg90,
51994             arg91,
51995             arg92,
51996             arg93,
51997             arg94,
51998             arg95);
51999     }
52000 
52001     operator type_ ()    
52002     {
52003         return type_(*this);
52004     }
52005 
52006 };
52007 
52008 template<
52009     typename T0,
52010     typename T1,
52011     typename T2,
52012     typename T3,
52013     typename T4,
52014     typename T5,
52015     typename T6,
52016     typename T7,
52017     typename T8,
52018     typename T9,
52019     typename T10,
52020     typename T11,
52021     typename T12,
52022     typename T13,
52023     typename T14,
52024     typename T15,
52025     typename T16,
52026     typename T17,
52027     typename T18,
52028     typename T19,
52029     typename T20,
52030     typename T21,
52031     typename T22,
52032     typename T23,
52033     typename T24,
52034     typename T25,
52035     typename T26,
52036     typename T27,
52037     typename T28,
52038     typename T29,
52039     typename T30,
52040     typename T31,
52041     typename T32,
52042     typename T33,
52043     typename T34,
52044     typename T35,
52045     typename T36,
52046     typename T37,
52047     typename T38,
52048     typename T39,
52049     typename T40,
52050     typename T41,
52051     typename T42,
52052     typename T43,
52053     typename T44,
52054     typename T45,
52055     typename T46,
52056     typename T47,
52057     typename T48,
52058     typename T49,
52059     typename T50,
52060     typename T51,
52061     typename T52,
52062     typename T53,
52063     typename T54,
52064     typename T55,
52065     typename T56,
52066     typename T57,
52067     typename T58,
52068     typename T59,
52069     typename T60,
52070     typename T61,
52071     typename T62,
52072     typename T63,
52073     typename T64,
52074     typename T65,
52075     typename T66,
52076     typename T67,
52077     typename T68,
52078     typename T69,
52079     typename T70,
52080     typename T71,
52081     typename T72,
52082     typename T73,
52083     typename T74,
52084     typename T75,
52085     typename T76,
52086     typename T77,
52087     typename T78,
52088     typename T79,
52089     typename T80,
52090     typename T81,
52091     typename T82,
52092     typename T83,
52093     typename T84,
52094     typename T85,
52095     typename T86,
52096     typename T87,
52097     typename T88,
52098     typename T89,
52099     typename T90,
52100     typename T91,
52101     typename T92,
52102     typename T93,
52103     typename T94,
52104     typename T95,
52105     typename T96>
52106 struct functionImplementation_<
52107     T0,
52108     T1,
52109     T2,
52110     T3,
52111     T4,
52112     T5,
52113     T6,
52114     T7,
52115     T8,
52116     T9,
52117     T10,
52118     T11,
52119     T12,
52120     T13,
52121     T14,
52122     T15,
52123     T16,
52124     T17,
52125     T18,
52126     T19,
52127     T20,
52128     T21,
52129     T22,
52130     T23,
52131     T24,
52132     T25,
52133     T26,
52134     T27,
52135     T28,
52136     T29,
52137     T30,
52138     T31,
52139     T32,
52140     T33,
52141     T34,
52142     T35,
52143     T36,
52144     T37,
52145     T38,
52146     T39,
52147     T40,
52148     T41,
52149     T42,
52150     T43,
52151     T44,
52152     T45,
52153     T46,
52154     T47,
52155     T48,
52156     T49,
52157     T50,
52158     T51,
52159     T52,
52160     T53,
52161     T54,
52162     T55,
52163     T56,
52164     T57,
52165     T58,
52166     T59,
52167     T60,
52168     T61,
52169     T62,
52170     T63,
52171     T64,
52172     T65,
52173     T66,
52174     T67,
52175     T68,
52176     T69,
52177     T70,
52178     T71,
52179     T72,
52180     T73,
52181     T74,
52182     T75,
52183     T76,
52184     T77,
52185     T78,
52186     T79,
52187     T80,
52188     T81,
52189     T82,
52190     T83,
52191     T84,
52192     T85,
52193     T86,
52194     T87,
52195     T88,
52196     T89,
52197     T90,
52198     T91,
52199     T92,
52200     T93,
52201     T94,
52202     T95,
52203     T96,
52204     NullType,
52205     NullType,
52206     NullType,
52207     NullType,
52208     NullType,
52209     NullType,
52210     NullType,
52211     NullType,
52212     NullType,
52213     NullType,
52214     NullType,
52215     NullType,
52216     NullType,
52217     NullType,
52218     NullType,
52219     NullType,
52220     NullType,
52221     NullType,
52222     NullType,
52223     NullType,
52224     NullType,
52225     NullType,
52226     NullType,
52227     NullType,
52228     NullType,
52229     NullType,
52230     NullType,
52231     NullType,
52232     NullType,
52233     NullType,
52234     NullType>
52235 {
52236     typedef detail::KernelFunctorGlobal<
52237         T0,
52238         T1,
52239         T2,
52240         T3,
52241         T4,
52242         T5,
52243         T6,
52244         T7,
52245         T8,
52246         T9,
52247         T10,
52248         T11,
52249         T12,
52250         T13,
52251         T14,
52252         T15,
52253         T16,
52254         T17,
52255         T18,
52256         T19,
52257         T20,
52258         T21,
52259         T22,
52260         T23,
52261         T24,
52262         T25,
52263         T26,
52264         T27,
52265         T28,
52266         T29,
52267         T30,
52268         T31,
52269         T32,
52270         T33,
52271         T34,
52272         T35,
52273         T36,
52274         T37,
52275         T38,
52276         T39,
52277         T40,
52278         T41,
52279         T42,
52280         T43,
52281         T44,
52282         T45,
52283         T46,
52284         T47,
52285         T48,
52286         T49,
52287         T50,
52288         T51,
52289         T52,
52290         T53,
52291         T54,
52292         T55,
52293         T56,
52294         T57,
52295         T58,
52296         T59,
52297         T60,
52298         T61,
52299         T62,
52300         T63,
52301         T64,
52302         T65,
52303         T66,
52304         T67,
52305         T68,
52306         T69,
52307         T70,
52308         T71,
52309         T72,
52310         T73,
52311         T74,
52312         T75,
52313         T76,
52314         T77,
52315         T78,
52316         T79,
52317         T80,
52318         T81,
52319         T82,
52320         T83,
52321         T84,
52322         T85,
52323         T86,
52324         T87,
52325         T88,
52326         T89,
52327         T90,
52328         T91,
52329         T92,
52330         T93,
52331         T94,
52332         T95,
52333         T96,
52334         NullType,
52335         NullType,
52336         NullType,
52337         NullType,
52338         NullType,
52339         NullType,
52340         NullType,
52341         NullType,
52342         NullType,
52343         NullType,
52344         NullType,
52345         NullType,
52346         NullType,
52347         NullType,
52348         NullType,
52349         NullType,
52350         NullType,
52351         NullType,
52352         NullType,
52353         NullType,
52354         NullType,
52355         NullType,
52356         NullType,
52357         NullType,
52358         NullType,
52359         NullType,
52360         NullType,
52361         NullType,
52362         NullType,
52363         NullType,
52364         NullType> FunctorType;
52365 
52366     FunctorType functor_;
52367 
52368     functionImplementation_(const FunctorType &functor) :
52369         functor_(functor)
52370     {
52371     }
52372         
52373     typedef std::tr1::function<Event (
52374         const EnqueueArgs&,
52375         T0,
52376         T1,
52377         T2,
52378         T3,
52379         T4,
52380         T5,
52381         T6,
52382         T7,
52383         T8,
52384         T9,
52385         T10,
52386         T11,
52387         T12,
52388         T13,
52389         T14,
52390         T15,
52391         T16,
52392         T17,
52393         T18,
52394         T19,
52395         T20,
52396         T21,
52397         T22,
52398         T23,
52399         T24,
52400         T25,
52401         T26,
52402         T27,
52403         T28,
52404         T29,
52405         T30,
52406         T31,
52407         T32,
52408         T33,
52409         T34,
52410         T35,
52411         T36,
52412         T37,
52413         T38,
52414         T39,
52415         T40,
52416         T41,
52417         T42,
52418         T43,
52419         T44,
52420         T45,
52421         T46,
52422         T47,
52423         T48,
52424         T49,
52425         T50,
52426         T51,
52427         T52,
52428         T53,
52429         T54,
52430         T55,
52431         T56,
52432         T57,
52433         T58,
52434         T59,
52435         T60,
52436         T61,
52437         T62,
52438         T63,
52439         T64,
52440         T65,
52441         T66,
52442         T67,
52443         T68,
52444         T69,
52445         T70,
52446         T71,
52447         T72,
52448         T73,
52449         T74,
52450         T75,
52451         T76,
52452         T77,
52453         T78,
52454         T79,
52455         T80,
52456         T81,
52457         T82,
52458         T83,
52459         T84,
52460         T85,
52461         T86,
52462         T87,
52463         T88,
52464         T89,
52465         T90,
52466         T91,
52467         T92,
52468         T93,
52469         T94,
52470         T95,
52471         T96)> type_;
52472 
52473     Event operator()(const EnqueueArgs& enqueueArgs,
52474         T0 arg0,
52475         T1 arg1,
52476         T2 arg2,
52477         T3 arg3,
52478         T4 arg4,
52479         T5 arg5,
52480         T6 arg6,
52481         T7 arg7,
52482         T8 arg8,
52483         T9 arg9,
52484         T10 arg10,
52485         T11 arg11,
52486         T12 arg12,
52487         T13 arg13,
52488         T14 arg14,
52489         T15 arg15,
52490         T16 arg16,
52491         T17 arg17,
52492         T18 arg18,
52493         T19 arg19,
52494         T20 arg20,
52495         T21 arg21,
52496         T22 arg22,
52497         T23 arg23,
52498         T24 arg24,
52499         T25 arg25,
52500         T26 arg26,
52501         T27 arg27,
52502         T28 arg28,
52503         T29 arg29,
52504         T30 arg30,
52505         T31 arg31,
52506         T32 arg32,
52507         T33 arg33,
52508         T34 arg34,
52509         T35 arg35,
52510         T36 arg36,
52511         T37 arg37,
52512         T38 arg38,
52513         T39 arg39,
52514         T40 arg40,
52515         T41 arg41,
52516         T42 arg42,
52517         T43 arg43,
52518         T44 arg44,
52519         T45 arg45,
52520         T46 arg46,
52521         T47 arg47,
52522         T48 arg48,
52523         T49 arg49,
52524         T50 arg50,
52525         T51 arg51,
52526         T52 arg52,
52527         T53 arg53,
52528         T54 arg54,
52529         T55 arg55,
52530         T56 arg56,
52531         T57 arg57,
52532         T58 arg58,
52533         T59 arg59,
52534         T60 arg60,
52535         T61 arg61,
52536         T62 arg62,
52537         T63 arg63,
52538         T64 arg64,
52539         T65 arg65,
52540         T66 arg66,
52541         T67 arg67,
52542         T68 arg68,
52543         T69 arg69,
52544         T70 arg70,
52545         T71 arg71,
52546         T72 arg72,
52547         T73 arg73,
52548         T74 arg74,
52549         T75 arg75,
52550         T76 arg76,
52551         T77 arg77,
52552         T78 arg78,
52553         T79 arg79,
52554         T80 arg80,
52555         T81 arg81,
52556         T82 arg82,
52557         T83 arg83,
52558         T84 arg84,
52559         T85 arg85,
52560         T86 arg86,
52561         T87 arg87,
52562         T88 arg88,
52563         T89 arg89,
52564         T90 arg90,
52565         T91 arg91,
52566         T92 arg92,
52567         T93 arg93,
52568         T94 arg94,
52569         T95 arg95,
52570         T96 arg96)
52571     {
52572         return functor_(
52573             enqueueArgs,
52574             arg0,
52575             arg1,
52576             arg2,
52577             arg3,
52578             arg4,
52579             arg5,
52580             arg6,
52581             arg7,
52582             arg8,
52583             arg9,
52584             arg10,
52585             arg11,
52586             arg12,
52587             arg13,
52588             arg14,
52589             arg15,
52590             arg16,
52591             arg17,
52592             arg18,
52593             arg19,
52594             arg20,
52595             arg21,
52596             arg22,
52597             arg23,
52598             arg24,
52599             arg25,
52600             arg26,
52601             arg27,
52602             arg28,
52603             arg29,
52604             arg30,
52605             arg31,
52606             arg32,
52607             arg33,
52608             arg34,
52609             arg35,
52610             arg36,
52611             arg37,
52612             arg38,
52613             arg39,
52614             arg40,
52615             arg41,
52616             arg42,
52617             arg43,
52618             arg44,
52619             arg45,
52620             arg46,
52621             arg47,
52622             arg48,
52623             arg49,
52624             arg50,
52625             arg51,
52626             arg52,
52627             arg53,
52628             arg54,
52629             arg55,
52630             arg56,
52631             arg57,
52632             arg58,
52633             arg59,
52634             arg60,
52635             arg61,
52636             arg62,
52637             arg63,
52638             arg64,
52639             arg65,
52640             arg66,
52641             arg67,
52642             arg68,
52643             arg69,
52644             arg70,
52645             arg71,
52646             arg72,
52647             arg73,
52648             arg74,
52649             arg75,
52650             arg76,
52651             arg77,
52652             arg78,
52653             arg79,
52654             arg80,
52655             arg81,
52656             arg82,
52657             arg83,
52658             arg84,
52659             arg85,
52660             arg86,
52661             arg87,
52662             arg88,
52663             arg89,
52664             arg90,
52665             arg91,
52666             arg92,
52667             arg93,
52668             arg94,
52669             arg95,
52670             arg96);
52671     }
52672 
52673     operator type_ ()    
52674     {
52675         return type_(*this);
52676     }
52677 
52678 };
52679 
52680 template<
52681     typename T0,
52682     typename T1,
52683     typename T2,
52684     typename T3,
52685     typename T4,
52686     typename T5,
52687     typename T6,
52688     typename T7,
52689     typename T8,
52690     typename T9,
52691     typename T10,
52692     typename T11,
52693     typename T12,
52694     typename T13,
52695     typename T14,
52696     typename T15,
52697     typename T16,
52698     typename T17,
52699     typename T18,
52700     typename T19,
52701     typename T20,
52702     typename T21,
52703     typename T22,
52704     typename T23,
52705     typename T24,
52706     typename T25,
52707     typename T26,
52708     typename T27,
52709     typename T28,
52710     typename T29,
52711     typename T30,
52712     typename T31,
52713     typename T32,
52714     typename T33,
52715     typename T34,
52716     typename T35,
52717     typename T36,
52718     typename T37,
52719     typename T38,
52720     typename T39,
52721     typename T40,
52722     typename T41,
52723     typename T42,
52724     typename T43,
52725     typename T44,
52726     typename T45,
52727     typename T46,
52728     typename T47,
52729     typename T48,
52730     typename T49,
52731     typename T50,
52732     typename T51,
52733     typename T52,
52734     typename T53,
52735     typename T54,
52736     typename T55,
52737     typename T56,
52738     typename T57,
52739     typename T58,
52740     typename T59,
52741     typename T60,
52742     typename T61,
52743     typename T62,
52744     typename T63,
52745     typename T64,
52746     typename T65,
52747     typename T66,
52748     typename T67,
52749     typename T68,
52750     typename T69,
52751     typename T70,
52752     typename T71,
52753     typename T72,
52754     typename T73,
52755     typename T74,
52756     typename T75,
52757     typename T76,
52758     typename T77,
52759     typename T78,
52760     typename T79,
52761     typename T80,
52762     typename T81,
52763     typename T82,
52764     typename T83,
52765     typename T84,
52766     typename T85,
52767     typename T86,
52768     typename T87,
52769     typename T88,
52770     typename T89,
52771     typename T90,
52772     typename T91,
52773     typename T92,
52774     typename T93,
52775     typename T94,
52776     typename T95,
52777     typename T96,
52778     typename T97>
52779 struct functionImplementation_<
52780     T0,
52781     T1,
52782     T2,
52783     T3,
52784     T4,
52785     T5,
52786     T6,
52787     T7,
52788     T8,
52789     T9,
52790     T10,
52791     T11,
52792     T12,
52793     T13,
52794     T14,
52795     T15,
52796     T16,
52797     T17,
52798     T18,
52799     T19,
52800     T20,
52801     T21,
52802     T22,
52803     T23,
52804     T24,
52805     T25,
52806     T26,
52807     T27,
52808     T28,
52809     T29,
52810     T30,
52811     T31,
52812     T32,
52813     T33,
52814     T34,
52815     T35,
52816     T36,
52817     T37,
52818     T38,
52819     T39,
52820     T40,
52821     T41,
52822     T42,
52823     T43,
52824     T44,
52825     T45,
52826     T46,
52827     T47,
52828     T48,
52829     T49,
52830     T50,
52831     T51,
52832     T52,
52833     T53,
52834     T54,
52835     T55,
52836     T56,
52837     T57,
52838     T58,
52839     T59,
52840     T60,
52841     T61,
52842     T62,
52843     T63,
52844     T64,
52845     T65,
52846     T66,
52847     T67,
52848     T68,
52849     T69,
52850     T70,
52851     T71,
52852     T72,
52853     T73,
52854     T74,
52855     T75,
52856     T76,
52857     T77,
52858     T78,
52859     T79,
52860     T80,
52861     T81,
52862     T82,
52863     T83,
52864     T84,
52865     T85,
52866     T86,
52867     T87,
52868     T88,
52869     T89,
52870     T90,
52871     T91,
52872     T92,
52873     T93,
52874     T94,
52875     T95,
52876     T96,
52877     T97,
52878     NullType,
52879     NullType,
52880     NullType,
52881     NullType,
52882     NullType,
52883     NullType,
52884     NullType,
52885     NullType,
52886     NullType,
52887     NullType,
52888     NullType,
52889     NullType,
52890     NullType,
52891     NullType,
52892     NullType,
52893     NullType,
52894     NullType,
52895     NullType,
52896     NullType,
52897     NullType,
52898     NullType,
52899     NullType,
52900     NullType,
52901     NullType,
52902     NullType,
52903     NullType,
52904     NullType,
52905     NullType,
52906     NullType,
52907     NullType>
52908 {
52909     typedef detail::KernelFunctorGlobal<
52910         T0,
52911         T1,
52912         T2,
52913         T3,
52914         T4,
52915         T5,
52916         T6,
52917         T7,
52918         T8,
52919         T9,
52920         T10,
52921         T11,
52922         T12,
52923         T13,
52924         T14,
52925         T15,
52926         T16,
52927         T17,
52928         T18,
52929         T19,
52930         T20,
52931         T21,
52932         T22,
52933         T23,
52934         T24,
52935         T25,
52936         T26,
52937         T27,
52938         T28,
52939         T29,
52940         T30,
52941         T31,
52942         T32,
52943         T33,
52944         T34,
52945         T35,
52946         T36,
52947         T37,
52948         T38,
52949         T39,
52950         T40,
52951         T41,
52952         T42,
52953         T43,
52954         T44,
52955         T45,
52956         T46,
52957         T47,
52958         T48,
52959         T49,
52960         T50,
52961         T51,
52962         T52,
52963         T53,
52964         T54,
52965         T55,
52966         T56,
52967         T57,
52968         T58,
52969         T59,
52970         T60,
52971         T61,
52972         T62,
52973         T63,
52974         T64,
52975         T65,
52976         T66,
52977         T67,
52978         T68,
52979         T69,
52980         T70,
52981         T71,
52982         T72,
52983         T73,
52984         T74,
52985         T75,
52986         T76,
52987         T77,
52988         T78,
52989         T79,
52990         T80,
52991         T81,
52992         T82,
52993         T83,
52994         T84,
52995         T85,
52996         T86,
52997         T87,
52998         T88,
52999         T89,
53000         T90,
53001         T91,
53002         T92,
53003         T93,
53004         T94,
53005         T95,
53006         T96,
53007         T97,
53008         NullType,
53009         NullType,
53010         NullType,
53011         NullType,
53012         NullType,
53013         NullType,
53014         NullType,
53015         NullType,
53016         NullType,
53017         NullType,
53018         NullType,
53019         NullType,
53020         NullType,
53021         NullType,
53022         NullType,
53023         NullType,
53024         NullType,
53025         NullType,
53026         NullType,
53027         NullType,
53028         NullType,
53029         NullType,
53030         NullType,
53031         NullType,
53032         NullType,
53033         NullType,
53034         NullType,
53035         NullType,
53036         NullType,
53037         NullType> FunctorType;
53038 
53039     FunctorType functor_;
53040 
53041     functionImplementation_(const FunctorType &functor) :
53042         functor_(functor)
53043     {
53044     }
53045         
53046     typedef std::tr1::function<Event (
53047         const EnqueueArgs&,
53048         T0,
53049         T1,
53050         T2,
53051         T3,
53052         T4,
53053         T5,
53054         T6,
53055         T7,
53056         T8,
53057         T9,
53058         T10,
53059         T11,
53060         T12,
53061         T13,
53062         T14,
53063         T15,
53064         T16,
53065         T17,
53066         T18,
53067         T19,
53068         T20,
53069         T21,
53070         T22,
53071         T23,
53072         T24,
53073         T25,
53074         T26,
53075         T27,
53076         T28,
53077         T29,
53078         T30,
53079         T31,
53080         T32,
53081         T33,
53082         T34,
53083         T35,
53084         T36,
53085         T37,
53086         T38,
53087         T39,
53088         T40,
53089         T41,
53090         T42,
53091         T43,
53092         T44,
53093         T45,
53094         T46,
53095         T47,
53096         T48,
53097         T49,
53098         T50,
53099         T51,
53100         T52,
53101         T53,
53102         T54,
53103         T55,
53104         T56,
53105         T57,
53106         T58,
53107         T59,
53108         T60,
53109         T61,
53110         T62,
53111         T63,
53112         T64,
53113         T65,
53114         T66,
53115         T67,
53116         T68,
53117         T69,
53118         T70,
53119         T71,
53120         T72,
53121         T73,
53122         T74,
53123         T75,
53124         T76,
53125         T77,
53126         T78,
53127         T79,
53128         T80,
53129         T81,
53130         T82,
53131         T83,
53132         T84,
53133         T85,
53134         T86,
53135         T87,
53136         T88,
53137         T89,
53138         T90,
53139         T91,
53140         T92,
53141         T93,
53142         T94,
53143         T95,
53144         T96,
53145         T97)> type_;
53146 
53147     Event operator()(const EnqueueArgs& enqueueArgs,
53148         T0 arg0,
53149         T1 arg1,
53150         T2 arg2,
53151         T3 arg3,
53152         T4 arg4,
53153         T5 arg5,
53154         T6 arg6,
53155         T7 arg7,
53156         T8 arg8,
53157         T9 arg9,
53158         T10 arg10,
53159         T11 arg11,
53160         T12 arg12,
53161         T13 arg13,
53162         T14 arg14,
53163         T15 arg15,
53164         T16 arg16,
53165         T17 arg17,
53166         T18 arg18,
53167         T19 arg19,
53168         T20 arg20,
53169         T21 arg21,
53170         T22 arg22,
53171         T23 arg23,
53172         T24 arg24,
53173         T25 arg25,
53174         T26 arg26,
53175         T27 arg27,
53176         T28 arg28,
53177         T29 arg29,
53178         T30 arg30,
53179         T31 arg31,
53180         T32 arg32,
53181         T33 arg33,
53182         T34 arg34,
53183         T35 arg35,
53184         T36 arg36,
53185         T37 arg37,
53186         T38 arg38,
53187         T39 arg39,
53188         T40 arg40,
53189         T41 arg41,
53190         T42 arg42,
53191         T43 arg43,
53192         T44 arg44,
53193         T45 arg45,
53194         T46 arg46,
53195         T47 arg47,
53196         T48 arg48,
53197         T49 arg49,
53198         T50 arg50,
53199         T51 arg51,
53200         T52 arg52,
53201         T53 arg53,
53202         T54 arg54,
53203         T55 arg55,
53204         T56 arg56,
53205         T57 arg57,
53206         T58 arg58,
53207         T59 arg59,
53208         T60 arg60,
53209         T61 arg61,
53210         T62 arg62,
53211         T63 arg63,
53212         T64 arg64,
53213         T65 arg65,
53214         T66 arg66,
53215         T67 arg67,
53216         T68 arg68,
53217         T69 arg69,
53218         T70 arg70,
53219         T71 arg71,
53220         T72 arg72,
53221         T73 arg73,
53222         T74 arg74,
53223         T75 arg75,
53224         T76 arg76,
53225         T77 arg77,
53226         T78 arg78,
53227         T79 arg79,
53228         T80 arg80,
53229         T81 arg81,
53230         T82 arg82,
53231         T83 arg83,
53232         T84 arg84,
53233         T85 arg85,
53234         T86 arg86,
53235         T87 arg87,
53236         T88 arg88,
53237         T89 arg89,
53238         T90 arg90,
53239         T91 arg91,
53240         T92 arg92,
53241         T93 arg93,
53242         T94 arg94,
53243         T95 arg95,
53244         T96 arg96,
53245         T97 arg97)
53246     {
53247         return functor_(
53248             enqueueArgs,
53249             arg0,
53250             arg1,
53251             arg2,
53252             arg3,
53253             arg4,
53254             arg5,
53255             arg6,
53256             arg7,
53257             arg8,
53258             arg9,
53259             arg10,
53260             arg11,
53261             arg12,
53262             arg13,
53263             arg14,
53264             arg15,
53265             arg16,
53266             arg17,
53267             arg18,
53268             arg19,
53269             arg20,
53270             arg21,
53271             arg22,
53272             arg23,
53273             arg24,
53274             arg25,
53275             arg26,
53276             arg27,
53277             arg28,
53278             arg29,
53279             arg30,
53280             arg31,
53281             arg32,
53282             arg33,
53283             arg34,
53284             arg35,
53285             arg36,
53286             arg37,
53287             arg38,
53288             arg39,
53289             arg40,
53290             arg41,
53291             arg42,
53292             arg43,
53293             arg44,
53294             arg45,
53295             arg46,
53296             arg47,
53297             arg48,
53298             arg49,
53299             arg50,
53300             arg51,
53301             arg52,
53302             arg53,
53303             arg54,
53304             arg55,
53305             arg56,
53306             arg57,
53307             arg58,
53308             arg59,
53309             arg60,
53310             arg61,
53311             arg62,
53312             arg63,
53313             arg64,
53314             arg65,
53315             arg66,
53316             arg67,
53317             arg68,
53318             arg69,
53319             arg70,
53320             arg71,
53321             arg72,
53322             arg73,
53323             arg74,
53324             arg75,
53325             arg76,
53326             arg77,
53327             arg78,
53328             arg79,
53329             arg80,
53330             arg81,
53331             arg82,
53332             arg83,
53333             arg84,
53334             arg85,
53335             arg86,
53336             arg87,
53337             arg88,
53338             arg89,
53339             arg90,
53340             arg91,
53341             arg92,
53342             arg93,
53343             arg94,
53344             arg95,
53345             arg96,
53346             arg97);
53347     }
53348 
53349     operator type_ ()    
53350     {
53351         return type_(*this);
53352     }
53353 
53354 };
53355 
53356 template<
53357     typename T0,
53358     typename T1,
53359     typename T2,
53360     typename T3,
53361     typename T4,
53362     typename T5,
53363     typename T6,
53364     typename T7,
53365     typename T8,
53366     typename T9,
53367     typename T10,
53368     typename T11,
53369     typename T12,
53370     typename T13,
53371     typename T14,
53372     typename T15,
53373     typename T16,
53374     typename T17,
53375     typename T18,
53376     typename T19,
53377     typename T20,
53378     typename T21,
53379     typename T22,
53380     typename T23,
53381     typename T24,
53382     typename T25,
53383     typename T26,
53384     typename T27,
53385     typename T28,
53386     typename T29,
53387     typename T30,
53388     typename T31,
53389     typename T32,
53390     typename T33,
53391     typename T34,
53392     typename T35,
53393     typename T36,
53394     typename T37,
53395     typename T38,
53396     typename T39,
53397     typename T40,
53398     typename T41,
53399     typename T42,
53400     typename T43,
53401     typename T44,
53402     typename T45,
53403     typename T46,
53404     typename T47,
53405     typename T48,
53406     typename T49,
53407     typename T50,
53408     typename T51,
53409     typename T52,
53410     typename T53,
53411     typename T54,
53412     typename T55,
53413     typename T56,
53414     typename T57,
53415     typename T58,
53416     typename T59,
53417     typename T60,
53418     typename T61,
53419     typename T62,
53420     typename T63,
53421     typename T64,
53422     typename T65,
53423     typename T66,
53424     typename T67,
53425     typename T68,
53426     typename T69,
53427     typename T70,
53428     typename T71,
53429     typename T72,
53430     typename T73,
53431     typename T74,
53432     typename T75,
53433     typename T76,
53434     typename T77,
53435     typename T78,
53436     typename T79,
53437     typename T80,
53438     typename T81,
53439     typename T82,
53440     typename T83,
53441     typename T84,
53442     typename T85,
53443     typename T86,
53444     typename T87,
53445     typename T88,
53446     typename T89,
53447     typename T90,
53448     typename T91,
53449     typename T92,
53450     typename T93,
53451     typename T94,
53452     typename T95,
53453     typename T96,
53454     typename T97,
53455     typename T98>
53456 struct functionImplementation_<
53457     T0,
53458     T1,
53459     T2,
53460     T3,
53461     T4,
53462     T5,
53463     T6,
53464     T7,
53465     T8,
53466     T9,
53467     T10,
53468     T11,
53469     T12,
53470     T13,
53471     T14,
53472     T15,
53473     T16,
53474     T17,
53475     T18,
53476     T19,
53477     T20,
53478     T21,
53479     T22,
53480     T23,
53481     T24,
53482     T25,
53483     T26,
53484     T27,
53485     T28,
53486     T29,
53487     T30,
53488     T31,
53489     T32,
53490     T33,
53491     T34,
53492     T35,
53493     T36,
53494     T37,
53495     T38,
53496     T39,
53497     T40,
53498     T41,
53499     T42,
53500     T43,
53501     T44,
53502     T45,
53503     T46,
53504     T47,
53505     T48,
53506     T49,
53507     T50,
53508     T51,
53509     T52,
53510     T53,
53511     T54,
53512     T55,
53513     T56,
53514     T57,
53515     T58,
53516     T59,
53517     T60,
53518     T61,
53519     T62,
53520     T63,
53521     T64,
53522     T65,
53523     T66,
53524     T67,
53525     T68,
53526     T69,
53527     T70,
53528     T71,
53529     T72,
53530     T73,
53531     T74,
53532     T75,
53533     T76,
53534     T77,
53535     T78,
53536     T79,
53537     T80,
53538     T81,
53539     T82,
53540     T83,
53541     T84,
53542     T85,
53543     T86,
53544     T87,
53545     T88,
53546     T89,
53547     T90,
53548     T91,
53549     T92,
53550     T93,
53551     T94,
53552     T95,
53553     T96,
53554     T97,
53555     T98,
53556     NullType,
53557     NullType,
53558     NullType,
53559     NullType,
53560     NullType,
53561     NullType,
53562     NullType,
53563     NullType,
53564     NullType,
53565     NullType,
53566     NullType,
53567     NullType,
53568     NullType,
53569     NullType,
53570     NullType,
53571     NullType,
53572     NullType,
53573     NullType,
53574     NullType,
53575     NullType,
53576     NullType,
53577     NullType,
53578     NullType,
53579     NullType,
53580     NullType,
53581     NullType,
53582     NullType,
53583     NullType,
53584     NullType>
53585 {
53586     typedef detail::KernelFunctorGlobal<
53587         T0,
53588         T1,
53589         T2,
53590         T3,
53591         T4,
53592         T5,
53593         T6,
53594         T7,
53595         T8,
53596         T9,
53597         T10,
53598         T11,
53599         T12,
53600         T13,
53601         T14,
53602         T15,
53603         T16,
53604         T17,
53605         T18,
53606         T19,
53607         T20,
53608         T21,
53609         T22,
53610         T23,
53611         T24,
53612         T25,
53613         T26,
53614         T27,
53615         T28,
53616         T29,
53617         T30,
53618         T31,
53619         T32,
53620         T33,
53621         T34,
53622         T35,
53623         T36,
53624         T37,
53625         T38,
53626         T39,
53627         T40,
53628         T41,
53629         T42,
53630         T43,
53631         T44,
53632         T45,
53633         T46,
53634         T47,
53635         T48,
53636         T49,
53637         T50,
53638         T51,
53639         T52,
53640         T53,
53641         T54,
53642         T55,
53643         T56,
53644         T57,
53645         T58,
53646         T59,
53647         T60,
53648         T61,
53649         T62,
53650         T63,
53651         T64,
53652         T65,
53653         T66,
53654         T67,
53655         T68,
53656         T69,
53657         T70,
53658         T71,
53659         T72,
53660         T73,
53661         T74,
53662         T75,
53663         T76,
53664         T77,
53665         T78,
53666         T79,
53667         T80,
53668         T81,
53669         T82,
53670         T83,
53671         T84,
53672         T85,
53673         T86,
53674         T87,
53675         T88,
53676         T89,
53677         T90,
53678         T91,
53679         T92,
53680         T93,
53681         T94,
53682         T95,
53683         T96,
53684         T97,
53685         T98,
53686         NullType,
53687         NullType,
53688         NullType,
53689         NullType,
53690         NullType,
53691         NullType,
53692         NullType,
53693         NullType,
53694         NullType,
53695         NullType,
53696         NullType,
53697         NullType,
53698         NullType,
53699         NullType,
53700         NullType,
53701         NullType,
53702         NullType,
53703         NullType,
53704         NullType,
53705         NullType,
53706         NullType,
53707         NullType,
53708         NullType,
53709         NullType,
53710         NullType,
53711         NullType,
53712         NullType,
53713         NullType,
53714         NullType> FunctorType;
53715 
53716     FunctorType functor_;
53717 
53718     functionImplementation_(const FunctorType &functor) :
53719         functor_(functor)
53720     {
53721     }
53722         
53723     typedef std::tr1::function<Event (
53724         const EnqueueArgs&,
53725         T0,
53726         T1,
53727         T2,
53728         T3,
53729         T4,
53730         T5,
53731         T6,
53732         T7,
53733         T8,
53734         T9,
53735         T10,
53736         T11,
53737         T12,
53738         T13,
53739         T14,
53740         T15,
53741         T16,
53742         T17,
53743         T18,
53744         T19,
53745         T20,
53746         T21,
53747         T22,
53748         T23,
53749         T24,
53750         T25,
53751         T26,
53752         T27,
53753         T28,
53754         T29,
53755         T30,
53756         T31,
53757         T32,
53758         T33,
53759         T34,
53760         T35,
53761         T36,
53762         T37,
53763         T38,
53764         T39,
53765         T40,
53766         T41,
53767         T42,
53768         T43,
53769         T44,
53770         T45,
53771         T46,
53772         T47,
53773         T48,
53774         T49,
53775         T50,
53776         T51,
53777         T52,
53778         T53,
53779         T54,
53780         T55,
53781         T56,
53782         T57,
53783         T58,
53784         T59,
53785         T60,
53786         T61,
53787         T62,
53788         T63,
53789         T64,
53790         T65,
53791         T66,
53792         T67,
53793         T68,
53794         T69,
53795         T70,
53796         T71,
53797         T72,
53798         T73,
53799         T74,
53800         T75,
53801         T76,
53802         T77,
53803         T78,
53804         T79,
53805         T80,
53806         T81,
53807         T82,
53808         T83,
53809         T84,
53810         T85,
53811         T86,
53812         T87,
53813         T88,
53814         T89,
53815         T90,
53816         T91,
53817         T92,
53818         T93,
53819         T94,
53820         T95,
53821         T96,
53822         T97,
53823         T98)> type_;
53824 
53825     Event operator()(const EnqueueArgs& enqueueArgs,
53826         T0 arg0,
53827         T1 arg1,
53828         T2 arg2,
53829         T3 arg3,
53830         T4 arg4,
53831         T5 arg5,
53832         T6 arg6,
53833         T7 arg7,
53834         T8 arg8,
53835         T9 arg9,
53836         T10 arg10,
53837         T11 arg11,
53838         T12 arg12,
53839         T13 arg13,
53840         T14 arg14,
53841         T15 arg15,
53842         T16 arg16,
53843         T17 arg17,
53844         T18 arg18,
53845         T19 arg19,
53846         T20 arg20,
53847         T21 arg21,
53848         T22 arg22,
53849         T23 arg23,
53850         T24 arg24,
53851         T25 arg25,
53852         T26 arg26,
53853         T27 arg27,
53854         T28 arg28,
53855         T29 arg29,
53856         T30 arg30,
53857         T31 arg31,
53858         T32 arg32,
53859         T33 arg33,
53860         T34 arg34,
53861         T35 arg35,
53862         T36 arg36,
53863         T37 arg37,
53864         T38 arg38,
53865         T39 arg39,
53866         T40 arg40,
53867         T41 arg41,
53868         T42 arg42,
53869         T43 arg43,
53870         T44 arg44,
53871         T45 arg45,
53872         T46 arg46,
53873         T47 arg47,
53874         T48 arg48,
53875         T49 arg49,
53876         T50 arg50,
53877         T51 arg51,
53878         T52 arg52,
53879         T53 arg53,
53880         T54 arg54,
53881         T55 arg55,
53882         T56 arg56,
53883         T57 arg57,
53884         T58 arg58,
53885         T59 arg59,
53886         T60 arg60,
53887         T61 arg61,
53888         T62 arg62,
53889         T63 arg63,
53890         T64 arg64,
53891         T65 arg65,
53892         T66 arg66,
53893         T67 arg67,
53894         T68 arg68,
53895         T69 arg69,
53896         T70 arg70,
53897         T71 arg71,
53898         T72 arg72,
53899         T73 arg73,
53900         T74 arg74,
53901         T75 arg75,
53902         T76 arg76,
53903         T77 arg77,
53904         T78 arg78,
53905         T79 arg79,
53906         T80 arg80,
53907         T81 arg81,
53908         T82 arg82,
53909         T83 arg83,
53910         T84 arg84,
53911         T85 arg85,
53912         T86 arg86,
53913         T87 arg87,
53914         T88 arg88,
53915         T89 arg89,
53916         T90 arg90,
53917         T91 arg91,
53918         T92 arg92,
53919         T93 arg93,
53920         T94 arg94,
53921         T95 arg95,
53922         T96 arg96,
53923         T97 arg97,
53924         T98 arg98)
53925     {
53926         return functor_(
53927             enqueueArgs,
53928             arg0,
53929             arg1,
53930             arg2,
53931             arg3,
53932             arg4,
53933             arg5,
53934             arg6,
53935             arg7,
53936             arg8,
53937             arg9,
53938             arg10,
53939             arg11,
53940             arg12,
53941             arg13,
53942             arg14,
53943             arg15,
53944             arg16,
53945             arg17,
53946             arg18,
53947             arg19,
53948             arg20,
53949             arg21,
53950             arg22,
53951             arg23,
53952             arg24,
53953             arg25,
53954             arg26,
53955             arg27,
53956             arg28,
53957             arg29,
53958             arg30,
53959             arg31,
53960             arg32,
53961             arg33,
53962             arg34,
53963             arg35,
53964             arg36,
53965             arg37,
53966             arg38,
53967             arg39,
53968             arg40,
53969             arg41,
53970             arg42,
53971             arg43,
53972             arg44,
53973             arg45,
53974             arg46,
53975             arg47,
53976             arg48,
53977             arg49,
53978             arg50,
53979             arg51,
53980             arg52,
53981             arg53,
53982             arg54,
53983             arg55,
53984             arg56,
53985             arg57,
53986             arg58,
53987             arg59,
53988             arg60,
53989             arg61,
53990             arg62,
53991             arg63,
53992             arg64,
53993             arg65,
53994             arg66,
53995             arg67,
53996             arg68,
53997             arg69,
53998             arg70,
53999             arg71,
54000             arg72,
54001             arg73,
54002             arg74,
54003             arg75,
54004             arg76,
54005             arg77,
54006             arg78,
54007             arg79,
54008             arg80,
54009             arg81,
54010             arg82,
54011             arg83,
54012             arg84,
54013             arg85,
54014             arg86,
54015             arg87,
54016             arg88,
54017             arg89,
54018             arg90,
54019             arg91,
54020             arg92,
54021             arg93,
54022             arg94,
54023             arg95,
54024             arg96,
54025             arg97,
54026             arg98);
54027     }
54028 
54029     operator type_ ()    
54030     {
54031         return type_(*this);
54032     }
54033 
54034 };
54035 
54036 template<
54037     typename T0,
54038     typename T1,
54039     typename T2,
54040     typename T3,
54041     typename T4,
54042     typename T5,
54043     typename T6,
54044     typename T7,
54045     typename T8,
54046     typename T9,
54047     typename T10,
54048     typename T11,
54049     typename T12,
54050     typename T13,
54051     typename T14,
54052     typename T15,
54053     typename T16,
54054     typename T17,
54055     typename T18,
54056     typename T19,
54057     typename T20,
54058     typename T21,
54059     typename T22,
54060     typename T23,
54061     typename T24,
54062     typename T25,
54063     typename T26,
54064     typename T27,
54065     typename T28,
54066     typename T29,
54067     typename T30,
54068     typename T31,
54069     typename T32,
54070     typename T33,
54071     typename T34,
54072     typename T35,
54073     typename T36,
54074     typename T37,
54075     typename T38,
54076     typename T39,
54077     typename T40,
54078     typename T41,
54079     typename T42,
54080     typename T43,
54081     typename T44,
54082     typename T45,
54083     typename T46,
54084     typename T47,
54085     typename T48,
54086     typename T49,
54087     typename T50,
54088     typename T51,
54089     typename T52,
54090     typename T53,
54091     typename T54,
54092     typename T55,
54093     typename T56,
54094     typename T57,
54095     typename T58,
54096     typename T59,
54097     typename T60,
54098     typename T61,
54099     typename T62,
54100     typename T63,
54101     typename T64,
54102     typename T65,
54103     typename T66,
54104     typename T67,
54105     typename T68,
54106     typename T69,
54107     typename T70,
54108     typename T71,
54109     typename T72,
54110     typename T73,
54111     typename T74,
54112     typename T75,
54113     typename T76,
54114     typename T77,
54115     typename T78,
54116     typename T79,
54117     typename T80,
54118     typename T81,
54119     typename T82,
54120     typename T83,
54121     typename T84,
54122     typename T85,
54123     typename T86,
54124     typename T87,
54125     typename T88,
54126     typename T89,
54127     typename T90,
54128     typename T91,
54129     typename T92,
54130     typename T93,
54131     typename T94,
54132     typename T95,
54133     typename T96,
54134     typename T97,
54135     typename T98,
54136     typename T99>
54137 struct functionImplementation_<
54138     T0,
54139     T1,
54140     T2,
54141     T3,
54142     T4,
54143     T5,
54144     T6,
54145     T7,
54146     T8,
54147     T9,
54148     T10,
54149     T11,
54150     T12,
54151     T13,
54152     T14,
54153     T15,
54154     T16,
54155     T17,
54156     T18,
54157     T19,
54158     T20,
54159     T21,
54160     T22,
54161     T23,
54162     T24,
54163     T25,
54164     T26,
54165     T27,
54166     T28,
54167     T29,
54168     T30,
54169     T31,
54170     T32,
54171     T33,
54172     T34,
54173     T35,
54174     T36,
54175     T37,
54176     T38,
54177     T39,
54178     T40,
54179     T41,
54180     T42,
54181     T43,
54182     T44,
54183     T45,
54184     T46,
54185     T47,
54186     T48,
54187     T49,
54188     T50,
54189     T51,
54190     T52,
54191     T53,
54192     T54,
54193     T55,
54194     T56,
54195     T57,
54196     T58,
54197     T59,
54198     T60,
54199     T61,
54200     T62,
54201     T63,
54202     T64,
54203     T65,
54204     T66,
54205     T67,
54206     T68,
54207     T69,
54208     T70,
54209     T71,
54210     T72,
54211     T73,
54212     T74,
54213     T75,
54214     T76,
54215     T77,
54216     T78,
54217     T79,
54218     T80,
54219     T81,
54220     T82,
54221     T83,
54222     T84,
54223     T85,
54224     T86,
54225     T87,
54226     T88,
54227     T89,
54228     T90,
54229     T91,
54230     T92,
54231     T93,
54232     T94,
54233     T95,
54234     T96,
54235     T97,
54236     T98,
54237     T99,
54238     NullType,
54239     NullType,
54240     NullType,
54241     NullType,
54242     NullType,
54243     NullType,
54244     NullType,
54245     NullType,
54246     NullType,
54247     NullType,
54248     NullType,
54249     NullType,
54250     NullType,
54251     NullType,
54252     NullType,
54253     NullType,
54254     NullType,
54255     NullType,
54256     NullType,
54257     NullType,
54258     NullType,
54259     NullType,
54260     NullType,
54261     NullType,
54262     NullType,
54263     NullType,
54264     NullType,
54265     NullType>
54266 {
54267     typedef detail::KernelFunctorGlobal<
54268         T0,
54269         T1,
54270         T2,
54271         T3,
54272         T4,
54273         T5,
54274         T6,
54275         T7,
54276         T8,
54277         T9,
54278         T10,
54279         T11,
54280         T12,
54281         T13,
54282         T14,
54283         T15,
54284         T16,
54285         T17,
54286         T18,
54287         T19,
54288         T20,
54289         T21,
54290         T22,
54291         T23,
54292         T24,
54293         T25,
54294         T26,
54295         T27,
54296         T28,
54297         T29,
54298         T30,
54299         T31,
54300         T32,
54301         T33,
54302         T34,
54303         T35,
54304         T36,
54305         T37,
54306         T38,
54307         T39,
54308         T40,
54309         T41,
54310         T42,
54311         T43,
54312         T44,
54313         T45,
54314         T46,
54315         T47,
54316         T48,
54317         T49,
54318         T50,
54319         T51,
54320         T52,
54321         T53,
54322         T54,
54323         T55,
54324         T56,
54325         T57,
54326         T58,
54327         T59,
54328         T60,
54329         T61,
54330         T62,
54331         T63,
54332         T64,
54333         T65,
54334         T66,
54335         T67,
54336         T68,
54337         T69,
54338         T70,
54339         T71,
54340         T72,
54341         T73,
54342         T74,
54343         T75,
54344         T76,
54345         T77,
54346         T78,
54347         T79,
54348         T80,
54349         T81,
54350         T82,
54351         T83,
54352         T84,
54353         T85,
54354         T86,
54355         T87,
54356         T88,
54357         T89,
54358         T90,
54359         T91,
54360         T92,
54361         T93,
54362         T94,
54363         T95,
54364         T96,
54365         T97,
54366         T98,
54367         T99,
54368         NullType,
54369         NullType,
54370         NullType,
54371         NullType,
54372         NullType,
54373         NullType,
54374         NullType,
54375         NullType,
54376         NullType,
54377         NullType,
54378         NullType,
54379         NullType,
54380         NullType,
54381         NullType,
54382         NullType,
54383         NullType,
54384         NullType,
54385         NullType,
54386         NullType,
54387         NullType,
54388         NullType,
54389         NullType,
54390         NullType,
54391         NullType,
54392         NullType,
54393         NullType,
54394         NullType,
54395         NullType> FunctorType;
54396 
54397     FunctorType functor_;
54398 
54399     functionImplementation_(const FunctorType &functor) :
54400         functor_(functor)
54401     {
54402     }
54403         
54404     typedef std::tr1::function<Event (
54405         const EnqueueArgs&,
54406         T0,
54407         T1,
54408         T2,
54409         T3,
54410         T4,
54411         T5,
54412         T6,
54413         T7,
54414         T8,
54415         T9,
54416         T10,
54417         T11,
54418         T12,
54419         T13,
54420         T14,
54421         T15,
54422         T16,
54423         T17,
54424         T18,
54425         T19,
54426         T20,
54427         T21,
54428         T22,
54429         T23,
54430         T24,
54431         T25,
54432         T26,
54433         T27,
54434         T28,
54435         T29,
54436         T30,
54437         T31,
54438         T32,
54439         T33,
54440         T34,
54441         T35,
54442         T36,
54443         T37,
54444         T38,
54445         T39,
54446         T40,
54447         T41,
54448         T42,
54449         T43,
54450         T44,
54451         T45,
54452         T46,
54453         T47,
54454         T48,
54455         T49,
54456         T50,
54457         T51,
54458         T52,
54459         T53,
54460         T54,
54461         T55,
54462         T56,
54463         T57,
54464         T58,
54465         T59,
54466         T60,
54467         T61,
54468         T62,
54469         T63,
54470         T64,
54471         T65,
54472         T66,
54473         T67,
54474         T68,
54475         T69,
54476         T70,
54477         T71,
54478         T72,
54479         T73,
54480         T74,
54481         T75,
54482         T76,
54483         T77,
54484         T78,
54485         T79,
54486         T80,
54487         T81,
54488         T82,
54489         T83,
54490         T84,
54491         T85,
54492         T86,
54493         T87,
54494         T88,
54495         T89,
54496         T90,
54497         T91,
54498         T92,
54499         T93,
54500         T94,
54501         T95,
54502         T96,
54503         T97,
54504         T98,
54505         T99)> type_;
54506 
54507     Event operator()(const EnqueueArgs& enqueueArgs,
54508         T0 arg0,
54509         T1 arg1,
54510         T2 arg2,
54511         T3 arg3,
54512         T4 arg4,
54513         T5 arg5,
54514         T6 arg6,
54515         T7 arg7,
54516         T8 arg8,
54517         T9 arg9,
54518         T10 arg10,
54519         T11 arg11,
54520         T12 arg12,
54521         T13 arg13,
54522         T14 arg14,
54523         T15 arg15,
54524         T16 arg16,
54525         T17 arg17,
54526         T18 arg18,
54527         T19 arg19,
54528         T20 arg20,
54529         T21 arg21,
54530         T22 arg22,
54531         T23 arg23,
54532         T24 arg24,
54533         T25 arg25,
54534         T26 arg26,
54535         T27 arg27,
54536         T28 arg28,
54537         T29 arg29,
54538         T30 arg30,
54539         T31 arg31,
54540         T32 arg32,
54541         T33 arg33,
54542         T34 arg34,
54543         T35 arg35,
54544         T36 arg36,
54545         T37 arg37,
54546         T38 arg38,
54547         T39 arg39,
54548         T40 arg40,
54549         T41 arg41,
54550         T42 arg42,
54551         T43 arg43,
54552         T44 arg44,
54553         T45 arg45,
54554         T46 arg46,
54555         T47 arg47,
54556         T48 arg48,
54557         T49 arg49,
54558         T50 arg50,
54559         T51 arg51,
54560         T52 arg52,
54561         T53 arg53,
54562         T54 arg54,
54563         T55 arg55,
54564         T56 arg56,
54565         T57 arg57,
54566         T58 arg58,
54567         T59 arg59,
54568         T60 arg60,
54569         T61 arg61,
54570         T62 arg62,
54571         T63 arg63,
54572         T64 arg64,
54573         T65 arg65,
54574         T66 arg66,
54575         T67 arg67,
54576         T68 arg68,
54577         T69 arg69,
54578         T70 arg70,
54579         T71 arg71,
54580         T72 arg72,
54581         T73 arg73,
54582         T74 arg74,
54583         T75 arg75,
54584         T76 arg76,
54585         T77 arg77,
54586         T78 arg78,
54587         T79 arg79,
54588         T80 arg80,
54589         T81 arg81,
54590         T82 arg82,
54591         T83 arg83,
54592         T84 arg84,
54593         T85 arg85,
54594         T86 arg86,
54595         T87 arg87,
54596         T88 arg88,
54597         T89 arg89,
54598         T90 arg90,
54599         T91 arg91,
54600         T92 arg92,
54601         T93 arg93,
54602         T94 arg94,
54603         T95 arg95,
54604         T96 arg96,
54605         T97 arg97,
54606         T98 arg98,
54607         T99 arg99)
54608     {
54609         return functor_(
54610             enqueueArgs,
54611             arg0,
54612             arg1,
54613             arg2,
54614             arg3,
54615             arg4,
54616             arg5,
54617             arg6,
54618             arg7,
54619             arg8,
54620             arg9,
54621             arg10,
54622             arg11,
54623             arg12,
54624             arg13,
54625             arg14,
54626             arg15,
54627             arg16,
54628             arg17,
54629             arg18,
54630             arg19,
54631             arg20,
54632             arg21,
54633             arg22,
54634             arg23,
54635             arg24,
54636             arg25,
54637             arg26,
54638             arg27,
54639             arg28,
54640             arg29,
54641             arg30,
54642             arg31,
54643             arg32,
54644             arg33,
54645             arg34,
54646             arg35,
54647             arg36,
54648             arg37,
54649             arg38,
54650             arg39,
54651             arg40,
54652             arg41,
54653             arg42,
54654             arg43,
54655             arg44,
54656             arg45,
54657             arg46,
54658             arg47,
54659             arg48,
54660             arg49,
54661             arg50,
54662             arg51,
54663             arg52,
54664             arg53,
54665             arg54,
54666             arg55,
54667             arg56,
54668             arg57,
54669             arg58,
54670             arg59,
54671             arg60,
54672             arg61,
54673             arg62,
54674             arg63,
54675             arg64,
54676             arg65,
54677             arg66,
54678             arg67,
54679             arg68,
54680             arg69,
54681             arg70,
54682             arg71,
54683             arg72,
54684             arg73,
54685             arg74,
54686             arg75,
54687             arg76,
54688             arg77,
54689             arg78,
54690             arg79,
54691             arg80,
54692             arg81,
54693             arg82,
54694             arg83,
54695             arg84,
54696             arg85,
54697             arg86,
54698             arg87,
54699             arg88,
54700             arg89,
54701             arg90,
54702             arg91,
54703             arg92,
54704             arg93,
54705             arg94,
54706             arg95,
54707             arg96,
54708             arg97,
54709             arg98,
54710             arg99);
54711     }
54712 
54713     operator type_ ()    
54714     {
54715         return type_(*this);
54716     }
54717 
54718 };
54719 
54720 template<
54721     typename T0,
54722     typename T1,
54723     typename T2,
54724     typename T3,
54725     typename T4,
54726     typename T5,
54727     typename T6,
54728     typename T7,
54729     typename T8,
54730     typename T9,
54731     typename T10,
54732     typename T11,
54733     typename T12,
54734     typename T13,
54735     typename T14,
54736     typename T15,
54737     typename T16,
54738     typename T17,
54739     typename T18,
54740     typename T19,
54741     typename T20,
54742     typename T21,
54743     typename T22,
54744     typename T23,
54745     typename T24,
54746     typename T25,
54747     typename T26,
54748     typename T27,
54749     typename T28,
54750     typename T29,
54751     typename T30,
54752     typename T31,
54753     typename T32,
54754     typename T33,
54755     typename T34,
54756     typename T35,
54757     typename T36,
54758     typename T37,
54759     typename T38,
54760     typename T39,
54761     typename T40,
54762     typename T41,
54763     typename T42,
54764     typename T43,
54765     typename T44,
54766     typename T45,
54767     typename T46,
54768     typename T47,
54769     typename T48,
54770     typename T49,
54771     typename T50,
54772     typename T51,
54773     typename T52,
54774     typename T53,
54775     typename T54,
54776     typename T55,
54777     typename T56,
54778     typename T57,
54779     typename T58,
54780     typename T59,
54781     typename T60,
54782     typename T61,
54783     typename T62,
54784     typename T63,
54785     typename T64,
54786     typename T65,
54787     typename T66,
54788     typename T67,
54789     typename T68,
54790     typename T69,
54791     typename T70,
54792     typename T71,
54793     typename T72,
54794     typename T73,
54795     typename T74,
54796     typename T75,
54797     typename T76,
54798     typename T77,
54799     typename T78,
54800     typename T79,
54801     typename T80,
54802     typename T81,
54803     typename T82,
54804     typename T83,
54805     typename T84,
54806     typename T85,
54807     typename T86,
54808     typename T87,
54809     typename T88,
54810     typename T89,
54811     typename T90,
54812     typename T91,
54813     typename T92,
54814     typename T93,
54815     typename T94,
54816     typename T95,
54817     typename T96,
54818     typename T97,
54819     typename T98,
54820     typename T99,
54821     typename T100>
54822 struct functionImplementation_<
54823     T0,
54824     T1,
54825     T2,
54826     T3,
54827     T4,
54828     T5,
54829     T6,
54830     T7,
54831     T8,
54832     T9,
54833     T10,
54834     T11,
54835     T12,
54836     T13,
54837     T14,
54838     T15,
54839     T16,
54840     T17,
54841     T18,
54842     T19,
54843     T20,
54844     T21,
54845     T22,
54846     T23,
54847     T24,
54848     T25,
54849     T26,
54850     T27,
54851     T28,
54852     T29,
54853     T30,
54854     T31,
54855     T32,
54856     T33,
54857     T34,
54858     T35,
54859     T36,
54860     T37,
54861     T38,
54862     T39,
54863     T40,
54864     T41,
54865     T42,
54866     T43,
54867     T44,
54868     T45,
54869     T46,
54870     T47,
54871     T48,
54872     T49,
54873     T50,
54874     T51,
54875     T52,
54876     T53,
54877     T54,
54878     T55,
54879     T56,
54880     T57,
54881     T58,
54882     T59,
54883     T60,
54884     T61,
54885     T62,
54886     T63,
54887     T64,
54888     T65,
54889     T66,
54890     T67,
54891     T68,
54892     T69,
54893     T70,
54894     T71,
54895     T72,
54896     T73,
54897     T74,
54898     T75,
54899     T76,
54900     T77,
54901     T78,
54902     T79,
54903     T80,
54904     T81,
54905     T82,
54906     T83,
54907     T84,
54908     T85,
54909     T86,
54910     T87,
54911     T88,
54912     T89,
54913     T90,
54914     T91,
54915     T92,
54916     T93,
54917     T94,
54918     T95,
54919     T96,
54920     T97,
54921     T98,
54922     T99,
54923     T100,
54924     NullType,
54925     NullType,
54926     NullType,
54927     NullType,
54928     NullType,
54929     NullType,
54930     NullType,
54931     NullType,
54932     NullType,
54933     NullType,
54934     NullType,
54935     NullType,
54936     NullType,
54937     NullType,
54938     NullType,
54939     NullType,
54940     NullType,
54941     NullType,
54942     NullType,
54943     NullType,
54944     NullType,
54945     NullType,
54946     NullType,
54947     NullType,
54948     NullType,
54949     NullType,
54950     NullType>
54951 {
54952     typedef detail::KernelFunctorGlobal<
54953         T0,
54954         T1,
54955         T2,
54956         T3,
54957         T4,
54958         T5,
54959         T6,
54960         T7,
54961         T8,
54962         T9,
54963         T10,
54964         T11,
54965         T12,
54966         T13,
54967         T14,
54968         T15,
54969         T16,
54970         T17,
54971         T18,
54972         T19,
54973         T20,
54974         T21,
54975         T22,
54976         T23,
54977         T24,
54978         T25,
54979         T26,
54980         T27,
54981         T28,
54982         T29,
54983         T30,
54984         T31,
54985         T32,
54986         T33,
54987         T34,
54988         T35,
54989         T36,
54990         T37,
54991         T38,
54992         T39,
54993         T40,
54994         T41,
54995         T42,
54996         T43,
54997         T44,
54998         T45,
54999         T46,
55000         T47,
55001         T48,
55002         T49,
55003         T50,
55004         T51,
55005         T52,
55006         T53,
55007         T54,
55008         T55,
55009         T56,
55010         T57,
55011         T58,
55012         T59,
55013         T60,
55014         T61,
55015         T62,
55016         T63,
55017         T64,
55018         T65,
55019         T66,
55020         T67,
55021         T68,
55022         T69,
55023         T70,
55024         T71,
55025         T72,
55026         T73,
55027         T74,
55028         T75,
55029         T76,
55030         T77,
55031         T78,
55032         T79,
55033         T80,
55034         T81,
55035         T82,
55036         T83,
55037         T84,
55038         T85,
55039         T86,
55040         T87,
55041         T88,
55042         T89,
55043         T90,
55044         T91,
55045         T92,
55046         T93,
55047         T94,
55048         T95,
55049         T96,
55050         T97,
55051         T98,
55052         T99,
55053         T100,
55054         NullType,
55055         NullType,
55056         NullType,
55057         NullType,
55058         NullType,
55059         NullType,
55060         NullType,
55061         NullType,
55062         NullType,
55063         NullType,
55064         NullType,
55065         NullType,
55066         NullType,
55067         NullType,
55068         NullType,
55069         NullType,
55070         NullType,
55071         NullType,
55072         NullType,
55073         NullType,
55074         NullType,
55075         NullType,
55076         NullType,
55077         NullType,
55078         NullType,
55079         NullType,
55080         NullType> FunctorType;
55081 
55082     FunctorType functor_;
55083 
55084     functionImplementation_(const FunctorType &functor) :
55085         functor_(functor)
55086     {
55087     }
55088         
55089     typedef std::tr1::function<Event (
55090         const EnqueueArgs&,
55091         T0,
55092         T1,
55093         T2,
55094         T3,
55095         T4,
55096         T5,
55097         T6,
55098         T7,
55099         T8,
55100         T9,
55101         T10,
55102         T11,
55103         T12,
55104         T13,
55105         T14,
55106         T15,
55107         T16,
55108         T17,
55109         T18,
55110         T19,
55111         T20,
55112         T21,
55113         T22,
55114         T23,
55115         T24,
55116         T25,
55117         T26,
55118         T27,
55119         T28,
55120         T29,
55121         T30,
55122         T31,
55123         T32,
55124         T33,
55125         T34,
55126         T35,
55127         T36,
55128         T37,
55129         T38,
55130         T39,
55131         T40,
55132         T41,
55133         T42,
55134         T43,
55135         T44,
55136         T45,
55137         T46,
55138         T47,
55139         T48,
55140         T49,
55141         T50,
55142         T51,
55143         T52,
55144         T53,
55145         T54,
55146         T55,
55147         T56,
55148         T57,
55149         T58,
55150         T59,
55151         T60,
55152         T61,
55153         T62,
55154         T63,
55155         T64,
55156         T65,
55157         T66,
55158         T67,
55159         T68,
55160         T69,
55161         T70,
55162         T71,
55163         T72,
55164         T73,
55165         T74,
55166         T75,
55167         T76,
55168         T77,
55169         T78,
55170         T79,
55171         T80,
55172         T81,
55173         T82,
55174         T83,
55175         T84,
55176         T85,
55177         T86,
55178         T87,
55179         T88,
55180         T89,
55181         T90,
55182         T91,
55183         T92,
55184         T93,
55185         T94,
55186         T95,
55187         T96,
55188         T97,
55189         T98,
55190         T99,
55191         T100)> type_;
55192 
55193     Event operator()(const EnqueueArgs& enqueueArgs,
55194         T0 arg0,
55195         T1 arg1,
55196         T2 arg2,
55197         T3 arg3,
55198         T4 arg4,
55199         T5 arg5,
55200         T6 arg6,
55201         T7 arg7,
55202         T8 arg8,
55203         T9 arg9,
55204         T10 arg10,
55205         T11 arg11,
55206         T12 arg12,
55207         T13 arg13,
55208         T14 arg14,
55209         T15 arg15,
55210         T16 arg16,
55211         T17 arg17,
55212         T18 arg18,
55213         T19 arg19,
55214         T20 arg20,
55215         T21 arg21,
55216         T22 arg22,
55217         T23 arg23,
55218         T24 arg24,
55219         T25 arg25,
55220         T26 arg26,
55221         T27 arg27,
55222         T28 arg28,
55223         T29 arg29,
55224         T30 arg30,
55225         T31 arg31,
55226         T32 arg32,
55227         T33 arg33,
55228         T34 arg34,
55229         T35 arg35,
55230         T36 arg36,
55231         T37 arg37,
55232         T38 arg38,
55233         T39 arg39,
55234         T40 arg40,
55235         T41 arg41,
55236         T42 arg42,
55237         T43 arg43,
55238         T44 arg44,
55239         T45 arg45,
55240         T46 arg46,
55241         T47 arg47,
55242         T48 arg48,
55243         T49 arg49,
55244         T50 arg50,
55245         T51 arg51,
55246         T52 arg52,
55247         T53 arg53,
55248         T54 arg54,
55249         T55 arg55,
55250         T56 arg56,
55251         T57 arg57,
55252         T58 arg58,
55253         T59 arg59,
55254         T60 arg60,
55255         T61 arg61,
55256         T62 arg62,
55257         T63 arg63,
55258         T64 arg64,
55259         T65 arg65,
55260         T66 arg66,
55261         T67 arg67,
55262         T68 arg68,
55263         T69 arg69,
55264         T70 arg70,
55265         T71 arg71,
55266         T72 arg72,
55267         T73 arg73,
55268         T74 arg74,
55269         T75 arg75,
55270         T76 arg76,
55271         T77 arg77,
55272         T78 arg78,
55273         T79 arg79,
55274         T80 arg80,
55275         T81 arg81,
55276         T82 arg82,
55277         T83 arg83,
55278         T84 arg84,
55279         T85 arg85,
55280         T86 arg86,
55281         T87 arg87,
55282         T88 arg88,
55283         T89 arg89,
55284         T90 arg90,
55285         T91 arg91,
55286         T92 arg92,
55287         T93 arg93,
55288         T94 arg94,
55289         T95 arg95,
55290         T96 arg96,
55291         T97 arg97,
55292         T98 arg98,
55293         T99 arg99,
55294         T100 arg100)
55295     {
55296         return functor_(
55297             enqueueArgs,
55298             arg0,
55299             arg1,
55300             arg2,
55301             arg3,
55302             arg4,
55303             arg5,
55304             arg6,
55305             arg7,
55306             arg8,
55307             arg9,
55308             arg10,
55309             arg11,
55310             arg12,
55311             arg13,
55312             arg14,
55313             arg15,
55314             arg16,
55315             arg17,
55316             arg18,
55317             arg19,
55318             arg20,
55319             arg21,
55320             arg22,
55321             arg23,
55322             arg24,
55323             arg25,
55324             arg26,
55325             arg27,
55326             arg28,
55327             arg29,
55328             arg30,
55329             arg31,
55330             arg32,
55331             arg33,
55332             arg34,
55333             arg35,
55334             arg36,
55335             arg37,
55336             arg38,
55337             arg39,
55338             arg40,
55339             arg41,
55340             arg42,
55341             arg43,
55342             arg44,
55343             arg45,
55344             arg46,
55345             arg47,
55346             arg48,
55347             arg49,
55348             arg50,
55349             arg51,
55350             arg52,
55351             arg53,
55352             arg54,
55353             arg55,
55354             arg56,
55355             arg57,
55356             arg58,
55357             arg59,
55358             arg60,
55359             arg61,
55360             arg62,
55361             arg63,
55362             arg64,
55363             arg65,
55364             arg66,
55365             arg67,
55366             arg68,
55367             arg69,
55368             arg70,
55369             arg71,
55370             arg72,
55371             arg73,
55372             arg74,
55373             arg75,
55374             arg76,
55375             arg77,
55376             arg78,
55377             arg79,
55378             arg80,
55379             arg81,
55380             arg82,
55381             arg83,
55382             arg84,
55383             arg85,
55384             arg86,
55385             arg87,
55386             arg88,
55387             arg89,
55388             arg90,
55389             arg91,
55390             arg92,
55391             arg93,
55392             arg94,
55393             arg95,
55394             arg96,
55395             arg97,
55396             arg98,
55397             arg99,
55398             arg100);
55399     }
55400 
55401     operator type_ ()    
55402     {
55403         return type_(*this);
55404     }
55405 
55406 };
55407 
55408 template<
55409     typename T0,
55410     typename T1,
55411     typename T2,
55412     typename T3,
55413     typename T4,
55414     typename T5,
55415     typename T6,
55416     typename T7,
55417     typename T8,
55418     typename T9,
55419     typename T10,
55420     typename T11,
55421     typename T12,
55422     typename T13,
55423     typename T14,
55424     typename T15,
55425     typename T16,
55426     typename T17,
55427     typename T18,
55428     typename T19,
55429     typename T20,
55430     typename T21,
55431     typename T22,
55432     typename T23,
55433     typename T24,
55434     typename T25,
55435     typename T26,
55436     typename T27,
55437     typename T28,
55438     typename T29,
55439     typename T30,
55440     typename T31,
55441     typename T32,
55442     typename T33,
55443     typename T34,
55444     typename T35,
55445     typename T36,
55446     typename T37,
55447     typename T38,
55448     typename T39,
55449     typename T40,
55450     typename T41,
55451     typename T42,
55452     typename T43,
55453     typename T44,
55454     typename T45,
55455     typename T46,
55456     typename T47,
55457     typename T48,
55458     typename T49,
55459     typename T50,
55460     typename T51,
55461     typename T52,
55462     typename T53,
55463     typename T54,
55464     typename T55,
55465     typename T56,
55466     typename T57,
55467     typename T58,
55468     typename T59,
55469     typename T60,
55470     typename T61,
55471     typename T62,
55472     typename T63,
55473     typename T64,
55474     typename T65,
55475     typename T66,
55476     typename T67,
55477     typename T68,
55478     typename T69,
55479     typename T70,
55480     typename T71,
55481     typename T72,
55482     typename T73,
55483     typename T74,
55484     typename T75,
55485     typename T76,
55486     typename T77,
55487     typename T78,
55488     typename T79,
55489     typename T80,
55490     typename T81,
55491     typename T82,
55492     typename T83,
55493     typename T84,
55494     typename T85,
55495     typename T86,
55496     typename T87,
55497     typename T88,
55498     typename T89,
55499     typename T90,
55500     typename T91,
55501     typename T92,
55502     typename T93,
55503     typename T94,
55504     typename T95,
55505     typename T96,
55506     typename T97,
55507     typename T98,
55508     typename T99,
55509     typename T100,
55510     typename T101>
55511 struct functionImplementation_<
55512     T0,
55513     T1,
55514     T2,
55515     T3,
55516     T4,
55517     T5,
55518     T6,
55519     T7,
55520     T8,
55521     T9,
55522     T10,
55523     T11,
55524     T12,
55525     T13,
55526     T14,
55527     T15,
55528     T16,
55529     T17,
55530     T18,
55531     T19,
55532     T20,
55533     T21,
55534     T22,
55535     T23,
55536     T24,
55537     T25,
55538     T26,
55539     T27,
55540     T28,
55541     T29,
55542     T30,
55543     T31,
55544     T32,
55545     T33,
55546     T34,
55547     T35,
55548     T36,
55549     T37,
55550     T38,
55551     T39,
55552     T40,
55553     T41,
55554     T42,
55555     T43,
55556     T44,
55557     T45,
55558     T46,
55559     T47,
55560     T48,
55561     T49,
55562     T50,
55563     T51,
55564     T52,
55565     T53,
55566     T54,
55567     T55,
55568     T56,
55569     T57,
55570     T58,
55571     T59,
55572     T60,
55573     T61,
55574     T62,
55575     T63,
55576     T64,
55577     T65,
55578     T66,
55579     T67,
55580     T68,
55581     T69,
55582     T70,
55583     T71,
55584     T72,
55585     T73,
55586     T74,
55587     T75,
55588     T76,
55589     T77,
55590     T78,
55591     T79,
55592     T80,
55593     T81,
55594     T82,
55595     T83,
55596     T84,
55597     T85,
55598     T86,
55599     T87,
55600     T88,
55601     T89,
55602     T90,
55603     T91,
55604     T92,
55605     T93,
55606     T94,
55607     T95,
55608     T96,
55609     T97,
55610     T98,
55611     T99,
55612     T100,
55613     T101,
55614     NullType,
55615     NullType,
55616     NullType,
55617     NullType,
55618     NullType,
55619     NullType,
55620     NullType,
55621     NullType,
55622     NullType,
55623     NullType,
55624     NullType,
55625     NullType,
55626     NullType,
55627     NullType,
55628     NullType,
55629     NullType,
55630     NullType,
55631     NullType,
55632     NullType,
55633     NullType,
55634     NullType,
55635     NullType,
55636     NullType,
55637     NullType,
55638     NullType,
55639     NullType>
55640 {
55641     typedef detail::KernelFunctorGlobal<
55642         T0,
55643         T1,
55644         T2,
55645         T3,
55646         T4,
55647         T5,
55648         T6,
55649         T7,
55650         T8,
55651         T9,
55652         T10,
55653         T11,
55654         T12,
55655         T13,
55656         T14,
55657         T15,
55658         T16,
55659         T17,
55660         T18,
55661         T19,
55662         T20,
55663         T21,
55664         T22,
55665         T23,
55666         T24,
55667         T25,
55668         T26,
55669         T27,
55670         T28,
55671         T29,
55672         T30,
55673         T31,
55674         T32,
55675         T33,
55676         T34,
55677         T35,
55678         T36,
55679         T37,
55680         T38,
55681         T39,
55682         T40,
55683         T41,
55684         T42,
55685         T43,
55686         T44,
55687         T45,
55688         T46,
55689         T47,
55690         T48,
55691         T49,
55692         T50,
55693         T51,
55694         T52,
55695         T53,
55696         T54,
55697         T55,
55698         T56,
55699         T57,
55700         T58,
55701         T59,
55702         T60,
55703         T61,
55704         T62,
55705         T63,
55706         T64,
55707         T65,
55708         T66,
55709         T67,
55710         T68,
55711         T69,
55712         T70,
55713         T71,
55714         T72,
55715         T73,
55716         T74,
55717         T75,
55718         T76,
55719         T77,
55720         T78,
55721         T79,
55722         T80,
55723         T81,
55724         T82,
55725         T83,
55726         T84,
55727         T85,
55728         T86,
55729         T87,
55730         T88,
55731         T89,
55732         T90,
55733         T91,
55734         T92,
55735         T93,
55736         T94,
55737         T95,
55738         T96,
55739         T97,
55740         T98,
55741         T99,
55742         T100,
55743         T101,
55744         NullType,
55745         NullType,
55746         NullType,
55747         NullType,
55748         NullType,
55749         NullType,
55750         NullType,
55751         NullType,
55752         NullType,
55753         NullType,
55754         NullType,
55755         NullType,
55756         NullType,
55757         NullType,
55758         NullType,
55759         NullType,
55760         NullType,
55761         NullType,
55762         NullType,
55763         NullType,
55764         NullType,
55765         NullType,
55766         NullType,
55767         NullType,
55768         NullType,
55769         NullType> FunctorType;
55770 
55771     FunctorType functor_;
55772 
55773     functionImplementation_(const FunctorType &functor) :
55774         functor_(functor)
55775     {
55776     }
55777         
55778     typedef std::tr1::function<Event (
55779         const EnqueueArgs&,
55780         T0,
55781         T1,
55782         T2,
55783         T3,
55784         T4,
55785         T5,
55786         T6,
55787         T7,
55788         T8,
55789         T9,
55790         T10,
55791         T11,
55792         T12,
55793         T13,
55794         T14,
55795         T15,
55796         T16,
55797         T17,
55798         T18,
55799         T19,
55800         T20,
55801         T21,
55802         T22,
55803         T23,
55804         T24,
55805         T25,
55806         T26,
55807         T27,
55808         T28,
55809         T29,
55810         T30,
55811         T31,
55812         T32,
55813         T33,
55814         T34,
55815         T35,
55816         T36,
55817         T37,
55818         T38,
55819         T39,
55820         T40,
55821         T41,
55822         T42,
55823         T43,
55824         T44,
55825         T45,
55826         T46,
55827         T47,
55828         T48,
55829         T49,
55830         T50,
55831         T51,
55832         T52,
55833         T53,
55834         T54,
55835         T55,
55836         T56,
55837         T57,
55838         T58,
55839         T59,
55840         T60,
55841         T61,
55842         T62,
55843         T63,
55844         T64,
55845         T65,
55846         T66,
55847         T67,
55848         T68,
55849         T69,
55850         T70,
55851         T71,
55852         T72,
55853         T73,
55854         T74,
55855         T75,
55856         T76,
55857         T77,
55858         T78,
55859         T79,
55860         T80,
55861         T81,
55862         T82,
55863         T83,
55864         T84,
55865         T85,
55866         T86,
55867         T87,
55868         T88,
55869         T89,
55870         T90,
55871         T91,
55872         T92,
55873         T93,
55874         T94,
55875         T95,
55876         T96,
55877         T97,
55878         T98,
55879         T99,
55880         T100,
55881         T101)> type_;
55882 
55883     Event operator()(const EnqueueArgs& enqueueArgs,
55884         T0 arg0,
55885         T1 arg1,
55886         T2 arg2,
55887         T3 arg3,
55888         T4 arg4,
55889         T5 arg5,
55890         T6 arg6,
55891         T7 arg7,
55892         T8 arg8,
55893         T9 arg9,
55894         T10 arg10,
55895         T11 arg11,
55896         T12 arg12,
55897         T13 arg13,
55898         T14 arg14,
55899         T15 arg15,
55900         T16 arg16,
55901         T17 arg17,
55902         T18 arg18,
55903         T19 arg19,
55904         T20 arg20,
55905         T21 arg21,
55906         T22 arg22,
55907         T23 arg23,
55908         T24 arg24,
55909         T25 arg25,
55910         T26 arg26,
55911         T27 arg27,
55912         T28 arg28,
55913         T29 arg29,
55914         T30 arg30,
55915         T31 arg31,
55916         T32 arg32,
55917         T33 arg33,
55918         T34 arg34,
55919         T35 arg35,
55920         T36 arg36,
55921         T37 arg37,
55922         T38 arg38,
55923         T39 arg39,
55924         T40 arg40,
55925         T41 arg41,
55926         T42 arg42,
55927         T43 arg43,
55928         T44 arg44,
55929         T45 arg45,
55930         T46 arg46,
55931         T47 arg47,
55932         T48 arg48,
55933         T49 arg49,
55934         T50 arg50,
55935         T51 arg51,
55936         T52 arg52,
55937         T53 arg53,
55938         T54 arg54,
55939         T55 arg55,
55940         T56 arg56,
55941         T57 arg57,
55942         T58 arg58,
55943         T59 arg59,
55944         T60 arg60,
55945         T61 arg61,
55946         T62 arg62,
55947         T63 arg63,
55948         T64 arg64,
55949         T65 arg65,
55950         T66 arg66,
55951         T67 arg67,
55952         T68 arg68,
55953         T69 arg69,
55954         T70 arg70,
55955         T71 arg71,
55956         T72 arg72,
55957         T73 arg73,
55958         T74 arg74,
55959         T75 arg75,
55960         T76 arg76,
55961         T77 arg77,
55962         T78 arg78,
55963         T79 arg79,
55964         T80 arg80,
55965         T81 arg81,
55966         T82 arg82,
55967         T83 arg83,
55968         T84 arg84,
55969         T85 arg85,
55970         T86 arg86,
55971         T87 arg87,
55972         T88 arg88,
55973         T89 arg89,
55974         T90 arg90,
55975         T91 arg91,
55976         T92 arg92,
55977         T93 arg93,
55978         T94 arg94,
55979         T95 arg95,
55980         T96 arg96,
55981         T97 arg97,
55982         T98 arg98,
55983         T99 arg99,
55984         T100 arg100,
55985         T101 arg101)
55986     {
55987         return functor_(
55988             enqueueArgs,
55989             arg0,
55990             arg1,
55991             arg2,
55992             arg3,
55993             arg4,
55994             arg5,
55995             arg6,
55996             arg7,
55997             arg8,
55998             arg9,
55999             arg10,
56000             arg11,
56001             arg12,
56002             arg13,
56003             arg14,
56004             arg15,
56005             arg16,
56006             arg17,
56007             arg18,
56008             arg19,
56009             arg20,
56010             arg21,
56011             arg22,
56012             arg23,
56013             arg24,
56014             arg25,
56015             arg26,
56016             arg27,
56017             arg28,
56018             arg29,
56019             arg30,
56020             arg31,
56021             arg32,
56022             arg33,
56023             arg34,
56024             arg35,
56025             arg36,
56026             arg37,
56027             arg38,
56028             arg39,
56029             arg40,
56030             arg41,
56031             arg42,
56032             arg43,
56033             arg44,
56034             arg45,
56035             arg46,
56036             arg47,
56037             arg48,
56038             arg49,
56039             arg50,
56040             arg51,
56041             arg52,
56042             arg53,
56043             arg54,
56044             arg55,
56045             arg56,
56046             arg57,
56047             arg58,
56048             arg59,
56049             arg60,
56050             arg61,
56051             arg62,
56052             arg63,
56053             arg64,
56054             arg65,
56055             arg66,
56056             arg67,
56057             arg68,
56058             arg69,
56059             arg70,
56060             arg71,
56061             arg72,
56062             arg73,
56063             arg74,
56064             arg75,
56065             arg76,
56066             arg77,
56067             arg78,
56068             arg79,
56069             arg80,
56070             arg81,
56071             arg82,
56072             arg83,
56073             arg84,
56074             arg85,
56075             arg86,
56076             arg87,
56077             arg88,
56078             arg89,
56079             arg90,
56080             arg91,
56081             arg92,
56082             arg93,
56083             arg94,
56084             arg95,
56085             arg96,
56086             arg97,
56087             arg98,
56088             arg99,
56089             arg100,
56090             arg101);
56091     }
56092 
56093     operator type_ ()    
56094     {
56095         return type_(*this);
56096     }
56097 
56098 };
56099 
56100 template<
56101     typename T0,
56102     typename T1,
56103     typename T2,
56104     typename T3,
56105     typename T4,
56106     typename T5,
56107     typename T6,
56108     typename T7,
56109     typename T8,
56110     typename T9,
56111     typename T10,
56112     typename T11,
56113     typename T12,
56114     typename T13,
56115     typename T14,
56116     typename T15,
56117     typename T16,
56118     typename T17,
56119     typename T18,
56120     typename T19,
56121     typename T20,
56122     typename T21,
56123     typename T22,
56124     typename T23,
56125     typename T24,
56126     typename T25,
56127     typename T26,
56128     typename T27,
56129     typename T28,
56130     typename T29,
56131     typename T30,
56132     typename T31,
56133     typename T32,
56134     typename T33,
56135     typename T34,
56136     typename T35,
56137     typename T36,
56138     typename T37,
56139     typename T38,
56140     typename T39,
56141     typename T40,
56142     typename T41,
56143     typename T42,
56144     typename T43,
56145     typename T44,
56146     typename T45,
56147     typename T46,
56148     typename T47,
56149     typename T48,
56150     typename T49,
56151     typename T50,
56152     typename T51,
56153     typename T52,
56154     typename T53,
56155     typename T54,
56156     typename T55,
56157     typename T56,
56158     typename T57,
56159     typename T58,
56160     typename T59,
56161     typename T60,
56162     typename T61,
56163     typename T62,
56164     typename T63,
56165     typename T64,
56166     typename T65,
56167     typename T66,
56168     typename T67,
56169     typename T68,
56170     typename T69,
56171     typename T70,
56172     typename T71,
56173     typename T72,
56174     typename T73,
56175     typename T74,
56176     typename T75,
56177     typename T76,
56178     typename T77,
56179     typename T78,
56180     typename T79,
56181     typename T80,
56182     typename T81,
56183     typename T82,
56184     typename T83,
56185     typename T84,
56186     typename T85,
56187     typename T86,
56188     typename T87,
56189     typename T88,
56190     typename T89,
56191     typename T90,
56192     typename T91,
56193     typename T92,
56194     typename T93,
56195     typename T94,
56196     typename T95,
56197     typename T96,
56198     typename T97,
56199     typename T98,
56200     typename T99,
56201     typename T100,
56202     typename T101,
56203     typename T102>
56204 struct functionImplementation_<
56205     T0,
56206     T1,
56207     T2,
56208     T3,
56209     T4,
56210     T5,
56211     T6,
56212     T7,
56213     T8,
56214     T9,
56215     T10,
56216     T11,
56217     T12,
56218     T13,
56219     T14,
56220     T15,
56221     T16,
56222     T17,
56223     T18,
56224     T19,
56225     T20,
56226     T21,
56227     T22,
56228     T23,
56229     T24,
56230     T25,
56231     T26,
56232     T27,
56233     T28,
56234     T29,
56235     T30,
56236     T31,
56237     T32,
56238     T33,
56239     T34,
56240     T35,
56241     T36,
56242     T37,
56243     T38,
56244     T39,
56245     T40,
56246     T41,
56247     T42,
56248     T43,
56249     T44,
56250     T45,
56251     T46,
56252     T47,
56253     T48,
56254     T49,
56255     T50,
56256     T51,
56257     T52,
56258     T53,
56259     T54,
56260     T55,
56261     T56,
56262     T57,
56263     T58,
56264     T59,
56265     T60,
56266     T61,
56267     T62,
56268     T63,
56269     T64,
56270     T65,
56271     T66,
56272     T67,
56273     T68,
56274     T69,
56275     T70,
56276     T71,
56277     T72,
56278     T73,
56279     T74,
56280     T75,
56281     T76,
56282     T77,
56283     T78,
56284     T79,
56285     T80,
56286     T81,
56287     T82,
56288     T83,
56289     T84,
56290     T85,
56291     T86,
56292     T87,
56293     T88,
56294     T89,
56295     T90,
56296     T91,
56297     T92,
56298     T93,
56299     T94,
56300     T95,
56301     T96,
56302     T97,
56303     T98,
56304     T99,
56305     T100,
56306     T101,
56307     T102,
56308     NullType,
56309     NullType,
56310     NullType,
56311     NullType,
56312     NullType,
56313     NullType,
56314     NullType,
56315     NullType,
56316     NullType,
56317     NullType,
56318     NullType,
56319     NullType,
56320     NullType,
56321     NullType,
56322     NullType,
56323     NullType,
56324     NullType,
56325     NullType,
56326     NullType,
56327     NullType,
56328     NullType,
56329     NullType,
56330     NullType,
56331     NullType,
56332     NullType>
56333 {
56334     typedef detail::KernelFunctorGlobal<
56335         T0,
56336         T1,
56337         T2,
56338         T3,
56339         T4,
56340         T5,
56341         T6,
56342         T7,
56343         T8,
56344         T9,
56345         T10,
56346         T11,
56347         T12,
56348         T13,
56349         T14,
56350         T15,
56351         T16,
56352         T17,
56353         T18,
56354         T19,
56355         T20,
56356         T21,
56357         T22,
56358         T23,
56359         T24,
56360         T25,
56361         T26,
56362         T27,
56363         T28,
56364         T29,
56365         T30,
56366         T31,
56367         T32,
56368         T33,
56369         T34,
56370         T35,
56371         T36,
56372         T37,
56373         T38,
56374         T39,
56375         T40,
56376         T41,
56377         T42,
56378         T43,
56379         T44,
56380         T45,
56381         T46,
56382         T47,
56383         T48,
56384         T49,
56385         T50,
56386         T51,
56387         T52,
56388         T53,
56389         T54,
56390         T55,
56391         T56,
56392         T57,
56393         T58,
56394         T59,
56395         T60,
56396         T61,
56397         T62,
56398         T63,
56399         T64,
56400         T65,
56401         T66,
56402         T67,
56403         T68,
56404         T69,
56405         T70,
56406         T71,
56407         T72,
56408         T73,
56409         T74,
56410         T75,
56411         T76,
56412         T77,
56413         T78,
56414         T79,
56415         T80,
56416         T81,
56417         T82,
56418         T83,
56419         T84,
56420         T85,
56421         T86,
56422         T87,
56423         T88,
56424         T89,
56425         T90,
56426         T91,
56427         T92,
56428         T93,
56429         T94,
56430         T95,
56431         T96,
56432         T97,
56433         T98,
56434         T99,
56435         T100,
56436         T101,
56437         T102,
56438         NullType,
56439         NullType,
56440         NullType,
56441         NullType,
56442         NullType,
56443         NullType,
56444         NullType,
56445         NullType,
56446         NullType,
56447         NullType,
56448         NullType,
56449         NullType,
56450         NullType,
56451         NullType,
56452         NullType,
56453         NullType,
56454         NullType,
56455         NullType,
56456         NullType,
56457         NullType,
56458         NullType,
56459         NullType,
56460         NullType,
56461         NullType,
56462         NullType> FunctorType;
56463 
56464     FunctorType functor_;
56465 
56466     functionImplementation_(const FunctorType &functor) :
56467         functor_(functor)
56468     {
56469     }
56470         
56471     typedef std::tr1::function<Event (
56472         const EnqueueArgs&,
56473         T0,
56474         T1,
56475         T2,
56476         T3,
56477         T4,
56478         T5,
56479         T6,
56480         T7,
56481         T8,
56482         T9,
56483         T10,
56484         T11,
56485         T12,
56486         T13,
56487         T14,
56488         T15,
56489         T16,
56490         T17,
56491         T18,
56492         T19,
56493         T20,
56494         T21,
56495         T22,
56496         T23,
56497         T24,
56498         T25,
56499         T26,
56500         T27,
56501         T28,
56502         T29,
56503         T30,
56504         T31,
56505         T32,
56506         T33,
56507         T34,
56508         T35,
56509         T36,
56510         T37,
56511         T38,
56512         T39,
56513         T40,
56514         T41,
56515         T42,
56516         T43,
56517         T44,
56518         T45,
56519         T46,
56520         T47,
56521         T48,
56522         T49,
56523         T50,
56524         T51,
56525         T52,
56526         T53,
56527         T54,
56528         T55,
56529         T56,
56530         T57,
56531         T58,
56532         T59,
56533         T60,
56534         T61,
56535         T62,
56536         T63,
56537         T64,
56538         T65,
56539         T66,
56540         T67,
56541         T68,
56542         T69,
56543         T70,
56544         T71,
56545         T72,
56546         T73,
56547         T74,
56548         T75,
56549         T76,
56550         T77,
56551         T78,
56552         T79,
56553         T80,
56554         T81,
56555         T82,
56556         T83,
56557         T84,
56558         T85,
56559         T86,
56560         T87,
56561         T88,
56562         T89,
56563         T90,
56564         T91,
56565         T92,
56566         T93,
56567         T94,
56568         T95,
56569         T96,
56570         T97,
56571         T98,
56572         T99,
56573         T100,
56574         T101,
56575         T102)> type_;
56576 
56577     Event operator()(const EnqueueArgs& enqueueArgs,
56578         T0 arg0,
56579         T1 arg1,
56580         T2 arg2,
56581         T3 arg3,
56582         T4 arg4,
56583         T5 arg5,
56584         T6 arg6,
56585         T7 arg7,
56586         T8 arg8,
56587         T9 arg9,
56588         T10 arg10,
56589         T11 arg11,
56590         T12 arg12,
56591         T13 arg13,
56592         T14 arg14,
56593         T15 arg15,
56594         T16 arg16,
56595         T17 arg17,
56596         T18 arg18,
56597         T19 arg19,
56598         T20 arg20,
56599         T21 arg21,
56600         T22 arg22,
56601         T23 arg23,
56602         T24 arg24,
56603         T25 arg25,
56604         T26 arg26,
56605         T27 arg27,
56606         T28 arg28,
56607         T29 arg29,
56608         T30 arg30,
56609         T31 arg31,
56610         T32 arg32,
56611         T33 arg33,
56612         T34 arg34,
56613         T35 arg35,
56614         T36 arg36,
56615         T37 arg37,
56616         T38 arg38,
56617         T39 arg39,
56618         T40 arg40,
56619         T41 arg41,
56620         T42 arg42,
56621         T43 arg43,
56622         T44 arg44,
56623         T45 arg45,
56624         T46 arg46,
56625         T47 arg47,
56626         T48 arg48,
56627         T49 arg49,
56628         T50 arg50,
56629         T51 arg51,
56630         T52 arg52,
56631         T53 arg53,
56632         T54 arg54,
56633         T55 arg55,
56634         T56 arg56,
56635         T57 arg57,
56636         T58 arg58,
56637         T59 arg59,
56638         T60 arg60,
56639         T61 arg61,
56640         T62 arg62,
56641         T63 arg63,
56642         T64 arg64,
56643         T65 arg65,
56644         T66 arg66,
56645         T67 arg67,
56646         T68 arg68,
56647         T69 arg69,
56648         T70 arg70,
56649         T71 arg71,
56650         T72 arg72,
56651         T73 arg73,
56652         T74 arg74,
56653         T75 arg75,
56654         T76 arg76,
56655         T77 arg77,
56656         T78 arg78,
56657         T79 arg79,
56658         T80 arg80,
56659         T81 arg81,
56660         T82 arg82,
56661         T83 arg83,
56662         T84 arg84,
56663         T85 arg85,
56664         T86 arg86,
56665         T87 arg87,
56666         T88 arg88,
56667         T89 arg89,
56668         T90 arg90,
56669         T91 arg91,
56670         T92 arg92,
56671         T93 arg93,
56672         T94 arg94,
56673         T95 arg95,
56674         T96 arg96,
56675         T97 arg97,
56676         T98 arg98,
56677         T99 arg99,
56678         T100 arg100,
56679         T101 arg101,
56680         T102 arg102)
56681     {
56682         return functor_(
56683             enqueueArgs,
56684             arg0,
56685             arg1,
56686             arg2,
56687             arg3,
56688             arg4,
56689             arg5,
56690             arg6,
56691             arg7,
56692             arg8,
56693             arg9,
56694             arg10,
56695             arg11,
56696             arg12,
56697             arg13,
56698             arg14,
56699             arg15,
56700             arg16,
56701             arg17,
56702             arg18,
56703             arg19,
56704             arg20,
56705             arg21,
56706             arg22,
56707             arg23,
56708             arg24,
56709             arg25,
56710             arg26,
56711             arg27,
56712             arg28,
56713             arg29,
56714             arg30,
56715             arg31,
56716             arg32,
56717             arg33,
56718             arg34,
56719             arg35,
56720             arg36,
56721             arg37,
56722             arg38,
56723             arg39,
56724             arg40,
56725             arg41,
56726             arg42,
56727             arg43,
56728             arg44,
56729             arg45,
56730             arg46,
56731             arg47,
56732             arg48,
56733             arg49,
56734             arg50,
56735             arg51,
56736             arg52,
56737             arg53,
56738             arg54,
56739             arg55,
56740             arg56,
56741             arg57,
56742             arg58,
56743             arg59,
56744             arg60,
56745             arg61,
56746             arg62,
56747             arg63,
56748             arg64,
56749             arg65,
56750             arg66,
56751             arg67,
56752             arg68,
56753             arg69,
56754             arg70,
56755             arg71,
56756             arg72,
56757             arg73,
56758             arg74,
56759             arg75,
56760             arg76,
56761             arg77,
56762             arg78,
56763             arg79,
56764             arg80,
56765             arg81,
56766             arg82,
56767             arg83,
56768             arg84,
56769             arg85,
56770             arg86,
56771             arg87,
56772             arg88,
56773             arg89,
56774             arg90,
56775             arg91,
56776             arg92,
56777             arg93,
56778             arg94,
56779             arg95,
56780             arg96,
56781             arg97,
56782             arg98,
56783             arg99,
56784             arg100,
56785             arg101,
56786             arg102);
56787     }
56788 
56789     operator type_ ()    
56790     {
56791         return type_(*this);
56792     }
56793 
56794 };
56795 
56796 template<
56797     typename T0,
56798     typename T1,
56799     typename T2,
56800     typename T3,
56801     typename T4,
56802     typename T5,
56803     typename T6,
56804     typename T7,
56805     typename T8,
56806     typename T9,
56807     typename T10,
56808     typename T11,
56809     typename T12,
56810     typename T13,
56811     typename T14,
56812     typename T15,
56813     typename T16,
56814     typename T17,
56815     typename T18,
56816     typename T19,
56817     typename T20,
56818     typename T21,
56819     typename T22,
56820     typename T23,
56821     typename T24,
56822     typename T25,
56823     typename T26,
56824     typename T27,
56825     typename T28,
56826     typename T29,
56827     typename T30,
56828     typename T31,
56829     typename T32,
56830     typename T33,
56831     typename T34,
56832     typename T35,
56833     typename T36,
56834     typename T37,
56835     typename T38,
56836     typename T39,
56837     typename T40,
56838     typename T41,
56839     typename T42,
56840     typename T43,
56841     typename T44,
56842     typename T45,
56843     typename T46,
56844     typename T47,
56845     typename T48,
56846     typename T49,
56847     typename T50,
56848     typename T51,
56849     typename T52,
56850     typename T53,
56851     typename T54,
56852     typename T55,
56853     typename T56,
56854     typename T57,
56855     typename T58,
56856     typename T59,
56857     typename T60,
56858     typename T61,
56859     typename T62,
56860     typename T63,
56861     typename T64,
56862     typename T65,
56863     typename T66,
56864     typename T67,
56865     typename T68,
56866     typename T69,
56867     typename T70,
56868     typename T71,
56869     typename T72,
56870     typename T73,
56871     typename T74,
56872     typename T75,
56873     typename T76,
56874     typename T77,
56875     typename T78,
56876     typename T79,
56877     typename T80,
56878     typename T81,
56879     typename T82,
56880     typename T83,
56881     typename T84,
56882     typename T85,
56883     typename T86,
56884     typename T87,
56885     typename T88,
56886     typename T89,
56887     typename T90,
56888     typename T91,
56889     typename T92,
56890     typename T93,
56891     typename T94,
56892     typename T95,
56893     typename T96,
56894     typename T97,
56895     typename T98,
56896     typename T99,
56897     typename T100,
56898     typename T101,
56899     typename T102,
56900     typename T103>
56901 struct functionImplementation_<
56902     T0,
56903     T1,
56904     T2,
56905     T3,
56906     T4,
56907     T5,
56908     T6,
56909     T7,
56910     T8,
56911     T9,
56912     T10,
56913     T11,
56914     T12,
56915     T13,
56916     T14,
56917     T15,
56918     T16,
56919     T17,
56920     T18,
56921     T19,
56922     T20,
56923     T21,
56924     T22,
56925     T23,
56926     T24,
56927     T25,
56928     T26,
56929     T27,
56930     T28,
56931     T29,
56932     T30,
56933     T31,
56934     T32,
56935     T33,
56936     T34,
56937     T35,
56938     T36,
56939     T37,
56940     T38,
56941     T39,
56942     T40,
56943     T41,
56944     T42,
56945     T43,
56946     T44,
56947     T45,
56948     T46,
56949     T47,
56950     T48,
56951     T49,
56952     T50,
56953     T51,
56954     T52,
56955     T53,
56956     T54,
56957     T55,
56958     T56,
56959     T57,
56960     T58,
56961     T59,
56962     T60,
56963     T61,
56964     T62,
56965     T63,
56966     T64,
56967     T65,
56968     T66,
56969     T67,
56970     T68,
56971     T69,
56972     T70,
56973     T71,
56974     T72,
56975     T73,
56976     T74,
56977     T75,
56978     T76,
56979     T77,
56980     T78,
56981     T79,
56982     T80,
56983     T81,
56984     T82,
56985     T83,
56986     T84,
56987     T85,
56988     T86,
56989     T87,
56990     T88,
56991     T89,
56992     T90,
56993     T91,
56994     T92,
56995     T93,
56996     T94,
56997     T95,
56998     T96,
56999     T97,
57000     T98,
57001     T99,
57002     T100,
57003     T101,
57004     T102,
57005     T103,
57006     NullType,
57007     NullType,
57008     NullType,
57009     NullType,
57010     NullType,
57011     NullType,
57012     NullType,
57013     NullType,
57014     NullType,
57015     NullType,
57016     NullType,
57017     NullType,
57018     NullType,
57019     NullType,
57020     NullType,
57021     NullType,
57022     NullType,
57023     NullType,
57024     NullType,
57025     NullType,
57026     NullType,
57027     NullType,
57028     NullType,
57029     NullType>
57030 {
57031     typedef detail::KernelFunctorGlobal<
57032         T0,
57033         T1,
57034         T2,
57035         T3,
57036         T4,
57037         T5,
57038         T6,
57039         T7,
57040         T8,
57041         T9,
57042         T10,
57043         T11,
57044         T12,
57045         T13,
57046         T14,
57047         T15,
57048         T16,
57049         T17,
57050         T18,
57051         T19,
57052         T20,
57053         T21,
57054         T22,
57055         T23,
57056         T24,
57057         T25,
57058         T26,
57059         T27,
57060         T28,
57061         T29,
57062         T30,
57063         T31,
57064         T32,
57065         T33,
57066         T34,
57067         T35,
57068         T36,
57069         T37,
57070         T38,
57071         T39,
57072         T40,
57073         T41,
57074         T42,
57075         T43,
57076         T44,
57077         T45,
57078         T46,
57079         T47,
57080         T48,
57081         T49,
57082         T50,
57083         T51,
57084         T52,
57085         T53,
57086         T54,
57087         T55,
57088         T56,
57089         T57,
57090         T58,
57091         T59,
57092         T60,
57093         T61,
57094         T62,
57095         T63,
57096         T64,
57097         T65,
57098         T66,
57099         T67,
57100         T68,
57101         T69,
57102         T70,
57103         T71,
57104         T72,
57105         T73,
57106         T74,
57107         T75,
57108         T76,
57109         T77,
57110         T78,
57111         T79,
57112         T80,
57113         T81,
57114         T82,
57115         T83,
57116         T84,
57117         T85,
57118         T86,
57119         T87,
57120         T88,
57121         T89,
57122         T90,
57123         T91,
57124         T92,
57125         T93,
57126         T94,
57127         T95,
57128         T96,
57129         T97,
57130         T98,
57131         T99,
57132         T100,
57133         T101,
57134         T102,
57135         T103,
57136         NullType,
57137         NullType,
57138         NullType,
57139         NullType,
57140         NullType,
57141         NullType,
57142         NullType,
57143         NullType,
57144         NullType,
57145         NullType,
57146         NullType,
57147         NullType,
57148         NullType,
57149         NullType,
57150         NullType,
57151         NullType,
57152         NullType,
57153         NullType,
57154         NullType,
57155         NullType,
57156         NullType,
57157         NullType,
57158         NullType,
57159         NullType> FunctorType;
57160 
57161     FunctorType functor_;
57162 
57163     functionImplementation_(const FunctorType &functor) :
57164         functor_(functor)
57165     {
57166     }
57167         
57168     typedef std::tr1::function<Event (
57169         const EnqueueArgs&,
57170         T0,
57171         T1,
57172         T2,
57173         T3,
57174         T4,
57175         T5,
57176         T6,
57177         T7,
57178         T8,
57179         T9,
57180         T10,
57181         T11,
57182         T12,
57183         T13,
57184         T14,
57185         T15,
57186         T16,
57187         T17,
57188         T18,
57189         T19,
57190         T20,
57191         T21,
57192         T22,
57193         T23,
57194         T24,
57195         T25,
57196         T26,
57197         T27,
57198         T28,
57199         T29,
57200         T30,
57201         T31,
57202         T32,
57203         T33,
57204         T34,
57205         T35,
57206         T36,
57207         T37,
57208         T38,
57209         T39,
57210         T40,
57211         T41,
57212         T42,
57213         T43,
57214         T44,
57215         T45,
57216         T46,
57217         T47,
57218         T48,
57219         T49,
57220         T50,
57221         T51,
57222         T52,
57223         T53,
57224         T54,
57225         T55,
57226         T56,
57227         T57,
57228         T58,
57229         T59,
57230         T60,
57231         T61,
57232         T62,
57233         T63,
57234         T64,
57235         T65,
57236         T66,
57237         T67,
57238         T68,
57239         T69,
57240         T70,
57241         T71,
57242         T72,
57243         T73,
57244         T74,
57245         T75,
57246         T76,
57247         T77,
57248         T78,
57249         T79,
57250         T80,
57251         T81,
57252         T82,
57253         T83,
57254         T84,
57255         T85,
57256         T86,
57257         T87,
57258         T88,
57259         T89,
57260         T90,
57261         T91,
57262         T92,
57263         T93,
57264         T94,
57265         T95,
57266         T96,
57267         T97,
57268         T98,
57269         T99,
57270         T100,
57271         T101,
57272         T102,
57273         T103)> type_;
57274 
57275     Event operator()(const EnqueueArgs& enqueueArgs,
57276         T0 arg0,
57277         T1 arg1,
57278         T2 arg2,
57279         T3 arg3,
57280         T4 arg4,
57281         T5 arg5,
57282         T6 arg6,
57283         T7 arg7,
57284         T8 arg8,
57285         T9 arg9,
57286         T10 arg10,
57287         T11 arg11,
57288         T12 arg12,
57289         T13 arg13,
57290         T14 arg14,
57291         T15 arg15,
57292         T16 arg16,
57293         T17 arg17,
57294         T18 arg18,
57295         T19 arg19,
57296         T20 arg20,
57297         T21 arg21,
57298         T22 arg22,
57299         T23 arg23,
57300         T24 arg24,
57301         T25 arg25,
57302         T26 arg26,
57303         T27 arg27,
57304         T28 arg28,
57305         T29 arg29,
57306         T30 arg30,
57307         T31 arg31,
57308         T32 arg32,
57309         T33 arg33,
57310         T34 arg34,
57311         T35 arg35,
57312         T36 arg36,
57313         T37 arg37,
57314         T38 arg38,
57315         T39 arg39,
57316         T40 arg40,
57317         T41 arg41,
57318         T42 arg42,
57319         T43 arg43,
57320         T44 arg44,
57321         T45 arg45,
57322         T46 arg46,
57323         T47 arg47,
57324         T48 arg48,
57325         T49 arg49,
57326         T50 arg50,
57327         T51 arg51,
57328         T52 arg52,
57329         T53 arg53,
57330         T54 arg54,
57331         T55 arg55,
57332         T56 arg56,
57333         T57 arg57,
57334         T58 arg58,
57335         T59 arg59,
57336         T60 arg60,
57337         T61 arg61,
57338         T62 arg62,
57339         T63 arg63,
57340         T64 arg64,
57341         T65 arg65,
57342         T66 arg66,
57343         T67 arg67,
57344         T68 arg68,
57345         T69 arg69,
57346         T70 arg70,
57347         T71 arg71,
57348         T72 arg72,
57349         T73 arg73,
57350         T74 arg74,
57351         T75 arg75,
57352         T76 arg76,
57353         T77 arg77,
57354         T78 arg78,
57355         T79 arg79,
57356         T80 arg80,
57357         T81 arg81,
57358         T82 arg82,
57359         T83 arg83,
57360         T84 arg84,
57361         T85 arg85,
57362         T86 arg86,
57363         T87 arg87,
57364         T88 arg88,
57365         T89 arg89,
57366         T90 arg90,
57367         T91 arg91,
57368         T92 arg92,
57369         T93 arg93,
57370         T94 arg94,
57371         T95 arg95,
57372         T96 arg96,
57373         T97 arg97,
57374         T98 arg98,
57375         T99 arg99,
57376         T100 arg100,
57377         T101 arg101,
57378         T102 arg102,
57379         T103 arg103)
57380     {
57381         return functor_(
57382             enqueueArgs,
57383             arg0,
57384             arg1,
57385             arg2,
57386             arg3,
57387             arg4,
57388             arg5,
57389             arg6,
57390             arg7,
57391             arg8,
57392             arg9,
57393             arg10,
57394             arg11,
57395             arg12,
57396             arg13,
57397             arg14,
57398             arg15,
57399             arg16,
57400             arg17,
57401             arg18,
57402             arg19,
57403             arg20,
57404             arg21,
57405             arg22,
57406             arg23,
57407             arg24,
57408             arg25,
57409             arg26,
57410             arg27,
57411             arg28,
57412             arg29,
57413             arg30,
57414             arg31,
57415             arg32,
57416             arg33,
57417             arg34,
57418             arg35,
57419             arg36,
57420             arg37,
57421             arg38,
57422             arg39,
57423             arg40,
57424             arg41,
57425             arg42,
57426             arg43,
57427             arg44,
57428             arg45,
57429             arg46,
57430             arg47,
57431             arg48,
57432             arg49,
57433             arg50,
57434             arg51,
57435             arg52,
57436             arg53,
57437             arg54,
57438             arg55,
57439             arg56,
57440             arg57,
57441             arg58,
57442             arg59,
57443             arg60,
57444             arg61,
57445             arg62,
57446             arg63,
57447             arg64,
57448             arg65,
57449             arg66,
57450             arg67,
57451             arg68,
57452             arg69,
57453             arg70,
57454             arg71,
57455             arg72,
57456             arg73,
57457             arg74,
57458             arg75,
57459             arg76,
57460             arg77,
57461             arg78,
57462             arg79,
57463             arg80,
57464             arg81,
57465             arg82,
57466             arg83,
57467             arg84,
57468             arg85,
57469             arg86,
57470             arg87,
57471             arg88,
57472             arg89,
57473             arg90,
57474             arg91,
57475             arg92,
57476             arg93,
57477             arg94,
57478             arg95,
57479             arg96,
57480             arg97,
57481             arg98,
57482             arg99,
57483             arg100,
57484             arg101,
57485             arg102,
57486             arg103);
57487     }
57488 
57489     operator type_ ()    
57490     {
57491         return type_(*this);
57492     }
57493 
57494 };
57495 
57496 template<
57497     typename T0,
57498     typename T1,
57499     typename T2,
57500     typename T3,
57501     typename T4,
57502     typename T5,
57503     typename T6,
57504     typename T7,
57505     typename T8,
57506     typename T9,
57507     typename T10,
57508     typename T11,
57509     typename T12,
57510     typename T13,
57511     typename T14,
57512     typename T15,
57513     typename T16,
57514     typename T17,
57515     typename T18,
57516     typename T19,
57517     typename T20,
57518     typename T21,
57519     typename T22,
57520     typename T23,
57521     typename T24,
57522     typename T25,
57523     typename T26,
57524     typename T27,
57525     typename T28,
57526     typename T29,
57527     typename T30,
57528     typename T31,
57529     typename T32,
57530     typename T33,
57531     typename T34,
57532     typename T35,
57533     typename T36,
57534     typename T37,
57535     typename T38,
57536     typename T39,
57537     typename T40,
57538     typename T41,
57539     typename T42,
57540     typename T43,
57541     typename T44,
57542     typename T45,
57543     typename T46,
57544     typename T47,
57545     typename T48,
57546     typename T49,
57547     typename T50,
57548     typename T51,
57549     typename T52,
57550     typename T53,
57551     typename T54,
57552     typename T55,
57553     typename T56,
57554     typename T57,
57555     typename T58,
57556     typename T59,
57557     typename T60,
57558     typename T61,
57559     typename T62,
57560     typename T63,
57561     typename T64,
57562     typename T65,
57563     typename T66,
57564     typename T67,
57565     typename T68,
57566     typename T69,
57567     typename T70,
57568     typename T71,
57569     typename T72,
57570     typename T73,
57571     typename T74,
57572     typename T75,
57573     typename T76,
57574     typename T77,
57575     typename T78,
57576     typename T79,
57577     typename T80,
57578     typename T81,
57579     typename T82,
57580     typename T83,
57581     typename T84,
57582     typename T85,
57583     typename T86,
57584     typename T87,
57585     typename T88,
57586     typename T89,
57587     typename T90,
57588     typename T91,
57589     typename T92,
57590     typename T93,
57591     typename T94,
57592     typename T95,
57593     typename T96,
57594     typename T97,
57595     typename T98,
57596     typename T99,
57597     typename T100,
57598     typename T101,
57599     typename T102,
57600     typename T103,
57601     typename T104>
57602 struct functionImplementation_<
57603     T0,
57604     T1,
57605     T2,
57606     T3,
57607     T4,
57608     T5,
57609     T6,
57610     T7,
57611     T8,
57612     T9,
57613     T10,
57614     T11,
57615     T12,
57616     T13,
57617     T14,
57618     T15,
57619     T16,
57620     T17,
57621     T18,
57622     T19,
57623     T20,
57624     T21,
57625     T22,
57626     T23,
57627     T24,
57628     T25,
57629     T26,
57630     T27,
57631     T28,
57632     T29,
57633     T30,
57634     T31,
57635     T32,
57636     T33,
57637     T34,
57638     T35,
57639     T36,
57640     T37,
57641     T38,
57642     T39,
57643     T40,
57644     T41,
57645     T42,
57646     T43,
57647     T44,
57648     T45,
57649     T46,
57650     T47,
57651     T48,
57652     T49,
57653     T50,
57654     T51,
57655     T52,
57656     T53,
57657     T54,
57658     T55,
57659     T56,
57660     T57,
57661     T58,
57662     T59,
57663     T60,
57664     T61,
57665     T62,
57666     T63,
57667     T64,
57668     T65,
57669     T66,
57670     T67,
57671     T68,
57672     T69,
57673     T70,
57674     T71,
57675     T72,
57676     T73,
57677     T74,
57678     T75,
57679     T76,
57680     T77,
57681     T78,
57682     T79,
57683     T80,
57684     T81,
57685     T82,
57686     T83,
57687     T84,
57688     T85,
57689     T86,
57690     T87,
57691     T88,
57692     T89,
57693     T90,
57694     T91,
57695     T92,
57696     T93,
57697     T94,
57698     T95,
57699     T96,
57700     T97,
57701     T98,
57702     T99,
57703     T100,
57704     T101,
57705     T102,
57706     T103,
57707     T104,
57708     NullType,
57709     NullType,
57710     NullType,
57711     NullType,
57712     NullType,
57713     NullType,
57714     NullType,
57715     NullType,
57716     NullType,
57717     NullType,
57718     NullType,
57719     NullType,
57720     NullType,
57721     NullType,
57722     NullType,
57723     NullType,
57724     NullType,
57725     NullType,
57726     NullType,
57727     NullType,
57728     NullType,
57729     NullType,
57730     NullType>
57731 {
57732     typedef detail::KernelFunctorGlobal<
57733         T0,
57734         T1,
57735         T2,
57736         T3,
57737         T4,
57738         T5,
57739         T6,
57740         T7,
57741         T8,
57742         T9,
57743         T10,
57744         T11,
57745         T12,
57746         T13,
57747         T14,
57748         T15,
57749         T16,
57750         T17,
57751         T18,
57752         T19,
57753         T20,
57754         T21,
57755         T22,
57756         T23,
57757         T24,
57758         T25,
57759         T26,
57760         T27,
57761         T28,
57762         T29,
57763         T30,
57764         T31,
57765         T32,
57766         T33,
57767         T34,
57768         T35,
57769         T36,
57770         T37,
57771         T38,
57772         T39,
57773         T40,
57774         T41,
57775         T42,
57776         T43,
57777         T44,
57778         T45,
57779         T46,
57780         T47,
57781         T48,
57782         T49,
57783         T50,
57784         T51,
57785         T52,
57786         T53,
57787         T54,
57788         T55,
57789         T56,
57790         T57,
57791         T58,
57792         T59,
57793         T60,
57794         T61,
57795         T62,
57796         T63,
57797         T64,
57798         T65,
57799         T66,
57800         T67,
57801         T68,
57802         T69,
57803         T70,
57804         T71,
57805         T72,
57806         T73,
57807         T74,
57808         T75,
57809         T76,
57810         T77,
57811         T78,
57812         T79,
57813         T80,
57814         T81,
57815         T82,
57816         T83,
57817         T84,
57818         T85,
57819         T86,
57820         T87,
57821         T88,
57822         T89,
57823         T90,
57824         T91,
57825         T92,
57826         T93,
57827         T94,
57828         T95,
57829         T96,
57830         T97,
57831         T98,
57832         T99,
57833         T100,
57834         T101,
57835         T102,
57836         T103,
57837         T104,
57838         NullType,
57839         NullType,
57840         NullType,
57841         NullType,
57842         NullType,
57843         NullType,
57844         NullType,
57845         NullType,
57846         NullType,
57847         NullType,
57848         NullType,
57849         NullType,
57850         NullType,
57851         NullType,
57852         NullType,
57853         NullType,
57854         NullType,
57855         NullType,
57856         NullType,
57857         NullType,
57858         NullType,
57859         NullType,
57860         NullType> FunctorType;
57861 
57862     FunctorType functor_;
57863 
57864     functionImplementation_(const FunctorType &functor) :
57865         functor_(functor)
57866     {
57867     }
57868         
57869     typedef std::tr1::function<Event (
57870         const EnqueueArgs&,
57871         T0,
57872         T1,
57873         T2,
57874         T3,
57875         T4,
57876         T5,
57877         T6,
57878         T7,
57879         T8,
57880         T9,
57881         T10,
57882         T11,
57883         T12,
57884         T13,
57885         T14,
57886         T15,
57887         T16,
57888         T17,
57889         T18,
57890         T19,
57891         T20,
57892         T21,
57893         T22,
57894         T23,
57895         T24,
57896         T25,
57897         T26,
57898         T27,
57899         T28,
57900         T29,
57901         T30,
57902         T31,
57903         T32,
57904         T33,
57905         T34,
57906         T35,
57907         T36,
57908         T37,
57909         T38,
57910         T39,
57911         T40,
57912         T41,
57913         T42,
57914         T43,
57915         T44,
57916         T45,
57917         T46,
57918         T47,
57919         T48,
57920         T49,
57921         T50,
57922         T51,
57923         T52,
57924         T53,
57925         T54,
57926         T55,
57927         T56,
57928         T57,
57929         T58,
57930         T59,
57931         T60,
57932         T61,
57933         T62,
57934         T63,
57935         T64,
57936         T65,
57937         T66,
57938         T67,
57939         T68,
57940         T69,
57941         T70,
57942         T71,
57943         T72,
57944         T73,
57945         T74,
57946         T75,
57947         T76,
57948         T77,
57949         T78,
57950         T79,
57951         T80,
57952         T81,
57953         T82,
57954         T83,
57955         T84,
57956         T85,
57957         T86,
57958         T87,
57959         T88,
57960         T89,
57961         T90,
57962         T91,
57963         T92,
57964         T93,
57965         T94,
57966         T95,
57967         T96,
57968         T97,
57969         T98,
57970         T99,
57971         T100,
57972         T101,
57973         T102,
57974         T103,
57975         T104)> type_;
57976 
57977     Event operator()(const EnqueueArgs& enqueueArgs,
57978         T0 arg0,
57979         T1 arg1,
57980         T2 arg2,
57981         T3 arg3,
57982         T4 arg4,
57983         T5 arg5,
57984         T6 arg6,
57985         T7 arg7,
57986         T8 arg8,
57987         T9 arg9,
57988         T10 arg10,
57989         T11 arg11,
57990         T12 arg12,
57991         T13 arg13,
57992         T14 arg14,
57993         T15 arg15,
57994         T16 arg16,
57995         T17 arg17,
57996         T18 arg18,
57997         T19 arg19,
57998         T20 arg20,
57999         T21 arg21,
58000         T22 arg22,
58001         T23 arg23,
58002         T24 arg24,
58003         T25 arg25,
58004         T26 arg26,
58005         T27 arg27,
58006         T28 arg28,
58007         T29 arg29,
58008         T30 arg30,
58009         T31 arg31,
58010         T32 arg32,
58011         T33 arg33,
58012         T34 arg34,
58013         T35 arg35,
58014         T36 arg36,
58015         T37 arg37,
58016         T38 arg38,
58017         T39 arg39,
58018         T40 arg40,
58019         T41 arg41,
58020         T42 arg42,
58021         T43 arg43,
58022         T44 arg44,
58023         T45 arg45,
58024         T46 arg46,
58025         T47 arg47,
58026         T48 arg48,
58027         T49 arg49,
58028         T50 arg50,
58029         T51 arg51,
58030         T52 arg52,
58031         T53 arg53,
58032         T54 arg54,
58033         T55 arg55,
58034         T56 arg56,
58035         T57 arg57,
58036         T58 arg58,
58037         T59 arg59,
58038         T60 arg60,
58039         T61 arg61,
58040         T62 arg62,
58041         T63 arg63,
58042         T64 arg64,
58043         T65 arg65,
58044         T66 arg66,
58045         T67 arg67,
58046         T68 arg68,
58047         T69 arg69,
58048         T70 arg70,
58049         T71 arg71,
58050         T72 arg72,
58051         T73 arg73,
58052         T74 arg74,
58053         T75 arg75,
58054         T76 arg76,
58055         T77 arg77,
58056         T78 arg78,
58057         T79 arg79,
58058         T80 arg80,
58059         T81 arg81,
58060         T82 arg82,
58061         T83 arg83,
58062         T84 arg84,
58063         T85 arg85,
58064         T86 arg86,
58065         T87 arg87,
58066         T88 arg88,
58067         T89 arg89,
58068         T90 arg90,
58069         T91 arg91,
58070         T92 arg92,
58071         T93 arg93,
58072         T94 arg94,
58073         T95 arg95,
58074         T96 arg96,
58075         T97 arg97,
58076         T98 arg98,
58077         T99 arg99,
58078         T100 arg100,
58079         T101 arg101,
58080         T102 arg102,
58081         T103 arg103,
58082         T104 arg104)
58083     {
58084         return functor_(
58085             enqueueArgs,
58086             arg0,
58087             arg1,
58088             arg2,
58089             arg3,
58090             arg4,
58091             arg5,
58092             arg6,
58093             arg7,
58094             arg8,
58095             arg9,
58096             arg10,
58097             arg11,
58098             arg12,
58099             arg13,
58100             arg14,
58101             arg15,
58102             arg16,
58103             arg17,
58104             arg18,
58105             arg19,
58106             arg20,
58107             arg21,
58108             arg22,
58109             arg23,
58110             arg24,
58111             arg25,
58112             arg26,
58113             arg27,
58114             arg28,
58115             arg29,
58116             arg30,
58117             arg31,
58118             arg32,
58119             arg33,
58120             arg34,
58121             arg35,
58122             arg36,
58123             arg37,
58124             arg38,
58125             arg39,
58126             arg40,
58127             arg41,
58128             arg42,
58129             arg43,
58130             arg44,
58131             arg45,
58132             arg46,
58133             arg47,
58134             arg48,
58135             arg49,
58136             arg50,
58137             arg51,
58138             arg52,
58139             arg53,
58140             arg54,
58141             arg55,
58142             arg56,
58143             arg57,
58144             arg58,
58145             arg59,
58146             arg60,
58147             arg61,
58148             arg62,
58149             arg63,
58150             arg64,
58151             arg65,
58152             arg66,
58153             arg67,
58154             arg68,
58155             arg69,
58156             arg70,
58157             arg71,
58158             arg72,
58159             arg73,
58160             arg74,
58161             arg75,
58162             arg76,
58163             arg77,
58164             arg78,
58165             arg79,
58166             arg80,
58167             arg81,
58168             arg82,
58169             arg83,
58170             arg84,
58171             arg85,
58172             arg86,
58173             arg87,
58174             arg88,
58175             arg89,
58176             arg90,
58177             arg91,
58178             arg92,
58179             arg93,
58180             arg94,
58181             arg95,
58182             arg96,
58183             arg97,
58184             arg98,
58185             arg99,
58186             arg100,
58187             arg101,
58188             arg102,
58189             arg103,
58190             arg104);
58191     }
58192 
58193     operator type_ ()    
58194     {
58195         return type_(*this);
58196     }
58197 
58198 };
58199 
58200 template<
58201     typename T0,
58202     typename T1,
58203     typename T2,
58204     typename T3,
58205     typename T4,
58206     typename T5,
58207     typename T6,
58208     typename T7,
58209     typename T8,
58210     typename T9,
58211     typename T10,
58212     typename T11,
58213     typename T12,
58214     typename T13,
58215     typename T14,
58216     typename T15,
58217     typename T16,
58218     typename T17,
58219     typename T18,
58220     typename T19,
58221     typename T20,
58222     typename T21,
58223     typename T22,
58224     typename T23,
58225     typename T24,
58226     typename T25,
58227     typename T26,
58228     typename T27,
58229     typename T28,
58230     typename T29,
58231     typename T30,
58232     typename T31,
58233     typename T32,
58234     typename T33,
58235     typename T34,
58236     typename T35,
58237     typename T36,
58238     typename T37,
58239     typename T38,
58240     typename T39,
58241     typename T40,
58242     typename T41,
58243     typename T42,
58244     typename T43,
58245     typename T44,
58246     typename T45,
58247     typename T46,
58248     typename T47,
58249     typename T48,
58250     typename T49,
58251     typename T50,
58252     typename T51,
58253     typename T52,
58254     typename T53,
58255     typename T54,
58256     typename T55,
58257     typename T56,
58258     typename T57,
58259     typename T58,
58260     typename T59,
58261     typename T60,
58262     typename T61,
58263     typename T62,
58264     typename T63,
58265     typename T64,
58266     typename T65,
58267     typename T66,
58268     typename T67,
58269     typename T68,
58270     typename T69,
58271     typename T70,
58272     typename T71,
58273     typename T72,
58274     typename T73,
58275     typename T74,
58276     typename T75,
58277     typename T76,
58278     typename T77,
58279     typename T78,
58280     typename T79,
58281     typename T80,
58282     typename T81,
58283     typename T82,
58284     typename T83,
58285     typename T84,
58286     typename T85,
58287     typename T86,
58288     typename T87,
58289     typename T88,
58290     typename T89,
58291     typename T90,
58292     typename T91,
58293     typename T92,
58294     typename T93,
58295     typename T94,
58296     typename T95,
58297     typename T96,
58298     typename T97,
58299     typename T98,
58300     typename T99,
58301     typename T100,
58302     typename T101,
58303     typename T102,
58304     typename T103,
58305     typename T104,
58306     typename T105>
58307 struct functionImplementation_<
58308     T0,
58309     T1,
58310     T2,
58311     T3,
58312     T4,
58313     T5,
58314     T6,
58315     T7,
58316     T8,
58317     T9,
58318     T10,
58319     T11,
58320     T12,
58321     T13,
58322     T14,
58323     T15,
58324     T16,
58325     T17,
58326     T18,
58327     T19,
58328     T20,
58329     T21,
58330     T22,
58331     T23,
58332     T24,
58333     T25,
58334     T26,
58335     T27,
58336     T28,
58337     T29,
58338     T30,
58339     T31,
58340     T32,
58341     T33,
58342     T34,
58343     T35,
58344     T36,
58345     T37,
58346     T38,
58347     T39,
58348     T40,
58349     T41,
58350     T42,
58351     T43,
58352     T44,
58353     T45,
58354     T46,
58355     T47,
58356     T48,
58357     T49,
58358     T50,
58359     T51,
58360     T52,
58361     T53,
58362     T54,
58363     T55,
58364     T56,
58365     T57,
58366     T58,
58367     T59,
58368     T60,
58369     T61,
58370     T62,
58371     T63,
58372     T64,
58373     T65,
58374     T66,
58375     T67,
58376     T68,
58377     T69,
58378     T70,
58379     T71,
58380     T72,
58381     T73,
58382     T74,
58383     T75,
58384     T76,
58385     T77,
58386     T78,
58387     T79,
58388     T80,
58389     T81,
58390     T82,
58391     T83,
58392     T84,
58393     T85,
58394     T86,
58395     T87,
58396     T88,
58397     T89,
58398     T90,
58399     T91,
58400     T92,
58401     T93,
58402     T94,
58403     T95,
58404     T96,
58405     T97,
58406     T98,
58407     T99,
58408     T100,
58409     T101,
58410     T102,
58411     T103,
58412     T104,
58413     T105,
58414     NullType,
58415     NullType,
58416     NullType,
58417     NullType,
58418     NullType,
58419     NullType,
58420     NullType,
58421     NullType,
58422     NullType,
58423     NullType,
58424     NullType,
58425     NullType,
58426     NullType,
58427     NullType,
58428     NullType,
58429     NullType,
58430     NullType,
58431     NullType,
58432     NullType,
58433     NullType,
58434     NullType,
58435     NullType>
58436 {
58437     typedef detail::KernelFunctorGlobal<
58438         T0,
58439         T1,
58440         T2,
58441         T3,
58442         T4,
58443         T5,
58444         T6,
58445         T7,
58446         T8,
58447         T9,
58448         T10,
58449         T11,
58450         T12,
58451         T13,
58452         T14,
58453         T15,
58454         T16,
58455         T17,
58456         T18,
58457         T19,
58458         T20,
58459         T21,
58460         T22,
58461         T23,
58462         T24,
58463         T25,
58464         T26,
58465         T27,
58466         T28,
58467         T29,
58468         T30,
58469         T31,
58470         T32,
58471         T33,
58472         T34,
58473         T35,
58474         T36,
58475         T37,
58476         T38,
58477         T39,
58478         T40,
58479         T41,
58480         T42,
58481         T43,
58482         T44,
58483         T45,
58484         T46,
58485         T47,
58486         T48,
58487         T49,
58488         T50,
58489         T51,
58490         T52,
58491         T53,
58492         T54,
58493         T55,
58494         T56,
58495         T57,
58496         T58,
58497         T59,
58498         T60,
58499         T61,
58500         T62,
58501         T63,
58502         T64,
58503         T65,
58504         T66,
58505         T67,
58506         T68,
58507         T69,
58508         T70,
58509         T71,
58510         T72,
58511         T73,
58512         T74,
58513         T75,
58514         T76,
58515         T77,
58516         T78,
58517         T79,
58518         T80,
58519         T81,
58520         T82,
58521         T83,
58522         T84,
58523         T85,
58524         T86,
58525         T87,
58526         T88,
58527         T89,
58528         T90,
58529         T91,
58530         T92,
58531         T93,
58532         T94,
58533         T95,
58534         T96,
58535         T97,
58536         T98,
58537         T99,
58538         T100,
58539         T101,
58540         T102,
58541         T103,
58542         T104,
58543         T105,
58544         NullType,
58545         NullType,
58546         NullType,
58547         NullType,
58548         NullType,
58549         NullType,
58550         NullType,
58551         NullType,
58552         NullType,
58553         NullType,
58554         NullType,
58555         NullType,
58556         NullType,
58557         NullType,
58558         NullType,
58559         NullType,
58560         NullType,
58561         NullType,
58562         NullType,
58563         NullType,
58564         NullType,
58565         NullType> FunctorType;
58566 
58567     FunctorType functor_;
58568 
58569     functionImplementation_(const FunctorType &functor) :
58570         functor_(functor)
58571     {
58572     }
58573         
58574     typedef std::tr1::function<Event (
58575         const EnqueueArgs&,
58576         T0,
58577         T1,
58578         T2,
58579         T3,
58580         T4,
58581         T5,
58582         T6,
58583         T7,
58584         T8,
58585         T9,
58586         T10,
58587         T11,
58588         T12,
58589         T13,
58590         T14,
58591         T15,
58592         T16,
58593         T17,
58594         T18,
58595         T19,
58596         T20,
58597         T21,
58598         T22,
58599         T23,
58600         T24,
58601         T25,
58602         T26,
58603         T27,
58604         T28,
58605         T29,
58606         T30,
58607         T31,
58608         T32,
58609         T33,
58610         T34,
58611         T35,
58612         T36,
58613         T37,
58614         T38,
58615         T39,
58616         T40,
58617         T41,
58618         T42,
58619         T43,
58620         T44,
58621         T45,
58622         T46,
58623         T47,
58624         T48,
58625         T49,
58626         T50,
58627         T51,
58628         T52,
58629         T53,
58630         T54,
58631         T55,
58632         T56,
58633         T57,
58634         T58,
58635         T59,
58636         T60,
58637         T61,
58638         T62,
58639         T63,
58640         T64,
58641         T65,
58642         T66,
58643         T67,
58644         T68,
58645         T69,
58646         T70,
58647         T71,
58648         T72,
58649         T73,
58650         T74,
58651         T75,
58652         T76,
58653         T77,
58654         T78,
58655         T79,
58656         T80,
58657         T81,
58658         T82,
58659         T83,
58660         T84,
58661         T85,
58662         T86,
58663         T87,
58664         T88,
58665         T89,
58666         T90,
58667         T91,
58668         T92,
58669         T93,
58670         T94,
58671         T95,
58672         T96,
58673         T97,
58674         T98,
58675         T99,
58676         T100,
58677         T101,
58678         T102,
58679         T103,
58680         T104,
58681         T105)> type_;
58682 
58683     Event operator()(const EnqueueArgs& enqueueArgs,
58684         T0 arg0,
58685         T1 arg1,
58686         T2 arg2,
58687         T3 arg3,
58688         T4 arg4,
58689         T5 arg5,
58690         T6 arg6,
58691         T7 arg7,
58692         T8 arg8,
58693         T9 arg9,
58694         T10 arg10,
58695         T11 arg11,
58696         T12 arg12,
58697         T13 arg13,
58698         T14 arg14,
58699         T15 arg15,
58700         T16 arg16,
58701         T17 arg17,
58702         T18 arg18,
58703         T19 arg19,
58704         T20 arg20,
58705         T21 arg21,
58706         T22 arg22,
58707         T23 arg23,
58708         T24 arg24,
58709         T25 arg25,
58710         T26 arg26,
58711         T27 arg27,
58712         T28 arg28,
58713         T29 arg29,
58714         T30 arg30,
58715         T31 arg31,
58716         T32 arg32,
58717         T33 arg33,
58718         T34 arg34,
58719         T35 arg35,
58720         T36 arg36,
58721         T37 arg37,
58722         T38 arg38,
58723         T39 arg39,
58724         T40 arg40,
58725         T41 arg41,
58726         T42 arg42,
58727         T43 arg43,
58728         T44 arg44,
58729         T45 arg45,
58730         T46 arg46,
58731         T47 arg47,
58732         T48 arg48,
58733         T49 arg49,
58734         T50 arg50,
58735         T51 arg51,
58736         T52 arg52,
58737         T53 arg53,
58738         T54 arg54,
58739         T55 arg55,
58740         T56 arg56,
58741         T57 arg57,
58742         T58 arg58,
58743         T59 arg59,
58744         T60 arg60,
58745         T61 arg61,
58746         T62 arg62,
58747         T63 arg63,
58748         T64 arg64,
58749         T65 arg65,
58750         T66 arg66,
58751         T67 arg67,
58752         T68 arg68,
58753         T69 arg69,
58754         T70 arg70,
58755         T71 arg71,
58756         T72 arg72,
58757         T73 arg73,
58758         T74 arg74,
58759         T75 arg75,
58760         T76 arg76,
58761         T77 arg77,
58762         T78 arg78,
58763         T79 arg79,
58764         T80 arg80,
58765         T81 arg81,
58766         T82 arg82,
58767         T83 arg83,
58768         T84 arg84,
58769         T85 arg85,
58770         T86 arg86,
58771         T87 arg87,
58772         T88 arg88,
58773         T89 arg89,
58774         T90 arg90,
58775         T91 arg91,
58776         T92 arg92,
58777         T93 arg93,
58778         T94 arg94,
58779         T95 arg95,
58780         T96 arg96,
58781         T97 arg97,
58782         T98 arg98,
58783         T99 arg99,
58784         T100 arg100,
58785         T101 arg101,
58786         T102 arg102,
58787         T103 arg103,
58788         T104 arg104,
58789         T105 arg105)
58790     {
58791         return functor_(
58792             enqueueArgs,
58793             arg0,
58794             arg1,
58795             arg2,
58796             arg3,
58797             arg4,
58798             arg5,
58799             arg6,
58800             arg7,
58801             arg8,
58802             arg9,
58803             arg10,
58804             arg11,
58805             arg12,
58806             arg13,
58807             arg14,
58808             arg15,
58809             arg16,
58810             arg17,
58811             arg18,
58812             arg19,
58813             arg20,
58814             arg21,
58815             arg22,
58816             arg23,
58817             arg24,
58818             arg25,
58819             arg26,
58820             arg27,
58821             arg28,
58822             arg29,
58823             arg30,
58824             arg31,
58825             arg32,
58826             arg33,
58827             arg34,
58828             arg35,
58829             arg36,
58830             arg37,
58831             arg38,
58832             arg39,
58833             arg40,
58834             arg41,
58835             arg42,
58836             arg43,
58837             arg44,
58838             arg45,
58839             arg46,
58840             arg47,
58841             arg48,
58842             arg49,
58843             arg50,
58844             arg51,
58845             arg52,
58846             arg53,
58847             arg54,
58848             arg55,
58849             arg56,
58850             arg57,
58851             arg58,
58852             arg59,
58853             arg60,
58854             arg61,
58855             arg62,
58856             arg63,
58857             arg64,
58858             arg65,
58859             arg66,
58860             arg67,
58861             arg68,
58862             arg69,
58863             arg70,
58864             arg71,
58865             arg72,
58866             arg73,
58867             arg74,
58868             arg75,
58869             arg76,
58870             arg77,
58871             arg78,
58872             arg79,
58873             arg80,
58874             arg81,
58875             arg82,
58876             arg83,
58877             arg84,
58878             arg85,
58879             arg86,
58880             arg87,
58881             arg88,
58882             arg89,
58883             arg90,
58884             arg91,
58885             arg92,
58886             arg93,
58887             arg94,
58888             arg95,
58889             arg96,
58890             arg97,
58891             arg98,
58892             arg99,
58893             arg100,
58894             arg101,
58895             arg102,
58896             arg103,
58897             arg104,
58898             arg105);
58899     }
58900 
58901     operator type_ ()    
58902     {
58903         return type_(*this);
58904     }
58905 
58906 };
58907 
58908 template<
58909     typename T0,
58910     typename T1,
58911     typename T2,
58912     typename T3,
58913     typename T4,
58914     typename T5,
58915     typename T6,
58916     typename T7,
58917     typename T8,
58918     typename T9,
58919     typename T10,
58920     typename T11,
58921     typename T12,
58922     typename T13,
58923     typename T14,
58924     typename T15,
58925     typename T16,
58926     typename T17,
58927     typename T18,
58928     typename T19,
58929     typename T20,
58930     typename T21,
58931     typename T22,
58932     typename T23,
58933     typename T24,
58934     typename T25,
58935     typename T26,
58936     typename T27,
58937     typename T28,
58938     typename T29,
58939     typename T30,
58940     typename T31,
58941     typename T32,
58942     typename T33,
58943     typename T34,
58944     typename T35,
58945     typename T36,
58946     typename T37,
58947     typename T38,
58948     typename T39,
58949     typename T40,
58950     typename T41,
58951     typename T42,
58952     typename T43,
58953     typename T44,
58954     typename T45,
58955     typename T46,
58956     typename T47,
58957     typename T48,
58958     typename T49,
58959     typename T50,
58960     typename T51,
58961     typename T52,
58962     typename T53,
58963     typename T54,
58964     typename T55,
58965     typename T56,
58966     typename T57,
58967     typename T58,
58968     typename T59,
58969     typename T60,
58970     typename T61,
58971     typename T62,
58972     typename T63,
58973     typename T64,
58974     typename T65,
58975     typename T66,
58976     typename T67,
58977     typename T68,
58978     typename T69,
58979     typename T70,
58980     typename T71,
58981     typename T72,
58982     typename T73,
58983     typename T74,
58984     typename T75,
58985     typename T76,
58986     typename T77,
58987     typename T78,
58988     typename T79,
58989     typename T80,
58990     typename T81,
58991     typename T82,
58992     typename T83,
58993     typename T84,
58994     typename T85,
58995     typename T86,
58996     typename T87,
58997     typename T88,
58998     typename T89,
58999     typename T90,
59000     typename T91,
59001     typename T92,
59002     typename T93,
59003     typename T94,
59004     typename T95,
59005     typename T96,
59006     typename T97,
59007     typename T98,
59008     typename T99,
59009     typename T100,
59010     typename T101,
59011     typename T102,
59012     typename T103,
59013     typename T104,
59014     typename T105,
59015     typename T106>
59016 struct functionImplementation_<
59017     T0,
59018     T1,
59019     T2,
59020     T3,
59021     T4,
59022     T5,
59023     T6,
59024     T7,
59025     T8,
59026     T9,
59027     T10,
59028     T11,
59029     T12,
59030     T13,
59031     T14,
59032     T15,
59033     T16,
59034     T17,
59035     T18,
59036     T19,
59037     T20,
59038     T21,
59039     T22,
59040     T23,
59041     T24,
59042     T25,
59043     T26,
59044     T27,
59045     T28,
59046     T29,
59047     T30,
59048     T31,
59049     T32,
59050     T33,
59051     T34,
59052     T35,
59053     T36,
59054     T37,
59055     T38,
59056     T39,
59057     T40,
59058     T41,
59059     T42,
59060     T43,
59061     T44,
59062     T45,
59063     T46,
59064     T47,
59065     T48,
59066     T49,
59067     T50,
59068     T51,
59069     T52,
59070     T53,
59071     T54,
59072     T55,
59073     T56,
59074     T57,
59075     T58,
59076     T59,
59077     T60,
59078     T61,
59079     T62,
59080     T63,
59081     T64,
59082     T65,
59083     T66,
59084     T67,
59085     T68,
59086     T69,
59087     T70,
59088     T71,
59089     T72,
59090     T73,
59091     T74,
59092     T75,
59093     T76,
59094     T77,
59095     T78,
59096     T79,
59097     T80,
59098     T81,
59099     T82,
59100     T83,
59101     T84,
59102     T85,
59103     T86,
59104     T87,
59105     T88,
59106     T89,
59107     T90,
59108     T91,
59109     T92,
59110     T93,
59111     T94,
59112     T95,
59113     T96,
59114     T97,
59115     T98,
59116     T99,
59117     T100,
59118     T101,
59119     T102,
59120     T103,
59121     T104,
59122     T105,
59123     T106,
59124     NullType,
59125     NullType,
59126     NullType,
59127     NullType,
59128     NullType,
59129     NullType,
59130     NullType,
59131     NullType,
59132     NullType,
59133     NullType,
59134     NullType,
59135     NullType,
59136     NullType,
59137     NullType,
59138     NullType,
59139     NullType,
59140     NullType,
59141     NullType,
59142     NullType,
59143     NullType,
59144     NullType>
59145 {
59146     typedef detail::KernelFunctorGlobal<
59147         T0,
59148         T1,
59149         T2,
59150         T3,
59151         T4,
59152         T5,
59153         T6,
59154         T7,
59155         T8,
59156         T9,
59157         T10,
59158         T11,
59159         T12,
59160         T13,
59161         T14,
59162         T15,
59163         T16,
59164         T17,
59165         T18,
59166         T19,
59167         T20,
59168         T21,
59169         T22,
59170         T23,
59171         T24,
59172         T25,
59173         T26,
59174         T27,
59175         T28,
59176         T29,
59177         T30,
59178         T31,
59179         T32,
59180         T33,
59181         T34,
59182         T35,
59183         T36,
59184         T37,
59185         T38,
59186         T39,
59187         T40,
59188         T41,
59189         T42,
59190         T43,
59191         T44,
59192         T45,
59193         T46,
59194         T47,
59195         T48,
59196         T49,
59197         T50,
59198         T51,
59199         T52,
59200         T53,
59201         T54,
59202         T55,
59203         T56,
59204         T57,
59205         T58,
59206         T59,
59207         T60,
59208         T61,
59209         T62,
59210         T63,
59211         T64,
59212         T65,
59213         T66,
59214         T67,
59215         T68,
59216         T69,
59217         T70,
59218         T71,
59219         T72,
59220         T73,
59221         T74,
59222         T75,
59223         T76,
59224         T77,
59225         T78,
59226         T79,
59227         T80,
59228         T81,
59229         T82,
59230         T83,
59231         T84,
59232         T85,
59233         T86,
59234         T87,
59235         T88,
59236         T89,
59237         T90,
59238         T91,
59239         T92,
59240         T93,
59241         T94,
59242         T95,
59243         T96,
59244         T97,
59245         T98,
59246         T99,
59247         T100,
59248         T101,
59249         T102,
59250         T103,
59251         T104,
59252         T105,
59253         T106,
59254         NullType,
59255         NullType,
59256         NullType,
59257         NullType,
59258         NullType,
59259         NullType,
59260         NullType,
59261         NullType,
59262         NullType,
59263         NullType,
59264         NullType,
59265         NullType,
59266         NullType,
59267         NullType,
59268         NullType,
59269         NullType,
59270         NullType,
59271         NullType,
59272         NullType,
59273         NullType,
59274         NullType> FunctorType;
59275 
59276     FunctorType functor_;
59277 
59278     functionImplementation_(const FunctorType &functor) :
59279         functor_(functor)
59280     {
59281     }
59282         
59283     typedef std::tr1::function<Event (
59284         const EnqueueArgs&,
59285         T0,
59286         T1,
59287         T2,
59288         T3,
59289         T4,
59290         T5,
59291         T6,
59292         T7,
59293         T8,
59294         T9,
59295         T10,
59296         T11,
59297         T12,
59298         T13,
59299         T14,
59300         T15,
59301         T16,
59302         T17,
59303         T18,
59304         T19,
59305         T20,
59306         T21,
59307         T22,
59308         T23,
59309         T24,
59310         T25,
59311         T26,
59312         T27,
59313         T28,
59314         T29,
59315         T30,
59316         T31,
59317         T32,
59318         T33,
59319         T34,
59320         T35,
59321         T36,
59322         T37,
59323         T38,
59324         T39,
59325         T40,
59326         T41,
59327         T42,
59328         T43,
59329         T44,
59330         T45,
59331         T46,
59332         T47,
59333         T48,
59334         T49,
59335         T50,
59336         T51,
59337         T52,
59338         T53,
59339         T54,
59340         T55,
59341         T56,
59342         T57,
59343         T58,
59344         T59,
59345         T60,
59346         T61,
59347         T62,
59348         T63,
59349         T64,
59350         T65,
59351         T66,
59352         T67,
59353         T68,
59354         T69,
59355         T70,
59356         T71,
59357         T72,
59358         T73,
59359         T74,
59360         T75,
59361         T76,
59362         T77,
59363         T78,
59364         T79,
59365         T80,
59366         T81,
59367         T82,
59368         T83,
59369         T84,
59370         T85,
59371         T86,
59372         T87,
59373         T88,
59374         T89,
59375         T90,
59376         T91,
59377         T92,
59378         T93,
59379         T94,
59380         T95,
59381         T96,
59382         T97,
59383         T98,
59384         T99,
59385         T100,
59386         T101,
59387         T102,
59388         T103,
59389         T104,
59390         T105,
59391         T106)> type_;
59392 
59393     Event operator()(const EnqueueArgs& enqueueArgs,
59394         T0 arg0,
59395         T1 arg1,
59396         T2 arg2,
59397         T3 arg3,
59398         T4 arg4,
59399         T5 arg5,
59400         T6 arg6,
59401         T7 arg7,
59402         T8 arg8,
59403         T9 arg9,
59404         T10 arg10,
59405         T11 arg11,
59406         T12 arg12,
59407         T13 arg13,
59408         T14 arg14,
59409         T15 arg15,
59410         T16 arg16,
59411         T17 arg17,
59412         T18 arg18,
59413         T19 arg19,
59414         T20 arg20,
59415         T21 arg21,
59416         T22 arg22,
59417         T23 arg23,
59418         T24 arg24,
59419         T25 arg25,
59420         T26 arg26,
59421         T27 arg27,
59422         T28 arg28,
59423         T29 arg29,
59424         T30 arg30,
59425         T31 arg31,
59426         T32 arg32,
59427         T33 arg33,
59428         T34 arg34,
59429         T35 arg35,
59430         T36 arg36,
59431         T37 arg37,
59432         T38 arg38,
59433         T39 arg39,
59434         T40 arg40,
59435         T41 arg41,
59436         T42 arg42,
59437         T43 arg43,
59438         T44 arg44,
59439         T45 arg45,
59440         T46 arg46,
59441         T47 arg47,
59442         T48 arg48,
59443         T49 arg49,
59444         T50 arg50,
59445         T51 arg51,
59446         T52 arg52,
59447         T53 arg53,
59448         T54 arg54,
59449         T55 arg55,
59450         T56 arg56,
59451         T57 arg57,
59452         T58 arg58,
59453         T59 arg59,
59454         T60 arg60,
59455         T61 arg61,
59456         T62 arg62,
59457         T63 arg63,
59458         T64 arg64,
59459         T65 arg65,
59460         T66 arg66,
59461         T67 arg67,
59462         T68 arg68,
59463         T69 arg69,
59464         T70 arg70,
59465         T71 arg71,
59466         T72 arg72,
59467         T73 arg73,
59468         T74 arg74,
59469         T75 arg75,
59470         T76 arg76,
59471         T77 arg77,
59472         T78 arg78,
59473         T79 arg79,
59474         T80 arg80,
59475         T81 arg81,
59476         T82 arg82,
59477         T83 arg83,
59478         T84 arg84,
59479         T85 arg85,
59480         T86 arg86,
59481         T87 arg87,
59482         T88 arg88,
59483         T89 arg89,
59484         T90 arg90,
59485         T91 arg91,
59486         T92 arg92,
59487         T93 arg93,
59488         T94 arg94,
59489         T95 arg95,
59490         T96 arg96,
59491         T97 arg97,
59492         T98 arg98,
59493         T99 arg99,
59494         T100 arg100,
59495         T101 arg101,
59496         T102 arg102,
59497         T103 arg103,
59498         T104 arg104,
59499         T105 arg105,
59500         T106 arg106)
59501     {
59502         return functor_(
59503             enqueueArgs,
59504             arg0,
59505             arg1,
59506             arg2,
59507             arg3,
59508             arg4,
59509             arg5,
59510             arg6,
59511             arg7,
59512             arg8,
59513             arg9,
59514             arg10,
59515             arg11,
59516             arg12,
59517             arg13,
59518             arg14,
59519             arg15,
59520             arg16,
59521             arg17,
59522             arg18,
59523             arg19,
59524             arg20,
59525             arg21,
59526             arg22,
59527             arg23,
59528             arg24,
59529             arg25,
59530             arg26,
59531             arg27,
59532             arg28,
59533             arg29,
59534             arg30,
59535             arg31,
59536             arg32,
59537             arg33,
59538             arg34,
59539             arg35,
59540             arg36,
59541             arg37,
59542             arg38,
59543             arg39,
59544             arg40,
59545             arg41,
59546             arg42,
59547             arg43,
59548             arg44,
59549             arg45,
59550             arg46,
59551             arg47,
59552             arg48,
59553             arg49,
59554             arg50,
59555             arg51,
59556             arg52,
59557             arg53,
59558             arg54,
59559             arg55,
59560             arg56,
59561             arg57,
59562             arg58,
59563             arg59,
59564             arg60,
59565             arg61,
59566             arg62,
59567             arg63,
59568             arg64,
59569             arg65,
59570             arg66,
59571             arg67,
59572             arg68,
59573             arg69,
59574             arg70,
59575             arg71,
59576             arg72,
59577             arg73,
59578             arg74,
59579             arg75,
59580             arg76,
59581             arg77,
59582             arg78,
59583             arg79,
59584             arg80,
59585             arg81,
59586             arg82,
59587             arg83,
59588             arg84,
59589             arg85,
59590             arg86,
59591             arg87,
59592             arg88,
59593             arg89,
59594             arg90,
59595             arg91,
59596             arg92,
59597             arg93,
59598             arg94,
59599             arg95,
59600             arg96,
59601             arg97,
59602             arg98,
59603             arg99,
59604             arg100,
59605             arg101,
59606             arg102,
59607             arg103,
59608             arg104,
59609             arg105,
59610             arg106);
59611     }
59612 
59613     operator type_ ()    
59614     {
59615         return type_(*this);
59616     }
59617 
59618 };
59619 
59620 template<
59621     typename T0,
59622     typename T1,
59623     typename T2,
59624     typename T3,
59625     typename T4,
59626     typename T5,
59627     typename T6,
59628     typename T7,
59629     typename T8,
59630     typename T9,
59631     typename T10,
59632     typename T11,
59633     typename T12,
59634     typename T13,
59635     typename T14,
59636     typename T15,
59637     typename T16,
59638     typename T17,
59639     typename T18,
59640     typename T19,
59641     typename T20,
59642     typename T21,
59643     typename T22,
59644     typename T23,
59645     typename T24,
59646     typename T25,
59647     typename T26,
59648     typename T27,
59649     typename T28,
59650     typename T29,
59651     typename T30,
59652     typename T31,
59653     typename T32,
59654     typename T33,
59655     typename T34,
59656     typename T35,
59657     typename T36,
59658     typename T37,
59659     typename T38,
59660     typename T39,
59661     typename T40,
59662     typename T41,
59663     typename T42,
59664     typename T43,
59665     typename T44,
59666     typename T45,
59667     typename T46,
59668     typename T47,
59669     typename T48,
59670     typename T49,
59671     typename T50,
59672     typename T51,
59673     typename T52,
59674     typename T53,
59675     typename T54,
59676     typename T55,
59677     typename T56,
59678     typename T57,
59679     typename T58,
59680     typename T59,
59681     typename T60,
59682     typename T61,
59683     typename T62,
59684     typename T63,
59685     typename T64,
59686     typename T65,
59687     typename T66,
59688     typename T67,
59689     typename T68,
59690     typename T69,
59691     typename T70,
59692     typename T71,
59693     typename T72,
59694     typename T73,
59695     typename T74,
59696     typename T75,
59697     typename T76,
59698     typename T77,
59699     typename T78,
59700     typename T79,
59701     typename T80,
59702     typename T81,
59703     typename T82,
59704     typename T83,
59705     typename T84,
59706     typename T85,
59707     typename T86,
59708     typename T87,
59709     typename T88,
59710     typename T89,
59711     typename T90,
59712     typename T91,
59713     typename T92,
59714     typename T93,
59715     typename T94,
59716     typename T95,
59717     typename T96,
59718     typename T97,
59719     typename T98,
59720     typename T99,
59721     typename T100,
59722     typename T101,
59723     typename T102,
59724     typename T103,
59725     typename T104,
59726     typename T105,
59727     typename T106,
59728     typename T107>
59729 struct functionImplementation_<
59730     T0,
59731     T1,
59732     T2,
59733     T3,
59734     T4,
59735     T5,
59736     T6,
59737     T7,
59738     T8,
59739     T9,
59740     T10,
59741     T11,
59742     T12,
59743     T13,
59744     T14,
59745     T15,
59746     T16,
59747     T17,
59748     T18,
59749     T19,
59750     T20,
59751     T21,
59752     T22,
59753     T23,
59754     T24,
59755     T25,
59756     T26,
59757     T27,
59758     T28,
59759     T29,
59760     T30,
59761     T31,
59762     T32,
59763     T33,
59764     T34,
59765     T35,
59766     T36,
59767     T37,
59768     T38,
59769     T39,
59770     T40,
59771     T41,
59772     T42,
59773     T43,
59774     T44,
59775     T45,
59776     T46,
59777     T47,
59778     T48,
59779     T49,
59780     T50,
59781     T51,
59782     T52,
59783     T53,
59784     T54,
59785     T55,
59786     T56,
59787     T57,
59788     T58,
59789     T59,
59790     T60,
59791     T61,
59792     T62,
59793     T63,
59794     T64,
59795     T65,
59796     T66,
59797     T67,
59798     T68,
59799     T69,
59800     T70,
59801     T71,
59802     T72,
59803     T73,
59804     T74,
59805     T75,
59806     T76,
59807     T77,
59808     T78,
59809     T79,
59810     T80,
59811     T81,
59812     T82,
59813     T83,
59814     T84,
59815     T85,
59816     T86,
59817     T87,
59818     T88,
59819     T89,
59820     T90,
59821     T91,
59822     T92,
59823     T93,
59824     T94,
59825     T95,
59826     T96,
59827     T97,
59828     T98,
59829     T99,
59830     T100,
59831     T101,
59832     T102,
59833     T103,
59834     T104,
59835     T105,
59836     T106,
59837     T107,
59838     NullType,
59839     NullType,
59840     NullType,
59841     NullType,
59842     NullType,
59843     NullType,
59844     NullType,
59845     NullType,
59846     NullType,
59847     NullType,
59848     NullType,
59849     NullType,
59850     NullType,
59851     NullType,
59852     NullType,
59853     NullType,
59854     NullType,
59855     NullType,
59856     NullType,
59857     NullType>
59858 {
59859     typedef detail::KernelFunctorGlobal<
59860         T0,
59861         T1,
59862         T2,
59863         T3,
59864         T4,
59865         T5,
59866         T6,
59867         T7,
59868         T8,
59869         T9,
59870         T10,
59871         T11,
59872         T12,
59873         T13,
59874         T14,
59875         T15,
59876         T16,
59877         T17,
59878         T18,
59879         T19,
59880         T20,
59881         T21,
59882         T22,
59883         T23,
59884         T24,
59885         T25,
59886         T26,
59887         T27,
59888         T28,
59889         T29,
59890         T30,
59891         T31,
59892         T32,
59893         T33,
59894         T34,
59895         T35,
59896         T36,
59897         T37,
59898         T38,
59899         T39,
59900         T40,
59901         T41,
59902         T42,
59903         T43,
59904         T44,
59905         T45,
59906         T46,
59907         T47,
59908         T48,
59909         T49,
59910         T50,
59911         T51,
59912         T52,
59913         T53,
59914         T54,
59915         T55,
59916         T56,
59917         T57,
59918         T58,
59919         T59,
59920         T60,
59921         T61,
59922         T62,
59923         T63,
59924         T64,
59925         T65,
59926         T66,
59927         T67,
59928         T68,
59929         T69,
59930         T70,
59931         T71,
59932         T72,
59933         T73,
59934         T74,
59935         T75,
59936         T76,
59937         T77,
59938         T78,
59939         T79,
59940         T80,
59941         T81,
59942         T82,
59943         T83,
59944         T84,
59945         T85,
59946         T86,
59947         T87,
59948         T88,
59949         T89,
59950         T90,
59951         T91,
59952         T92,
59953         T93,
59954         T94,
59955         T95,
59956         T96,
59957         T97,
59958         T98,
59959         T99,
59960         T100,
59961         T101,
59962         T102,
59963         T103,
59964         T104,
59965         T105,
59966         T106,
59967         T107,
59968         NullType,
59969         NullType,
59970         NullType,
59971         NullType,
59972         NullType,
59973         NullType,
59974         NullType,
59975         NullType,
59976         NullType,
59977         NullType,
59978         NullType,
59979         NullType,
59980         NullType,
59981         NullType,
59982         NullType,
59983         NullType,
59984         NullType,
59985         NullType,
59986         NullType,
59987         NullType> FunctorType;
59988 
59989     FunctorType functor_;
59990 
59991     functionImplementation_(const FunctorType &functor) :
59992         functor_(functor)
59993     {
59994     }
59995         
59996     typedef std::tr1::function<Event (
59997         const EnqueueArgs&,
59998         T0,
59999         T1,
60000         T2,
60001         T3,
60002         T4,
60003         T5,
60004         T6,
60005         T7,
60006         T8,
60007         T9,
60008         T10,
60009         T11,
60010         T12,
60011         T13,
60012         T14,
60013         T15,
60014         T16,
60015         T17,
60016         T18,
60017         T19,
60018         T20,
60019         T21,
60020         T22,
60021         T23,
60022         T24,
60023         T25,
60024         T26,
60025         T27,
60026         T28,
60027         T29,
60028         T30,
60029         T31,
60030         T32,
60031         T33,
60032         T34,
60033         T35,
60034         T36,
60035         T37,
60036         T38,
60037         T39,
60038         T40,
60039         T41,
60040         T42,
60041         T43,
60042         T44,
60043         T45,
60044         T46,
60045         T47,
60046         T48,
60047         T49,
60048         T50,
60049         T51,
60050         T52,
60051         T53,
60052         T54,
60053         T55,
60054         T56,
60055         T57,
60056         T58,
60057         T59,
60058         T60,
60059         T61,
60060         T62,
60061         T63,
60062         T64,
60063         T65,
60064         T66,
60065         T67,
60066         T68,
60067         T69,
60068         T70,
60069         T71,
60070         T72,
60071         T73,
60072         T74,
60073         T75,
60074         T76,
60075         T77,
60076         T78,
60077         T79,
60078         T80,
60079         T81,
60080         T82,
60081         T83,
60082         T84,
60083         T85,
60084         T86,
60085         T87,
60086         T88,
60087         T89,
60088         T90,
60089         T91,
60090         T92,
60091         T93,
60092         T94,
60093         T95,
60094         T96,
60095         T97,
60096         T98,
60097         T99,
60098         T100,
60099         T101,
60100         T102,
60101         T103,
60102         T104,
60103         T105,
60104         T106,
60105         T107)> type_;
60106 
60107     Event operator()(const EnqueueArgs& enqueueArgs,
60108         T0 arg0,
60109         T1 arg1,
60110         T2 arg2,
60111         T3 arg3,
60112         T4 arg4,
60113         T5 arg5,
60114         T6 arg6,
60115         T7 arg7,
60116         T8 arg8,
60117         T9 arg9,
60118         T10 arg10,
60119         T11 arg11,
60120         T12 arg12,
60121         T13 arg13,
60122         T14 arg14,
60123         T15 arg15,
60124         T16 arg16,
60125         T17 arg17,
60126         T18 arg18,
60127         T19 arg19,
60128         T20 arg20,
60129         T21 arg21,
60130         T22 arg22,
60131         T23 arg23,
60132         T24 arg24,
60133         T25 arg25,
60134         T26 arg26,
60135         T27 arg27,
60136         T28 arg28,
60137         T29 arg29,
60138         T30 arg30,
60139         T31 arg31,
60140         T32 arg32,
60141         T33 arg33,
60142         T34 arg34,
60143         T35 arg35,
60144         T36 arg36,
60145         T37 arg37,
60146         T38 arg38,
60147         T39 arg39,
60148         T40 arg40,
60149         T41 arg41,
60150         T42 arg42,
60151         T43 arg43,
60152         T44 arg44,
60153         T45 arg45,
60154         T46 arg46,
60155         T47 arg47,
60156         T48 arg48,
60157         T49 arg49,
60158         T50 arg50,
60159         T51 arg51,
60160         T52 arg52,
60161         T53 arg53,
60162         T54 arg54,
60163         T55 arg55,
60164         T56 arg56,
60165         T57 arg57,
60166         T58 arg58,
60167         T59 arg59,
60168         T60 arg60,
60169         T61 arg61,
60170         T62 arg62,
60171         T63 arg63,
60172         T64 arg64,
60173         T65 arg65,
60174         T66 arg66,
60175         T67 arg67,
60176         T68 arg68,
60177         T69 arg69,
60178         T70 arg70,
60179         T71 arg71,
60180         T72 arg72,
60181         T73 arg73,
60182         T74 arg74,
60183         T75 arg75,
60184         T76 arg76,
60185         T77 arg77,
60186         T78 arg78,
60187         T79 arg79,
60188         T80 arg80,
60189         T81 arg81,
60190         T82 arg82,
60191         T83 arg83,
60192         T84 arg84,
60193         T85 arg85,
60194         T86 arg86,
60195         T87 arg87,
60196         T88 arg88,
60197         T89 arg89,
60198         T90 arg90,
60199         T91 arg91,
60200         T92 arg92,
60201         T93 arg93,
60202         T94 arg94,
60203         T95 arg95,
60204         T96 arg96,
60205         T97 arg97,
60206         T98 arg98,
60207         T99 arg99,
60208         T100 arg100,
60209         T101 arg101,
60210         T102 arg102,
60211         T103 arg103,
60212         T104 arg104,
60213         T105 arg105,
60214         T106 arg106,
60215         T107 arg107)
60216     {
60217         return functor_(
60218             enqueueArgs,
60219             arg0,
60220             arg1,
60221             arg2,
60222             arg3,
60223             arg4,
60224             arg5,
60225             arg6,
60226             arg7,
60227             arg8,
60228             arg9,
60229             arg10,
60230             arg11,
60231             arg12,
60232             arg13,
60233             arg14,
60234             arg15,
60235             arg16,
60236             arg17,
60237             arg18,
60238             arg19,
60239             arg20,
60240             arg21,
60241             arg22,
60242             arg23,
60243             arg24,
60244             arg25,
60245             arg26,
60246             arg27,
60247             arg28,
60248             arg29,
60249             arg30,
60250             arg31,
60251             arg32,
60252             arg33,
60253             arg34,
60254             arg35,
60255             arg36,
60256             arg37,
60257             arg38,
60258             arg39,
60259             arg40,
60260             arg41,
60261             arg42,
60262             arg43,
60263             arg44,
60264             arg45,
60265             arg46,
60266             arg47,
60267             arg48,
60268             arg49,
60269             arg50,
60270             arg51,
60271             arg52,
60272             arg53,
60273             arg54,
60274             arg55,
60275             arg56,
60276             arg57,
60277             arg58,
60278             arg59,
60279             arg60,
60280             arg61,
60281             arg62,
60282             arg63,
60283             arg64,
60284             arg65,
60285             arg66,
60286             arg67,
60287             arg68,
60288             arg69,
60289             arg70,
60290             arg71,
60291             arg72,
60292             arg73,
60293             arg74,
60294             arg75,
60295             arg76,
60296             arg77,
60297             arg78,
60298             arg79,
60299             arg80,
60300             arg81,
60301             arg82,
60302             arg83,
60303             arg84,
60304             arg85,
60305             arg86,
60306             arg87,
60307             arg88,
60308             arg89,
60309             arg90,
60310             arg91,
60311             arg92,
60312             arg93,
60313             arg94,
60314             arg95,
60315             arg96,
60316             arg97,
60317             arg98,
60318             arg99,
60319             arg100,
60320             arg101,
60321             arg102,
60322             arg103,
60323             arg104,
60324             arg105,
60325             arg106,
60326             arg107);
60327     }
60328 
60329     operator type_ ()    
60330     {
60331         return type_(*this);
60332     }
60333 
60334 };
60335 
60336 template<
60337     typename T0,
60338     typename T1,
60339     typename T2,
60340     typename T3,
60341     typename T4,
60342     typename T5,
60343     typename T6,
60344     typename T7,
60345     typename T8,
60346     typename T9,
60347     typename T10,
60348     typename T11,
60349     typename T12,
60350     typename T13,
60351     typename T14,
60352     typename T15,
60353     typename T16,
60354     typename T17,
60355     typename T18,
60356     typename T19,
60357     typename T20,
60358     typename T21,
60359     typename T22,
60360     typename T23,
60361     typename T24,
60362     typename T25,
60363     typename T26,
60364     typename T27,
60365     typename T28,
60366     typename T29,
60367     typename T30,
60368     typename T31,
60369     typename T32,
60370     typename T33,
60371     typename T34,
60372     typename T35,
60373     typename T36,
60374     typename T37,
60375     typename T38,
60376     typename T39,
60377     typename T40,
60378     typename T41,
60379     typename T42,
60380     typename T43,
60381     typename T44,
60382     typename T45,
60383     typename T46,
60384     typename T47,
60385     typename T48,
60386     typename T49,
60387     typename T50,
60388     typename T51,
60389     typename T52,
60390     typename T53,
60391     typename T54,
60392     typename T55,
60393     typename T56,
60394     typename T57,
60395     typename T58,
60396     typename T59,
60397     typename T60,
60398     typename T61,
60399     typename T62,
60400     typename T63,
60401     typename T64,
60402     typename T65,
60403     typename T66,
60404     typename T67,
60405     typename T68,
60406     typename T69,
60407     typename T70,
60408     typename T71,
60409     typename T72,
60410     typename T73,
60411     typename T74,
60412     typename T75,
60413     typename T76,
60414     typename T77,
60415     typename T78,
60416     typename T79,
60417     typename T80,
60418     typename T81,
60419     typename T82,
60420     typename T83,
60421     typename T84,
60422     typename T85,
60423     typename T86,
60424     typename T87,
60425     typename T88,
60426     typename T89,
60427     typename T90,
60428     typename T91,
60429     typename T92,
60430     typename T93,
60431     typename T94,
60432     typename T95,
60433     typename T96,
60434     typename T97,
60435     typename T98,
60436     typename T99,
60437     typename T100,
60438     typename T101,
60439     typename T102,
60440     typename T103,
60441     typename T104,
60442     typename T105,
60443     typename T106,
60444     typename T107,
60445     typename T108>
60446 struct functionImplementation_<
60447     T0,
60448     T1,
60449     T2,
60450     T3,
60451     T4,
60452     T5,
60453     T6,
60454     T7,
60455     T8,
60456     T9,
60457     T10,
60458     T11,
60459     T12,
60460     T13,
60461     T14,
60462     T15,
60463     T16,
60464     T17,
60465     T18,
60466     T19,
60467     T20,
60468     T21,
60469     T22,
60470     T23,
60471     T24,
60472     T25,
60473     T26,
60474     T27,
60475     T28,
60476     T29,
60477     T30,
60478     T31,
60479     T32,
60480     T33,
60481     T34,
60482     T35,
60483     T36,
60484     T37,
60485     T38,
60486     T39,
60487     T40,
60488     T41,
60489     T42,
60490     T43,
60491     T44,
60492     T45,
60493     T46,
60494     T47,
60495     T48,
60496     T49,
60497     T50,
60498     T51,
60499     T52,
60500     T53,
60501     T54,
60502     T55,
60503     T56,
60504     T57,
60505     T58,
60506     T59,
60507     T60,
60508     T61,
60509     T62,
60510     T63,
60511     T64,
60512     T65,
60513     T66,
60514     T67,
60515     T68,
60516     T69,
60517     T70,
60518     T71,
60519     T72,
60520     T73,
60521     T74,
60522     T75,
60523     T76,
60524     T77,
60525     T78,
60526     T79,
60527     T80,
60528     T81,
60529     T82,
60530     T83,
60531     T84,
60532     T85,
60533     T86,
60534     T87,
60535     T88,
60536     T89,
60537     T90,
60538     T91,
60539     T92,
60540     T93,
60541     T94,
60542     T95,
60543     T96,
60544     T97,
60545     T98,
60546     T99,
60547     T100,
60548     T101,
60549     T102,
60550     T103,
60551     T104,
60552     T105,
60553     T106,
60554     T107,
60555     T108,
60556     NullType,
60557     NullType,
60558     NullType,
60559     NullType,
60560     NullType,
60561     NullType,
60562     NullType,
60563     NullType,
60564     NullType,
60565     NullType,
60566     NullType,
60567     NullType,
60568     NullType,
60569     NullType,
60570     NullType,
60571     NullType,
60572     NullType,
60573     NullType,
60574     NullType>
60575 {
60576     typedef detail::KernelFunctorGlobal<
60577         T0,
60578         T1,
60579         T2,
60580         T3,
60581         T4,
60582         T5,
60583         T6,
60584         T7,
60585         T8,
60586         T9,
60587         T10,
60588         T11,
60589         T12,
60590         T13,
60591         T14,
60592         T15,
60593         T16,
60594         T17,
60595         T18,
60596         T19,
60597         T20,
60598         T21,
60599         T22,
60600         T23,
60601         T24,
60602         T25,
60603         T26,
60604         T27,
60605         T28,
60606         T29,
60607         T30,
60608         T31,
60609         T32,
60610         T33,
60611         T34,
60612         T35,
60613         T36,
60614         T37,
60615         T38,
60616         T39,
60617         T40,
60618         T41,
60619         T42,
60620         T43,
60621         T44,
60622         T45,
60623         T46,
60624         T47,
60625         T48,
60626         T49,
60627         T50,
60628         T51,
60629         T52,
60630         T53,
60631         T54,
60632         T55,
60633         T56,
60634         T57,
60635         T58,
60636         T59,
60637         T60,
60638         T61,
60639         T62,
60640         T63,
60641         T64,
60642         T65,
60643         T66,
60644         T67,
60645         T68,
60646         T69,
60647         T70,
60648         T71,
60649         T72,
60650         T73,
60651         T74,
60652         T75,
60653         T76,
60654         T77,
60655         T78,
60656         T79,
60657         T80,
60658         T81,
60659         T82,
60660         T83,
60661         T84,
60662         T85,
60663         T86,
60664         T87,
60665         T88,
60666         T89,
60667         T90,
60668         T91,
60669         T92,
60670         T93,
60671         T94,
60672         T95,
60673         T96,
60674         T97,
60675         T98,
60676         T99,
60677         T100,
60678         T101,
60679         T102,
60680         T103,
60681         T104,
60682         T105,
60683         T106,
60684         T107,
60685         T108,
60686         NullType,
60687         NullType,
60688         NullType,
60689         NullType,
60690         NullType,
60691         NullType,
60692         NullType,
60693         NullType,
60694         NullType,
60695         NullType,
60696         NullType,
60697         NullType,
60698         NullType,
60699         NullType,
60700         NullType,
60701         NullType,
60702         NullType,
60703         NullType,
60704         NullType> FunctorType;
60705 
60706     FunctorType functor_;
60707 
60708     functionImplementation_(const FunctorType &functor) :
60709         functor_(functor)
60710     {
60711     }
60712         
60713     typedef std::tr1::function<Event (
60714         const EnqueueArgs&,
60715         T0,
60716         T1,
60717         T2,
60718         T3,
60719         T4,
60720         T5,
60721         T6,
60722         T7,
60723         T8,
60724         T9,
60725         T10,
60726         T11,
60727         T12,
60728         T13,
60729         T14,
60730         T15,
60731         T16,
60732         T17,
60733         T18,
60734         T19,
60735         T20,
60736         T21,
60737         T22,
60738         T23,
60739         T24,
60740         T25,
60741         T26,
60742         T27,
60743         T28,
60744         T29,
60745         T30,
60746         T31,
60747         T32,
60748         T33,
60749         T34,
60750         T35,
60751         T36,
60752         T37,
60753         T38,
60754         T39,
60755         T40,
60756         T41,
60757         T42,
60758         T43,
60759         T44,
60760         T45,
60761         T46,
60762         T47,
60763         T48,
60764         T49,
60765         T50,
60766         T51,
60767         T52,
60768         T53,
60769         T54,
60770         T55,
60771         T56,
60772         T57,
60773         T58,
60774         T59,
60775         T60,
60776         T61,
60777         T62,
60778         T63,
60779         T64,
60780         T65,
60781         T66,
60782         T67,
60783         T68,
60784         T69,
60785         T70,
60786         T71,
60787         T72,
60788         T73,
60789         T74,
60790         T75,
60791         T76,
60792         T77,
60793         T78,
60794         T79,
60795         T80,
60796         T81,
60797         T82,
60798         T83,
60799         T84,
60800         T85,
60801         T86,
60802         T87,
60803         T88,
60804         T89,
60805         T90,
60806         T91,
60807         T92,
60808         T93,
60809         T94,
60810         T95,
60811         T96,
60812         T97,
60813         T98,
60814         T99,
60815         T100,
60816         T101,
60817         T102,
60818         T103,
60819         T104,
60820         T105,
60821         T106,
60822         T107,
60823         T108)> type_;
60824 
60825     Event operator()(const EnqueueArgs& enqueueArgs,
60826         T0 arg0,
60827         T1 arg1,
60828         T2 arg2,
60829         T3 arg3,
60830         T4 arg4,
60831         T5 arg5,
60832         T6 arg6,
60833         T7 arg7,
60834         T8 arg8,
60835         T9 arg9,
60836         T10 arg10,
60837         T11 arg11,
60838         T12 arg12,
60839         T13 arg13,
60840         T14 arg14,
60841         T15 arg15,
60842         T16 arg16,
60843         T17 arg17,
60844         T18 arg18,
60845         T19 arg19,
60846         T20 arg20,
60847         T21 arg21,
60848         T22 arg22,
60849         T23 arg23,
60850         T24 arg24,
60851         T25 arg25,
60852         T26 arg26,
60853         T27 arg27,
60854         T28 arg28,
60855         T29 arg29,
60856         T30 arg30,
60857         T31 arg31,
60858         T32 arg32,
60859         T33 arg33,
60860         T34 arg34,
60861         T35 arg35,
60862         T36 arg36,
60863         T37 arg37,
60864         T38 arg38,
60865         T39 arg39,
60866         T40 arg40,
60867         T41 arg41,
60868         T42 arg42,
60869         T43 arg43,
60870         T44 arg44,
60871         T45 arg45,
60872         T46 arg46,
60873         T47 arg47,
60874         T48 arg48,
60875         T49 arg49,
60876         T50 arg50,
60877         T51 arg51,
60878         T52 arg52,
60879         T53 arg53,
60880         T54 arg54,
60881         T55 arg55,
60882         T56 arg56,
60883         T57 arg57,
60884         T58 arg58,
60885         T59 arg59,
60886         T60 arg60,
60887         T61 arg61,
60888         T62 arg62,
60889         T63 arg63,
60890         T64 arg64,
60891         T65 arg65,
60892         T66 arg66,
60893         T67 arg67,
60894         T68 arg68,
60895         T69 arg69,
60896         T70 arg70,
60897         T71 arg71,
60898         T72 arg72,
60899         T73 arg73,
60900         T74 arg74,
60901         T75 arg75,
60902         T76 arg76,
60903         T77 arg77,
60904         T78 arg78,
60905         T79 arg79,
60906         T80 arg80,
60907         T81 arg81,
60908         T82 arg82,
60909         T83 arg83,
60910         T84 arg84,
60911         T85 arg85,
60912         T86 arg86,
60913         T87 arg87,
60914         T88 arg88,
60915         T89 arg89,
60916         T90 arg90,
60917         T91 arg91,
60918         T92 arg92,
60919         T93 arg93,
60920         T94 arg94,
60921         T95 arg95,
60922         T96 arg96,
60923         T97 arg97,
60924         T98 arg98,
60925         T99 arg99,
60926         T100 arg100,
60927         T101 arg101,
60928         T102 arg102,
60929         T103 arg103,
60930         T104 arg104,
60931         T105 arg105,
60932         T106 arg106,
60933         T107 arg107,
60934         T108 arg108)
60935     {
60936         return functor_(
60937             enqueueArgs,
60938             arg0,
60939             arg1,
60940             arg2,
60941             arg3,
60942             arg4,
60943             arg5,
60944             arg6,
60945             arg7,
60946             arg8,
60947             arg9,
60948             arg10,
60949             arg11,
60950             arg12,
60951             arg13,
60952             arg14,
60953             arg15,
60954             arg16,
60955             arg17,
60956             arg18,
60957             arg19,
60958             arg20,
60959             arg21,
60960             arg22,
60961             arg23,
60962             arg24,
60963             arg25,
60964             arg26,
60965             arg27,
60966             arg28,
60967             arg29,
60968             arg30,
60969             arg31,
60970             arg32,
60971             arg33,
60972             arg34,
60973             arg35,
60974             arg36,
60975             arg37,
60976             arg38,
60977             arg39,
60978             arg40,
60979             arg41,
60980             arg42,
60981             arg43,
60982             arg44,
60983             arg45,
60984             arg46,
60985             arg47,
60986             arg48,
60987             arg49,
60988             arg50,
60989             arg51,
60990             arg52,
60991             arg53,
60992             arg54,
60993             arg55,
60994             arg56,
60995             arg57,
60996             arg58,
60997             arg59,
60998             arg60,
60999             arg61,
61000             arg62,
61001             arg63,
61002             arg64,
61003             arg65,
61004             arg66,
61005             arg67,
61006             arg68,
61007             arg69,
61008             arg70,
61009             arg71,
61010             arg72,
61011             arg73,
61012             arg74,
61013             arg75,
61014             arg76,
61015             arg77,
61016             arg78,
61017             arg79,
61018             arg80,
61019             arg81,
61020             arg82,
61021             arg83,
61022             arg84,
61023             arg85,
61024             arg86,
61025             arg87,
61026             arg88,
61027             arg89,
61028             arg90,
61029             arg91,
61030             arg92,
61031             arg93,
61032             arg94,
61033             arg95,
61034             arg96,
61035             arg97,
61036             arg98,
61037             arg99,
61038             arg100,
61039             arg101,
61040             arg102,
61041             arg103,
61042             arg104,
61043             arg105,
61044             arg106,
61045             arg107,
61046             arg108);
61047     }
61048 
61049     operator type_ ()    
61050     {
61051         return type_(*this);
61052     }
61053 
61054 };
61055 
61056 template<
61057     typename T0,
61058     typename T1,
61059     typename T2,
61060     typename T3,
61061     typename T4,
61062     typename T5,
61063     typename T6,
61064     typename T7,
61065     typename T8,
61066     typename T9,
61067     typename T10,
61068     typename T11,
61069     typename T12,
61070     typename T13,
61071     typename T14,
61072     typename T15,
61073     typename T16,
61074     typename T17,
61075     typename T18,
61076     typename T19,
61077     typename T20,
61078     typename T21,
61079     typename T22,
61080     typename T23,
61081     typename T24,
61082     typename T25,
61083     typename T26,
61084     typename T27,
61085     typename T28,
61086     typename T29,
61087     typename T30,
61088     typename T31,
61089     typename T32,
61090     typename T33,
61091     typename T34,
61092     typename T35,
61093     typename T36,
61094     typename T37,
61095     typename T38,
61096     typename T39,
61097     typename T40,
61098     typename T41,
61099     typename T42,
61100     typename T43,
61101     typename T44,
61102     typename T45,
61103     typename T46,
61104     typename T47,
61105     typename T48,
61106     typename T49,
61107     typename T50,
61108     typename T51,
61109     typename T52,
61110     typename T53,
61111     typename T54,
61112     typename T55,
61113     typename T56,
61114     typename T57,
61115     typename T58,
61116     typename T59,
61117     typename T60,
61118     typename T61,
61119     typename T62,
61120     typename T63,
61121     typename T64,
61122     typename T65,
61123     typename T66,
61124     typename T67,
61125     typename T68,
61126     typename T69,
61127     typename T70,
61128     typename T71,
61129     typename T72,
61130     typename T73,
61131     typename T74,
61132     typename T75,
61133     typename T76,
61134     typename T77,
61135     typename T78,
61136     typename T79,
61137     typename T80,
61138     typename T81,
61139     typename T82,
61140     typename T83,
61141     typename T84,
61142     typename T85,
61143     typename T86,
61144     typename T87,
61145     typename T88,
61146     typename T89,
61147     typename T90,
61148     typename T91,
61149     typename T92,
61150     typename T93,
61151     typename T94,
61152     typename T95,
61153     typename T96,
61154     typename T97,
61155     typename T98,
61156     typename T99,
61157     typename T100,
61158     typename T101,
61159     typename T102,
61160     typename T103,
61161     typename T104,
61162     typename T105,
61163     typename T106,
61164     typename T107,
61165     typename T108,
61166     typename T109>
61167 struct functionImplementation_<
61168     T0,
61169     T1,
61170     T2,
61171     T3,
61172     T4,
61173     T5,
61174     T6,
61175     T7,
61176     T8,
61177     T9,
61178     T10,
61179     T11,
61180     T12,
61181     T13,
61182     T14,
61183     T15,
61184     T16,
61185     T17,
61186     T18,
61187     T19,
61188     T20,
61189     T21,
61190     T22,
61191     T23,
61192     T24,
61193     T25,
61194     T26,
61195     T27,
61196     T28,
61197     T29,
61198     T30,
61199     T31,
61200     T32,
61201     T33,
61202     T34,
61203     T35,
61204     T36,
61205     T37,
61206     T38,
61207     T39,
61208     T40,
61209     T41,
61210     T42,
61211     T43,
61212     T44,
61213     T45,
61214     T46,
61215     T47,
61216     T48,
61217     T49,
61218     T50,
61219     T51,
61220     T52,
61221     T53,
61222     T54,
61223     T55,
61224     T56,
61225     T57,
61226     T58,
61227     T59,
61228     T60,
61229     T61,
61230     T62,
61231     T63,
61232     T64,
61233     T65,
61234     T66,
61235     T67,
61236     T68,
61237     T69,
61238     T70,
61239     T71,
61240     T72,
61241     T73,
61242     T74,
61243     T75,
61244     T76,
61245     T77,
61246     T78,
61247     T79,
61248     T80,
61249     T81,
61250     T82,
61251     T83,
61252     T84,
61253     T85,
61254     T86,
61255     T87,
61256     T88,
61257     T89,
61258     T90,
61259     T91,
61260     T92,
61261     T93,
61262     T94,
61263     T95,
61264     T96,
61265     T97,
61266     T98,
61267     T99,
61268     T100,
61269     T101,
61270     T102,
61271     T103,
61272     T104,
61273     T105,
61274     T106,
61275     T107,
61276     T108,
61277     T109,
61278     NullType,
61279     NullType,
61280     NullType,
61281     NullType,
61282     NullType,
61283     NullType,
61284     NullType,
61285     NullType,
61286     NullType,
61287     NullType,
61288     NullType,
61289     NullType,
61290     NullType,
61291     NullType,
61292     NullType,
61293     NullType,
61294     NullType,
61295     NullType>
61296 {
61297     typedef detail::KernelFunctorGlobal<
61298         T0,
61299         T1,
61300         T2,
61301         T3,
61302         T4,
61303         T5,
61304         T6,
61305         T7,
61306         T8,
61307         T9,
61308         T10,
61309         T11,
61310         T12,
61311         T13,
61312         T14,
61313         T15,
61314         T16,
61315         T17,
61316         T18,
61317         T19,
61318         T20,
61319         T21,
61320         T22,
61321         T23,
61322         T24,
61323         T25,
61324         T26,
61325         T27,
61326         T28,
61327         T29,
61328         T30,
61329         T31,
61330         T32,
61331         T33,
61332         T34,
61333         T35,
61334         T36,
61335         T37,
61336         T38,
61337         T39,
61338         T40,
61339         T41,
61340         T42,
61341         T43,
61342         T44,
61343         T45,
61344         T46,
61345         T47,
61346         T48,
61347         T49,
61348         T50,
61349         T51,
61350         T52,
61351         T53,
61352         T54,
61353         T55,
61354         T56,
61355         T57,
61356         T58,
61357         T59,
61358         T60,
61359         T61,
61360         T62,
61361         T63,
61362         T64,
61363         T65,
61364         T66,
61365         T67,
61366         T68,
61367         T69,
61368         T70,
61369         T71,
61370         T72,
61371         T73,
61372         T74,
61373         T75,
61374         T76,
61375         T77,
61376         T78,
61377         T79,
61378         T80,
61379         T81,
61380         T82,
61381         T83,
61382         T84,
61383         T85,
61384         T86,
61385         T87,
61386         T88,
61387         T89,
61388         T90,
61389         T91,
61390         T92,
61391         T93,
61392         T94,
61393         T95,
61394         T96,
61395         T97,
61396         T98,
61397         T99,
61398         T100,
61399         T101,
61400         T102,
61401         T103,
61402         T104,
61403         T105,
61404         T106,
61405         T107,
61406         T108,
61407         T109,
61408         NullType,
61409         NullType,
61410         NullType,
61411         NullType,
61412         NullType,
61413         NullType,
61414         NullType,
61415         NullType,
61416         NullType,
61417         NullType,
61418         NullType,
61419         NullType,
61420         NullType,
61421         NullType,
61422         NullType,
61423         NullType,
61424         NullType,
61425         NullType> FunctorType;
61426 
61427     FunctorType functor_;
61428 
61429     functionImplementation_(const FunctorType &functor) :
61430         functor_(functor)
61431     {
61432     }
61433         
61434     typedef std::tr1::function<Event (
61435         const EnqueueArgs&,
61436         T0,
61437         T1,
61438         T2,
61439         T3,
61440         T4,
61441         T5,
61442         T6,
61443         T7,
61444         T8,
61445         T9,
61446         T10,
61447         T11,
61448         T12,
61449         T13,
61450         T14,
61451         T15,
61452         T16,
61453         T17,
61454         T18,
61455         T19,
61456         T20,
61457         T21,
61458         T22,
61459         T23,
61460         T24,
61461         T25,
61462         T26,
61463         T27,
61464         T28,
61465         T29,
61466         T30,
61467         T31,
61468         T32,
61469         T33,
61470         T34,
61471         T35,
61472         T36,
61473         T37,
61474         T38,
61475         T39,
61476         T40,
61477         T41,
61478         T42,
61479         T43,
61480         T44,
61481         T45,
61482         T46,
61483         T47,
61484         T48,
61485         T49,
61486         T50,
61487         T51,
61488         T52,
61489         T53,
61490         T54,
61491         T55,
61492         T56,
61493         T57,
61494         T58,
61495         T59,
61496         T60,
61497         T61,
61498         T62,
61499         T63,
61500         T64,
61501         T65,
61502         T66,
61503         T67,
61504         T68,
61505         T69,
61506         T70,
61507         T71,
61508         T72,
61509         T73,
61510         T74,
61511         T75,
61512         T76,
61513         T77,
61514         T78,
61515         T79,
61516         T80,
61517         T81,
61518         T82,
61519         T83,
61520         T84,
61521         T85,
61522         T86,
61523         T87,
61524         T88,
61525         T89,
61526         T90,
61527         T91,
61528         T92,
61529         T93,
61530         T94,
61531         T95,
61532         T96,
61533         T97,
61534         T98,
61535         T99,
61536         T100,
61537         T101,
61538         T102,
61539         T103,
61540         T104,
61541         T105,
61542         T106,
61543         T107,
61544         T108,
61545         T109)> type_;
61546 
61547     Event operator()(const EnqueueArgs& enqueueArgs,
61548         T0 arg0,
61549         T1 arg1,
61550         T2 arg2,
61551         T3 arg3,
61552         T4 arg4,
61553         T5 arg5,
61554         T6 arg6,
61555         T7 arg7,
61556         T8 arg8,
61557         T9 arg9,
61558         T10 arg10,
61559         T11 arg11,
61560         T12 arg12,
61561         T13 arg13,
61562         T14 arg14,
61563         T15 arg15,
61564         T16 arg16,
61565         T17 arg17,
61566         T18 arg18,
61567         T19 arg19,
61568         T20 arg20,
61569         T21 arg21,
61570         T22 arg22,
61571         T23 arg23,
61572         T24 arg24,
61573         T25 arg25,
61574         T26 arg26,
61575         T27 arg27,
61576         T28 arg28,
61577         T29 arg29,
61578         T30 arg30,
61579         T31 arg31,
61580         T32 arg32,
61581         T33 arg33,
61582         T34 arg34,
61583         T35 arg35,
61584         T36 arg36,
61585         T37 arg37,
61586         T38 arg38,
61587         T39 arg39,
61588         T40 arg40,
61589         T41 arg41,
61590         T42 arg42,
61591         T43 arg43,
61592         T44 arg44,
61593         T45 arg45,
61594         T46 arg46,
61595         T47 arg47,
61596         T48 arg48,
61597         T49 arg49,
61598         T50 arg50,
61599         T51 arg51,
61600         T52 arg52,
61601         T53 arg53,
61602         T54 arg54,
61603         T55 arg55,
61604         T56 arg56,
61605         T57 arg57,
61606         T58 arg58,
61607         T59 arg59,
61608         T60 arg60,
61609         T61 arg61,
61610         T62 arg62,
61611         T63 arg63,
61612         T64 arg64,
61613         T65 arg65,
61614         T66 arg66,
61615         T67 arg67,
61616         T68 arg68,
61617         T69 arg69,
61618         T70 arg70,
61619         T71 arg71,
61620         T72 arg72,
61621         T73 arg73,
61622         T74 arg74,
61623         T75 arg75,
61624         T76 arg76,
61625         T77 arg77,
61626         T78 arg78,
61627         T79 arg79,
61628         T80 arg80,
61629         T81 arg81,
61630         T82 arg82,
61631         T83 arg83,
61632         T84 arg84,
61633         T85 arg85,
61634         T86 arg86,
61635         T87 arg87,
61636         T88 arg88,
61637         T89 arg89,
61638         T90 arg90,
61639         T91 arg91,
61640         T92 arg92,
61641         T93 arg93,
61642         T94 arg94,
61643         T95 arg95,
61644         T96 arg96,
61645         T97 arg97,
61646         T98 arg98,
61647         T99 arg99,
61648         T100 arg100,
61649         T101 arg101,
61650         T102 arg102,
61651         T103 arg103,
61652         T104 arg104,
61653         T105 arg105,
61654         T106 arg106,
61655         T107 arg107,
61656         T108 arg108,
61657         T109 arg109)
61658     {
61659         return functor_(
61660             enqueueArgs,
61661             arg0,
61662             arg1,
61663             arg2,
61664             arg3,
61665             arg4,
61666             arg5,
61667             arg6,
61668             arg7,
61669             arg8,
61670             arg9,
61671             arg10,
61672             arg11,
61673             arg12,
61674             arg13,
61675             arg14,
61676             arg15,
61677             arg16,
61678             arg17,
61679             arg18,
61680             arg19,
61681             arg20,
61682             arg21,
61683             arg22,
61684             arg23,
61685             arg24,
61686             arg25,
61687             arg26,
61688             arg27,
61689             arg28,
61690             arg29,
61691             arg30,
61692             arg31,
61693             arg32,
61694             arg33,
61695             arg34,
61696             arg35,
61697             arg36,
61698             arg37,
61699             arg38,
61700             arg39,
61701             arg40,
61702             arg41,
61703             arg42,
61704             arg43,
61705             arg44,
61706             arg45,
61707             arg46,
61708             arg47,
61709             arg48,
61710             arg49,
61711             arg50,
61712             arg51,
61713             arg52,
61714             arg53,
61715             arg54,
61716             arg55,
61717             arg56,
61718             arg57,
61719             arg58,
61720             arg59,
61721             arg60,
61722             arg61,
61723             arg62,
61724             arg63,
61725             arg64,
61726             arg65,
61727             arg66,
61728             arg67,
61729             arg68,
61730             arg69,
61731             arg70,
61732             arg71,
61733             arg72,
61734             arg73,
61735             arg74,
61736             arg75,
61737             arg76,
61738             arg77,
61739             arg78,
61740             arg79,
61741             arg80,
61742             arg81,
61743             arg82,
61744             arg83,
61745             arg84,
61746             arg85,
61747             arg86,
61748             arg87,
61749             arg88,
61750             arg89,
61751             arg90,
61752             arg91,
61753             arg92,
61754             arg93,
61755             arg94,
61756             arg95,
61757             arg96,
61758             arg97,
61759             arg98,
61760             arg99,
61761             arg100,
61762             arg101,
61763             arg102,
61764             arg103,
61765             arg104,
61766             arg105,
61767             arg106,
61768             arg107,
61769             arg108,
61770             arg109);
61771     }
61772 
61773     operator type_ ()    
61774     {
61775         return type_(*this);
61776     }
61777 
61778 };
61779 
61780 template<
61781     typename T0,
61782     typename T1,
61783     typename T2,
61784     typename T3,
61785     typename T4,
61786     typename T5,
61787     typename T6,
61788     typename T7,
61789     typename T8,
61790     typename T9,
61791     typename T10,
61792     typename T11,
61793     typename T12,
61794     typename T13,
61795     typename T14,
61796     typename T15,
61797     typename T16,
61798     typename T17,
61799     typename T18,
61800     typename T19,
61801     typename T20,
61802     typename T21,
61803     typename T22,
61804     typename T23,
61805     typename T24,
61806     typename T25,
61807     typename T26,
61808     typename T27,
61809     typename T28,
61810     typename T29,
61811     typename T30,
61812     typename T31,
61813     typename T32,
61814     typename T33,
61815     typename T34,
61816     typename T35,
61817     typename T36,
61818     typename T37,
61819     typename T38,
61820     typename T39,
61821     typename T40,
61822     typename T41,
61823     typename T42,
61824     typename T43,
61825     typename T44,
61826     typename T45,
61827     typename T46,
61828     typename T47,
61829     typename T48,
61830     typename T49,
61831     typename T50,
61832     typename T51,
61833     typename T52,
61834     typename T53,
61835     typename T54,
61836     typename T55,
61837     typename T56,
61838     typename T57,
61839     typename T58,
61840     typename T59,
61841     typename T60,
61842     typename T61,
61843     typename T62,
61844     typename T63,
61845     typename T64,
61846     typename T65,
61847     typename T66,
61848     typename T67,
61849     typename T68,
61850     typename T69,
61851     typename T70,
61852     typename T71,
61853     typename T72,
61854     typename T73,
61855     typename T74,
61856     typename T75,
61857     typename T76,
61858     typename T77,
61859     typename T78,
61860     typename T79,
61861     typename T80,
61862     typename T81,
61863     typename T82,
61864     typename T83,
61865     typename T84,
61866     typename T85,
61867     typename T86,
61868     typename T87,
61869     typename T88,
61870     typename T89,
61871     typename T90,
61872     typename T91,
61873     typename T92,
61874     typename T93,
61875     typename T94,
61876     typename T95,
61877     typename T96,
61878     typename T97,
61879     typename T98,
61880     typename T99,
61881     typename T100,
61882     typename T101,
61883     typename T102,
61884     typename T103,
61885     typename T104,
61886     typename T105,
61887     typename T106,
61888     typename T107,
61889     typename T108,
61890     typename T109,
61891     typename T110>
61892 struct functionImplementation_<
61893     T0,
61894     T1,
61895     T2,
61896     T3,
61897     T4,
61898     T5,
61899     T6,
61900     T7,
61901     T8,
61902     T9,
61903     T10,
61904     T11,
61905     T12,
61906     T13,
61907     T14,
61908     T15,
61909     T16,
61910     T17,
61911     T18,
61912     T19,
61913     T20,
61914     T21,
61915     T22,
61916     T23,
61917     T24,
61918     T25,
61919     T26,
61920     T27,
61921     T28,
61922     T29,
61923     T30,
61924     T31,
61925     T32,
61926     T33,
61927     T34,
61928     T35,
61929     T36,
61930     T37,
61931     T38,
61932     T39,
61933     T40,
61934     T41,
61935     T42,
61936     T43,
61937     T44,
61938     T45,
61939     T46,
61940     T47,
61941     T48,
61942     T49,
61943     T50,
61944     T51,
61945     T52,
61946     T53,
61947     T54,
61948     T55,
61949     T56,
61950     T57,
61951     T58,
61952     T59,
61953     T60,
61954     T61,
61955     T62,
61956     T63,
61957     T64,
61958     T65,
61959     T66,
61960     T67,
61961     T68,
61962     T69,
61963     T70,
61964     T71,
61965     T72,
61966     T73,
61967     T74,
61968     T75,
61969     T76,
61970     T77,
61971     T78,
61972     T79,
61973     T80,
61974     T81,
61975     T82,
61976     T83,
61977     T84,
61978     T85,
61979     T86,
61980     T87,
61981     T88,
61982     T89,
61983     T90,
61984     T91,
61985     T92,
61986     T93,
61987     T94,
61988     T95,
61989     T96,
61990     T97,
61991     T98,
61992     T99,
61993     T100,
61994     T101,
61995     T102,
61996     T103,
61997     T104,
61998     T105,
61999     T106,
62000     T107,
62001     T108,
62002     T109,
62003     T110,
62004     NullType,
62005     NullType,
62006     NullType,
62007     NullType,
62008     NullType,
62009     NullType,
62010     NullType,
62011     NullType,
62012     NullType,
62013     NullType,
62014     NullType,
62015     NullType,
62016     NullType,
62017     NullType,
62018     NullType,
62019     NullType,
62020     NullType>
62021 {
62022     typedef detail::KernelFunctorGlobal<
62023         T0,
62024         T1,
62025         T2,
62026         T3,
62027         T4,
62028         T5,
62029         T6,
62030         T7,
62031         T8,
62032         T9,
62033         T10,
62034         T11,
62035         T12,
62036         T13,
62037         T14,
62038         T15,
62039         T16,
62040         T17,
62041         T18,
62042         T19,
62043         T20,
62044         T21,
62045         T22,
62046         T23,
62047         T24,
62048         T25,
62049         T26,
62050         T27,
62051         T28,
62052         T29,
62053         T30,
62054         T31,
62055         T32,
62056         T33,
62057         T34,
62058         T35,
62059         T36,
62060         T37,
62061         T38,
62062         T39,
62063         T40,
62064         T41,
62065         T42,
62066         T43,
62067         T44,
62068         T45,
62069         T46,
62070         T47,
62071         T48,
62072         T49,
62073         T50,
62074         T51,
62075         T52,
62076         T53,
62077         T54,
62078         T55,
62079         T56,
62080         T57,
62081         T58,
62082         T59,
62083         T60,
62084         T61,
62085         T62,
62086         T63,
62087         T64,
62088         T65,
62089         T66,
62090         T67,
62091         T68,
62092         T69,
62093         T70,
62094         T71,
62095         T72,
62096         T73,
62097         T74,
62098         T75,
62099         T76,
62100         T77,
62101         T78,
62102         T79,
62103         T80,
62104         T81,
62105         T82,
62106         T83,
62107         T84,
62108         T85,
62109         T86,
62110         T87,
62111         T88,
62112         T89,
62113         T90,
62114         T91,
62115         T92,
62116         T93,
62117         T94,
62118         T95,
62119         T96,
62120         T97,
62121         T98,
62122         T99,
62123         T100,
62124         T101,
62125         T102,
62126         T103,
62127         T104,
62128         T105,
62129         T106,
62130         T107,
62131         T108,
62132         T109,
62133         T110,
62134         NullType,
62135         NullType,
62136         NullType,
62137         NullType,
62138         NullType,
62139         NullType,
62140         NullType,
62141         NullType,
62142         NullType,
62143         NullType,
62144         NullType,
62145         NullType,
62146         NullType,
62147         NullType,
62148         NullType,
62149         NullType,
62150         NullType> FunctorType;
62151 
62152     FunctorType functor_;
62153 
62154     functionImplementation_(const FunctorType &functor) :
62155         functor_(functor)
62156     {
62157     }
62158         
62159     typedef std::tr1::function<Event (
62160         const EnqueueArgs&,
62161         T0,
62162         T1,
62163         T2,
62164         T3,
62165         T4,
62166         T5,
62167         T6,
62168         T7,
62169         T8,
62170         T9,
62171         T10,
62172         T11,
62173         T12,
62174         T13,
62175         T14,
62176         T15,
62177         T16,
62178         T17,
62179         T18,
62180         T19,
62181         T20,
62182         T21,
62183         T22,
62184         T23,
62185         T24,
62186         T25,
62187         T26,
62188         T27,
62189         T28,
62190         T29,
62191         T30,
62192         T31,
62193         T32,
62194         T33,
62195         T34,
62196         T35,
62197         T36,
62198         T37,
62199         T38,
62200         T39,
62201         T40,
62202         T41,
62203         T42,
62204         T43,
62205         T44,
62206         T45,
62207         T46,
62208         T47,
62209         T48,
62210         T49,
62211         T50,
62212         T51,
62213         T52,
62214         T53,
62215         T54,
62216         T55,
62217         T56,
62218         T57,
62219         T58,
62220         T59,
62221         T60,
62222         T61,
62223         T62,
62224         T63,
62225         T64,
62226         T65,
62227         T66,
62228         T67,
62229         T68,
62230         T69,
62231         T70,
62232         T71,
62233         T72,
62234         T73,
62235         T74,
62236         T75,
62237         T76,
62238         T77,
62239         T78,
62240         T79,
62241         T80,
62242         T81,
62243         T82,
62244         T83,
62245         T84,
62246         T85,
62247         T86,
62248         T87,
62249         T88,
62250         T89,
62251         T90,
62252         T91,
62253         T92,
62254         T93,
62255         T94,
62256         T95,
62257         T96,
62258         T97,
62259         T98,
62260         T99,
62261         T100,
62262         T101,
62263         T102,
62264         T103,
62265         T104,
62266         T105,
62267         T106,
62268         T107,
62269         T108,
62270         T109,
62271         T110)> type_;
62272 
62273     Event operator()(const EnqueueArgs& enqueueArgs,
62274         T0 arg0,
62275         T1 arg1,
62276         T2 arg2,
62277         T3 arg3,
62278         T4 arg4,
62279         T5 arg5,
62280         T6 arg6,
62281         T7 arg7,
62282         T8 arg8,
62283         T9 arg9,
62284         T10 arg10,
62285         T11 arg11,
62286         T12 arg12,
62287         T13 arg13,
62288         T14 arg14,
62289         T15 arg15,
62290         T16 arg16,
62291         T17 arg17,
62292         T18 arg18,
62293         T19 arg19,
62294         T20 arg20,
62295         T21 arg21,
62296         T22 arg22,
62297         T23 arg23,
62298         T24 arg24,
62299         T25 arg25,
62300         T26 arg26,
62301         T27 arg27,
62302         T28 arg28,
62303         T29 arg29,
62304         T30 arg30,
62305         T31 arg31,
62306         T32 arg32,
62307         T33 arg33,
62308         T34 arg34,
62309         T35 arg35,
62310         T36 arg36,
62311         T37 arg37,
62312         T38 arg38,
62313         T39 arg39,
62314         T40 arg40,
62315         T41 arg41,
62316         T42 arg42,
62317         T43 arg43,
62318         T44 arg44,
62319         T45 arg45,
62320         T46 arg46,
62321         T47 arg47,
62322         T48 arg48,
62323         T49 arg49,
62324         T50 arg50,
62325         T51 arg51,
62326         T52 arg52,
62327         T53 arg53,
62328         T54 arg54,
62329         T55 arg55,
62330         T56 arg56,
62331         T57 arg57,
62332         T58 arg58,
62333         T59 arg59,
62334         T60 arg60,
62335         T61 arg61,
62336         T62 arg62,
62337         T63 arg63,
62338         T64 arg64,
62339         T65 arg65,
62340         T66 arg66,
62341         T67 arg67,
62342         T68 arg68,
62343         T69 arg69,
62344         T70 arg70,
62345         T71 arg71,
62346         T72 arg72,
62347         T73 arg73,
62348         T74 arg74,
62349         T75 arg75,
62350         T76 arg76,
62351         T77 arg77,
62352         T78 arg78,
62353         T79 arg79,
62354         T80 arg80,
62355         T81 arg81,
62356         T82 arg82,
62357         T83 arg83,
62358         T84 arg84,
62359         T85 arg85,
62360         T86 arg86,
62361         T87 arg87,
62362         T88 arg88,
62363         T89 arg89,
62364         T90 arg90,
62365         T91 arg91,
62366         T92 arg92,
62367         T93 arg93,
62368         T94 arg94,
62369         T95 arg95,
62370         T96 arg96,
62371         T97 arg97,
62372         T98 arg98,
62373         T99 arg99,
62374         T100 arg100,
62375         T101 arg101,
62376         T102 arg102,
62377         T103 arg103,
62378         T104 arg104,
62379         T105 arg105,
62380         T106 arg106,
62381         T107 arg107,
62382         T108 arg108,
62383         T109 arg109,
62384         T110 arg110)
62385     {
62386         return functor_(
62387             enqueueArgs,
62388             arg0,
62389             arg1,
62390             arg2,
62391             arg3,
62392             arg4,
62393             arg5,
62394             arg6,
62395             arg7,
62396             arg8,
62397             arg9,
62398             arg10,
62399             arg11,
62400             arg12,
62401             arg13,
62402             arg14,
62403             arg15,
62404             arg16,
62405             arg17,
62406             arg18,
62407             arg19,
62408             arg20,
62409             arg21,
62410             arg22,
62411             arg23,
62412             arg24,
62413             arg25,
62414             arg26,
62415             arg27,
62416             arg28,
62417             arg29,
62418             arg30,
62419             arg31,
62420             arg32,
62421             arg33,
62422             arg34,
62423             arg35,
62424             arg36,
62425             arg37,
62426             arg38,
62427             arg39,
62428             arg40,
62429             arg41,
62430             arg42,
62431             arg43,
62432             arg44,
62433             arg45,
62434             arg46,
62435             arg47,
62436             arg48,
62437             arg49,
62438             arg50,
62439             arg51,
62440             arg52,
62441             arg53,
62442             arg54,
62443             arg55,
62444             arg56,
62445             arg57,
62446             arg58,
62447             arg59,
62448             arg60,
62449             arg61,
62450             arg62,
62451             arg63,
62452             arg64,
62453             arg65,
62454             arg66,
62455             arg67,
62456             arg68,
62457             arg69,
62458             arg70,
62459             arg71,
62460             arg72,
62461             arg73,
62462             arg74,
62463             arg75,
62464             arg76,
62465             arg77,
62466             arg78,
62467             arg79,
62468             arg80,
62469             arg81,
62470             arg82,
62471             arg83,
62472             arg84,
62473             arg85,
62474             arg86,
62475             arg87,
62476             arg88,
62477             arg89,
62478             arg90,
62479             arg91,
62480             arg92,
62481             arg93,
62482             arg94,
62483             arg95,
62484             arg96,
62485             arg97,
62486             arg98,
62487             arg99,
62488             arg100,
62489             arg101,
62490             arg102,
62491             arg103,
62492             arg104,
62493             arg105,
62494             arg106,
62495             arg107,
62496             arg108,
62497             arg109,
62498             arg110);
62499     }
62500 
62501     operator type_ ()    
62502     {
62503         return type_(*this);
62504     }
62505 
62506 };
62507 
62508 template<
62509     typename T0,
62510     typename T1,
62511     typename T2,
62512     typename T3,
62513     typename T4,
62514     typename T5,
62515     typename T6,
62516     typename T7,
62517     typename T8,
62518     typename T9,
62519     typename T10,
62520     typename T11,
62521     typename T12,
62522     typename T13,
62523     typename T14,
62524     typename T15,
62525     typename T16,
62526     typename T17,
62527     typename T18,
62528     typename T19,
62529     typename T20,
62530     typename T21,
62531     typename T22,
62532     typename T23,
62533     typename T24,
62534     typename T25,
62535     typename T26,
62536     typename T27,
62537     typename T28,
62538     typename T29,
62539     typename T30,
62540     typename T31,
62541     typename T32,
62542     typename T33,
62543     typename T34,
62544     typename T35,
62545     typename T36,
62546     typename T37,
62547     typename T38,
62548     typename T39,
62549     typename T40,
62550     typename T41,
62551     typename T42,
62552     typename T43,
62553     typename T44,
62554     typename T45,
62555     typename T46,
62556     typename T47,
62557     typename T48,
62558     typename T49,
62559     typename T50,
62560     typename T51,
62561     typename T52,
62562     typename T53,
62563     typename T54,
62564     typename T55,
62565     typename T56,
62566     typename T57,
62567     typename T58,
62568     typename T59,
62569     typename T60,
62570     typename T61,
62571     typename T62,
62572     typename T63,
62573     typename T64,
62574     typename T65,
62575     typename T66,
62576     typename T67,
62577     typename T68,
62578     typename T69,
62579     typename T70,
62580     typename T71,
62581     typename T72,
62582     typename T73,
62583     typename T74,
62584     typename T75,
62585     typename T76,
62586     typename T77,
62587     typename T78,
62588     typename T79,
62589     typename T80,
62590     typename T81,
62591     typename T82,
62592     typename T83,
62593     typename T84,
62594     typename T85,
62595     typename T86,
62596     typename T87,
62597     typename T88,
62598     typename T89,
62599     typename T90,
62600     typename T91,
62601     typename T92,
62602     typename T93,
62603     typename T94,
62604     typename T95,
62605     typename T96,
62606     typename T97,
62607     typename T98,
62608     typename T99,
62609     typename T100,
62610     typename T101,
62611     typename T102,
62612     typename T103,
62613     typename T104,
62614     typename T105,
62615     typename T106,
62616     typename T107,
62617     typename T108,
62618     typename T109,
62619     typename T110,
62620     typename T111>
62621 struct functionImplementation_<
62622     T0,
62623     T1,
62624     T2,
62625     T3,
62626     T4,
62627     T5,
62628     T6,
62629     T7,
62630     T8,
62631     T9,
62632     T10,
62633     T11,
62634     T12,
62635     T13,
62636     T14,
62637     T15,
62638     T16,
62639     T17,
62640     T18,
62641     T19,
62642     T20,
62643     T21,
62644     T22,
62645     T23,
62646     T24,
62647     T25,
62648     T26,
62649     T27,
62650     T28,
62651     T29,
62652     T30,
62653     T31,
62654     T32,
62655     T33,
62656     T34,
62657     T35,
62658     T36,
62659     T37,
62660     T38,
62661     T39,
62662     T40,
62663     T41,
62664     T42,
62665     T43,
62666     T44,
62667     T45,
62668     T46,
62669     T47,
62670     T48,
62671     T49,
62672     T50,
62673     T51,
62674     T52,
62675     T53,
62676     T54,
62677     T55,
62678     T56,
62679     T57,
62680     T58,
62681     T59,
62682     T60,
62683     T61,
62684     T62,
62685     T63,
62686     T64,
62687     T65,
62688     T66,
62689     T67,
62690     T68,
62691     T69,
62692     T70,
62693     T71,
62694     T72,
62695     T73,
62696     T74,
62697     T75,
62698     T76,
62699     T77,
62700     T78,
62701     T79,
62702     T80,
62703     T81,
62704     T82,
62705     T83,
62706     T84,
62707     T85,
62708     T86,
62709     T87,
62710     T88,
62711     T89,
62712     T90,
62713     T91,
62714     T92,
62715     T93,
62716     T94,
62717     T95,
62718     T96,
62719     T97,
62720     T98,
62721     T99,
62722     T100,
62723     T101,
62724     T102,
62725     T103,
62726     T104,
62727     T105,
62728     T106,
62729     T107,
62730     T108,
62731     T109,
62732     T110,
62733     T111,
62734     NullType,
62735     NullType,
62736     NullType,
62737     NullType,
62738     NullType,
62739     NullType,
62740     NullType,
62741     NullType,
62742     NullType,
62743     NullType,
62744     NullType,
62745     NullType,
62746     NullType,
62747     NullType,
62748     NullType,
62749     NullType>
62750 {
62751     typedef detail::KernelFunctorGlobal<
62752         T0,
62753         T1,
62754         T2,
62755         T3,
62756         T4,
62757         T5,
62758         T6,
62759         T7,
62760         T8,
62761         T9,
62762         T10,
62763         T11,
62764         T12,
62765         T13,
62766         T14,
62767         T15,
62768         T16,
62769         T17,
62770         T18,
62771         T19,
62772         T20,
62773         T21,
62774         T22,
62775         T23,
62776         T24,
62777         T25,
62778         T26,
62779         T27,
62780         T28,
62781         T29,
62782         T30,
62783         T31,
62784         T32,
62785         T33,
62786         T34,
62787         T35,
62788         T36,
62789         T37,
62790         T38,
62791         T39,
62792         T40,
62793         T41,
62794         T42,
62795         T43,
62796         T44,
62797         T45,
62798         T46,
62799         T47,
62800         T48,
62801         T49,
62802         T50,
62803         T51,
62804         T52,
62805         T53,
62806         T54,
62807         T55,
62808         T56,
62809         T57,
62810         T58,
62811         T59,
62812         T60,
62813         T61,
62814         T62,
62815         T63,
62816         T64,
62817         T65,
62818         T66,
62819         T67,
62820         T68,
62821         T69,
62822         T70,
62823         T71,
62824         T72,
62825         T73,
62826         T74,
62827         T75,
62828         T76,
62829         T77,
62830         T78,
62831         T79,
62832         T80,
62833         T81,
62834         T82,
62835         T83,
62836         T84,
62837         T85,
62838         T86,
62839         T87,
62840         T88,
62841         T89,
62842         T90,
62843         T91,
62844         T92,
62845         T93,
62846         T94,
62847         T95,
62848         T96,
62849         T97,
62850         T98,
62851         T99,
62852         T100,
62853         T101,
62854         T102,
62855         T103,
62856         T104,
62857         T105,
62858         T106,
62859         T107,
62860         T108,
62861         T109,
62862         T110,
62863         T111,
62864         NullType,
62865         NullType,
62866         NullType,
62867         NullType,
62868         NullType,
62869         NullType,
62870         NullType,
62871         NullType,
62872         NullType,
62873         NullType,
62874         NullType,
62875         NullType,
62876         NullType,
62877         NullType,
62878         NullType,
62879         NullType> FunctorType;
62880 
62881     FunctorType functor_;
62882 
62883     functionImplementation_(const FunctorType &functor) :
62884         functor_(functor)
62885     {
62886     }
62887         
62888     typedef std::tr1::function<Event (
62889         const EnqueueArgs&,
62890         T0,
62891         T1,
62892         T2,
62893         T3,
62894         T4,
62895         T5,
62896         T6,
62897         T7,
62898         T8,
62899         T9,
62900         T10,
62901         T11,
62902         T12,
62903         T13,
62904         T14,
62905         T15,
62906         T16,
62907         T17,
62908         T18,
62909         T19,
62910         T20,
62911         T21,
62912         T22,
62913         T23,
62914         T24,
62915         T25,
62916         T26,
62917         T27,
62918         T28,
62919         T29,
62920         T30,
62921         T31,
62922         T32,
62923         T33,
62924         T34,
62925         T35,
62926         T36,
62927         T37,
62928         T38,
62929         T39,
62930         T40,
62931         T41,
62932         T42,
62933         T43,
62934         T44,
62935         T45,
62936         T46,
62937         T47,
62938         T48,
62939         T49,
62940         T50,
62941         T51,
62942         T52,
62943         T53,
62944         T54,
62945         T55,
62946         T56,
62947         T57,
62948         T58,
62949         T59,
62950         T60,
62951         T61,
62952         T62,
62953         T63,
62954         T64,
62955         T65,
62956         T66,
62957         T67,
62958         T68,
62959         T69,
62960         T70,
62961         T71,
62962         T72,
62963         T73,
62964         T74,
62965         T75,
62966         T76,
62967         T77,
62968         T78,
62969         T79,
62970         T80,
62971         T81,
62972         T82,
62973         T83,
62974         T84,
62975         T85,
62976         T86,
62977         T87,
62978         T88,
62979         T89,
62980         T90,
62981         T91,
62982         T92,
62983         T93,
62984         T94,
62985         T95,
62986         T96,
62987         T97,
62988         T98,
62989         T99,
62990         T100,
62991         T101,
62992         T102,
62993         T103,
62994         T104,
62995         T105,
62996         T106,
62997         T107,
62998         T108,
62999         T109,
63000         T110,
63001         T111)> type_;
63002 
63003     Event operator()(const EnqueueArgs& enqueueArgs,
63004         T0 arg0,
63005         T1 arg1,
63006         T2 arg2,
63007         T3 arg3,
63008         T4 arg4,
63009         T5 arg5,
63010         T6 arg6,
63011         T7 arg7,
63012         T8 arg8,
63013         T9 arg9,
63014         T10 arg10,
63015         T11 arg11,
63016         T12 arg12,
63017         T13 arg13,
63018         T14 arg14,
63019         T15 arg15,
63020         T16 arg16,
63021         T17 arg17,
63022         T18 arg18,
63023         T19 arg19,
63024         T20 arg20,
63025         T21 arg21,
63026         T22 arg22,
63027         T23 arg23,
63028         T24 arg24,
63029         T25 arg25,
63030         T26 arg26,
63031         T27 arg27,
63032         T28 arg28,
63033         T29 arg29,
63034         T30 arg30,
63035         T31 arg31,
63036         T32 arg32,
63037         T33 arg33,
63038         T34 arg34,
63039         T35 arg35,
63040         T36 arg36,
63041         T37 arg37,
63042         T38 arg38,
63043         T39 arg39,
63044         T40 arg40,
63045         T41 arg41,
63046         T42 arg42,
63047         T43 arg43,
63048         T44 arg44,
63049         T45 arg45,
63050         T46 arg46,
63051         T47 arg47,
63052         T48 arg48,
63053         T49 arg49,
63054         T50 arg50,
63055         T51 arg51,
63056         T52 arg52,
63057         T53 arg53,
63058         T54 arg54,
63059         T55 arg55,
63060         T56 arg56,
63061         T57 arg57,
63062         T58 arg58,
63063         T59 arg59,
63064         T60 arg60,
63065         T61 arg61,
63066         T62 arg62,
63067         T63 arg63,
63068         T64 arg64,
63069         T65 arg65,
63070         T66 arg66,
63071         T67 arg67,
63072         T68 arg68,
63073         T69 arg69,
63074         T70 arg70,
63075         T71 arg71,
63076         T72 arg72,
63077         T73 arg73,
63078         T74 arg74,
63079         T75 arg75,
63080         T76 arg76,
63081         T77 arg77,
63082         T78 arg78,
63083         T79 arg79,
63084         T80 arg80,
63085         T81 arg81,
63086         T82 arg82,
63087         T83 arg83,
63088         T84 arg84,
63089         T85 arg85,
63090         T86 arg86,
63091         T87 arg87,
63092         T88 arg88,
63093         T89 arg89,
63094         T90 arg90,
63095         T91 arg91,
63096         T92 arg92,
63097         T93 arg93,
63098         T94 arg94,
63099         T95 arg95,
63100         T96 arg96,
63101         T97 arg97,
63102         T98 arg98,
63103         T99 arg99,
63104         T100 arg100,
63105         T101 arg101,
63106         T102 arg102,
63107         T103 arg103,
63108         T104 arg104,
63109         T105 arg105,
63110         T106 arg106,
63111         T107 arg107,
63112         T108 arg108,
63113         T109 arg109,
63114         T110 arg110,
63115         T111 arg111)
63116     {
63117         return functor_(
63118             enqueueArgs,
63119             arg0,
63120             arg1,
63121             arg2,
63122             arg3,
63123             arg4,
63124             arg5,
63125             arg6,
63126             arg7,
63127             arg8,
63128             arg9,
63129             arg10,
63130             arg11,
63131             arg12,
63132             arg13,
63133             arg14,
63134             arg15,
63135             arg16,
63136             arg17,
63137             arg18,
63138             arg19,
63139             arg20,
63140             arg21,
63141             arg22,
63142             arg23,
63143             arg24,
63144             arg25,
63145             arg26,
63146             arg27,
63147             arg28,
63148             arg29,
63149             arg30,
63150             arg31,
63151             arg32,
63152             arg33,
63153             arg34,
63154             arg35,
63155             arg36,
63156             arg37,
63157             arg38,
63158             arg39,
63159             arg40,
63160             arg41,
63161             arg42,
63162             arg43,
63163             arg44,
63164             arg45,
63165             arg46,
63166             arg47,
63167             arg48,
63168             arg49,
63169             arg50,
63170             arg51,
63171             arg52,
63172             arg53,
63173             arg54,
63174             arg55,
63175             arg56,
63176             arg57,
63177             arg58,
63178             arg59,
63179             arg60,
63180             arg61,
63181             arg62,
63182             arg63,
63183             arg64,
63184             arg65,
63185             arg66,
63186             arg67,
63187             arg68,
63188             arg69,
63189             arg70,
63190             arg71,
63191             arg72,
63192             arg73,
63193             arg74,
63194             arg75,
63195             arg76,
63196             arg77,
63197             arg78,
63198             arg79,
63199             arg80,
63200             arg81,
63201             arg82,
63202             arg83,
63203             arg84,
63204             arg85,
63205             arg86,
63206             arg87,
63207             arg88,
63208             arg89,
63209             arg90,
63210             arg91,
63211             arg92,
63212             arg93,
63213             arg94,
63214             arg95,
63215             arg96,
63216             arg97,
63217             arg98,
63218             arg99,
63219             arg100,
63220             arg101,
63221             arg102,
63222             arg103,
63223             arg104,
63224             arg105,
63225             arg106,
63226             arg107,
63227             arg108,
63228             arg109,
63229             arg110,
63230             arg111);
63231     }
63232 
63233     operator type_ ()    
63234     {
63235         return type_(*this);
63236     }
63237 
63238 };
63239 
63240 template<
63241     typename T0,
63242     typename T1,
63243     typename T2,
63244     typename T3,
63245     typename T4,
63246     typename T5,
63247     typename T6,
63248     typename T7,
63249     typename T8,
63250     typename T9,
63251     typename T10,
63252     typename T11,
63253     typename T12,
63254     typename T13,
63255     typename T14,
63256     typename T15,
63257     typename T16,
63258     typename T17,
63259     typename T18,
63260     typename T19,
63261     typename T20,
63262     typename T21,
63263     typename T22,
63264     typename T23,
63265     typename T24,
63266     typename T25,
63267     typename T26,
63268     typename T27,
63269     typename T28,
63270     typename T29,
63271     typename T30,
63272     typename T31,
63273     typename T32,
63274     typename T33,
63275     typename T34,
63276     typename T35,
63277     typename T36,
63278     typename T37,
63279     typename T38,
63280     typename T39,
63281     typename T40,
63282     typename T41,
63283     typename T42,
63284     typename T43,
63285     typename T44,
63286     typename T45,
63287     typename T46,
63288     typename T47,
63289     typename T48,
63290     typename T49,
63291     typename T50,
63292     typename T51,
63293     typename T52,
63294     typename T53,
63295     typename T54,
63296     typename T55,
63297     typename T56,
63298     typename T57,
63299     typename T58,
63300     typename T59,
63301     typename T60,
63302     typename T61,
63303     typename T62,
63304     typename T63,
63305     typename T64,
63306     typename T65,
63307     typename T66,
63308     typename T67,
63309     typename T68,
63310     typename T69,
63311     typename T70,
63312     typename T71,
63313     typename T72,
63314     typename T73,
63315     typename T74,
63316     typename T75,
63317     typename T76,
63318     typename T77,
63319     typename T78,
63320     typename T79,
63321     typename T80,
63322     typename T81,
63323     typename T82,
63324     typename T83,
63325     typename T84,
63326     typename T85,
63327     typename T86,
63328     typename T87,
63329     typename T88,
63330     typename T89,
63331     typename T90,
63332     typename T91,
63333     typename T92,
63334     typename T93,
63335     typename T94,
63336     typename T95,
63337     typename T96,
63338     typename T97,
63339     typename T98,
63340     typename T99,
63341     typename T100,
63342     typename T101,
63343     typename T102,
63344     typename T103,
63345     typename T104,
63346     typename T105,
63347     typename T106,
63348     typename T107,
63349     typename T108,
63350     typename T109,
63351     typename T110,
63352     typename T111,
63353     typename T112>
63354 struct functionImplementation_<
63355     T0,
63356     T1,
63357     T2,
63358     T3,
63359     T4,
63360     T5,
63361     T6,
63362     T7,
63363     T8,
63364     T9,
63365     T10,
63366     T11,
63367     T12,
63368     T13,
63369     T14,
63370     T15,
63371     T16,
63372     T17,
63373     T18,
63374     T19,
63375     T20,
63376     T21,
63377     T22,
63378     T23,
63379     T24,
63380     T25,
63381     T26,
63382     T27,
63383     T28,
63384     T29,
63385     T30,
63386     T31,
63387     T32,
63388     T33,
63389     T34,
63390     T35,
63391     T36,
63392     T37,
63393     T38,
63394     T39,
63395     T40,
63396     T41,
63397     T42,
63398     T43,
63399     T44,
63400     T45,
63401     T46,
63402     T47,
63403     T48,
63404     T49,
63405     T50,
63406     T51,
63407     T52,
63408     T53,
63409     T54,
63410     T55,
63411     T56,
63412     T57,
63413     T58,
63414     T59,
63415     T60,
63416     T61,
63417     T62,
63418     T63,
63419     T64,
63420     T65,
63421     T66,
63422     T67,
63423     T68,
63424     T69,
63425     T70,
63426     T71,
63427     T72,
63428     T73,
63429     T74,
63430     T75,
63431     T76,
63432     T77,
63433     T78,
63434     T79,
63435     T80,
63436     T81,
63437     T82,
63438     T83,
63439     T84,
63440     T85,
63441     T86,
63442     T87,
63443     T88,
63444     T89,
63445     T90,
63446     T91,
63447     T92,
63448     T93,
63449     T94,
63450     T95,
63451     T96,
63452     T97,
63453     T98,
63454     T99,
63455     T100,
63456     T101,
63457     T102,
63458     T103,
63459     T104,
63460     T105,
63461     T106,
63462     T107,
63463     T108,
63464     T109,
63465     T110,
63466     T111,
63467     T112,
63468     NullType,
63469     NullType,
63470     NullType,
63471     NullType,
63472     NullType,
63473     NullType,
63474     NullType,
63475     NullType,
63476     NullType,
63477     NullType,
63478     NullType,
63479     NullType,
63480     NullType,
63481     NullType,
63482     NullType>
63483 {
63484     typedef detail::KernelFunctorGlobal<
63485         T0,
63486         T1,
63487         T2,
63488         T3,
63489         T4,
63490         T5,
63491         T6,
63492         T7,
63493         T8,
63494         T9,
63495         T10,
63496         T11,
63497         T12,
63498         T13,
63499         T14,
63500         T15,
63501         T16,
63502         T17,
63503         T18,
63504         T19,
63505         T20,
63506         T21,
63507         T22,
63508         T23,
63509         T24,
63510         T25,
63511         T26,
63512         T27,
63513         T28,
63514         T29,
63515         T30,
63516         T31,
63517         T32,
63518         T33,
63519         T34,
63520         T35,
63521         T36,
63522         T37,
63523         T38,
63524         T39,
63525         T40,
63526         T41,
63527         T42,
63528         T43,
63529         T44,
63530         T45,
63531         T46,
63532         T47,
63533         T48,
63534         T49,
63535         T50,
63536         T51,
63537         T52,
63538         T53,
63539         T54,
63540         T55,
63541         T56,
63542         T57,
63543         T58,
63544         T59,
63545         T60,
63546         T61,
63547         T62,
63548         T63,
63549         T64,
63550         T65,
63551         T66,
63552         T67,
63553         T68,
63554         T69,
63555         T70,
63556         T71,
63557         T72,
63558         T73,
63559         T74,
63560         T75,
63561         T76,
63562         T77,
63563         T78,
63564         T79,
63565         T80,
63566         T81,
63567         T82,
63568         T83,
63569         T84,
63570         T85,
63571         T86,
63572         T87,
63573         T88,
63574         T89,
63575         T90,
63576         T91,
63577         T92,
63578         T93,
63579         T94,
63580         T95,
63581         T96,
63582         T97,
63583         T98,
63584         T99,
63585         T100,
63586         T101,
63587         T102,
63588         T103,
63589         T104,
63590         T105,
63591         T106,
63592         T107,
63593         T108,
63594         T109,
63595         T110,
63596         T111,
63597         T112,
63598         NullType,
63599         NullType,
63600         NullType,
63601         NullType,
63602         NullType,
63603         NullType,
63604         NullType,
63605         NullType,
63606         NullType,
63607         NullType,
63608         NullType,
63609         NullType,
63610         NullType,
63611         NullType,
63612         NullType> FunctorType;
63613 
63614     FunctorType functor_;
63615 
63616     functionImplementation_(const FunctorType &functor) :
63617         functor_(functor)
63618     {
63619     }
63620         
63621     typedef std::tr1::function<Event (
63622         const EnqueueArgs&,
63623         T0,
63624         T1,
63625         T2,
63626         T3,
63627         T4,
63628         T5,
63629         T6,
63630         T7,
63631         T8,
63632         T9,
63633         T10,
63634         T11,
63635         T12,
63636         T13,
63637         T14,
63638         T15,
63639         T16,
63640         T17,
63641         T18,
63642         T19,
63643         T20,
63644         T21,
63645         T22,
63646         T23,
63647         T24,
63648         T25,
63649         T26,
63650         T27,
63651         T28,
63652         T29,
63653         T30,
63654         T31,
63655         T32,
63656         T33,
63657         T34,
63658         T35,
63659         T36,
63660         T37,
63661         T38,
63662         T39,
63663         T40,
63664         T41,
63665         T42,
63666         T43,
63667         T44,
63668         T45,
63669         T46,
63670         T47,
63671         T48,
63672         T49,
63673         T50,
63674         T51,
63675         T52,
63676         T53,
63677         T54,
63678         T55,
63679         T56,
63680         T57,
63681         T58,
63682         T59,
63683         T60,
63684         T61,
63685         T62,
63686         T63,
63687         T64,
63688         T65,
63689         T66,
63690         T67,
63691         T68,
63692         T69,
63693         T70,
63694         T71,
63695         T72,
63696         T73,
63697         T74,
63698         T75,
63699         T76,
63700         T77,
63701         T78,
63702         T79,
63703         T80,
63704         T81,
63705         T82,
63706         T83,
63707         T84,
63708         T85,
63709         T86,
63710         T87,
63711         T88,
63712         T89,
63713         T90,
63714         T91,
63715         T92,
63716         T93,
63717         T94,
63718         T95,
63719         T96,
63720         T97,
63721         T98,
63722         T99,
63723         T100,
63724         T101,
63725         T102,
63726         T103,
63727         T104,
63728         T105,
63729         T106,
63730         T107,
63731         T108,
63732         T109,
63733         T110,
63734         T111,
63735         T112)> type_;
63736 
63737     Event operator()(const EnqueueArgs& enqueueArgs,
63738         T0 arg0,
63739         T1 arg1,
63740         T2 arg2,
63741         T3 arg3,
63742         T4 arg4,
63743         T5 arg5,
63744         T6 arg6,
63745         T7 arg7,
63746         T8 arg8,
63747         T9 arg9,
63748         T10 arg10,
63749         T11 arg11,
63750         T12 arg12,
63751         T13 arg13,
63752         T14 arg14,
63753         T15 arg15,
63754         T16 arg16,
63755         T17 arg17,
63756         T18 arg18,
63757         T19 arg19,
63758         T20 arg20,
63759         T21 arg21,
63760         T22 arg22,
63761         T23 arg23,
63762         T24 arg24,
63763         T25 arg25,
63764         T26 arg26,
63765         T27 arg27,
63766         T28 arg28,
63767         T29 arg29,
63768         T30 arg30,
63769         T31 arg31,
63770         T32 arg32,
63771         T33 arg33,
63772         T34 arg34,
63773         T35 arg35,
63774         T36 arg36,
63775         T37 arg37,
63776         T38 arg38,
63777         T39 arg39,
63778         T40 arg40,
63779         T41 arg41,
63780         T42 arg42,
63781         T43 arg43,
63782         T44 arg44,
63783         T45 arg45,
63784         T46 arg46,
63785         T47 arg47,
63786         T48 arg48,
63787         T49 arg49,
63788         T50 arg50,
63789         T51 arg51,
63790         T52 arg52,
63791         T53 arg53,
63792         T54 arg54,
63793         T55 arg55,
63794         T56 arg56,
63795         T57 arg57,
63796         T58 arg58,
63797         T59 arg59,
63798         T60 arg60,
63799         T61 arg61,
63800         T62 arg62,
63801         T63 arg63,
63802         T64 arg64,
63803         T65 arg65,
63804         T66 arg66,
63805         T67 arg67,
63806         T68 arg68,
63807         T69 arg69,
63808         T70 arg70,
63809         T71 arg71,
63810         T72 arg72,
63811         T73 arg73,
63812         T74 arg74,
63813         T75 arg75,
63814         T76 arg76,
63815         T77 arg77,
63816         T78 arg78,
63817         T79 arg79,
63818         T80 arg80,
63819         T81 arg81,
63820         T82 arg82,
63821         T83 arg83,
63822         T84 arg84,
63823         T85 arg85,
63824         T86 arg86,
63825         T87 arg87,
63826         T88 arg88,
63827         T89 arg89,
63828         T90 arg90,
63829         T91 arg91,
63830         T92 arg92,
63831         T93 arg93,
63832         T94 arg94,
63833         T95 arg95,
63834         T96 arg96,
63835         T97 arg97,
63836         T98 arg98,
63837         T99 arg99,
63838         T100 arg100,
63839         T101 arg101,
63840         T102 arg102,
63841         T103 arg103,
63842         T104 arg104,
63843         T105 arg105,
63844         T106 arg106,
63845         T107 arg107,
63846         T108 arg108,
63847         T109 arg109,
63848         T110 arg110,
63849         T111 arg111,
63850         T112 arg112)
63851     {
63852         return functor_(
63853             enqueueArgs,
63854             arg0,
63855             arg1,
63856             arg2,
63857             arg3,
63858             arg4,
63859             arg5,
63860             arg6,
63861             arg7,
63862             arg8,
63863             arg9,
63864             arg10,
63865             arg11,
63866             arg12,
63867             arg13,
63868             arg14,
63869             arg15,
63870             arg16,
63871             arg17,
63872             arg18,
63873             arg19,
63874             arg20,
63875             arg21,
63876             arg22,
63877             arg23,
63878             arg24,
63879             arg25,
63880             arg26,
63881             arg27,
63882             arg28,
63883             arg29,
63884             arg30,
63885             arg31,
63886             arg32,
63887             arg33,
63888             arg34,
63889             arg35,
63890             arg36,
63891             arg37,
63892             arg38,
63893             arg39,
63894             arg40,
63895             arg41,
63896             arg42,
63897             arg43,
63898             arg44,
63899             arg45,
63900             arg46,
63901             arg47,
63902             arg48,
63903             arg49,
63904             arg50,
63905             arg51,
63906             arg52,
63907             arg53,
63908             arg54,
63909             arg55,
63910             arg56,
63911             arg57,
63912             arg58,
63913             arg59,
63914             arg60,
63915             arg61,
63916             arg62,
63917             arg63,
63918             arg64,
63919             arg65,
63920             arg66,
63921             arg67,
63922             arg68,
63923             arg69,
63924             arg70,
63925             arg71,
63926             arg72,
63927             arg73,
63928             arg74,
63929             arg75,
63930             arg76,
63931             arg77,
63932             arg78,
63933             arg79,
63934             arg80,
63935             arg81,
63936             arg82,
63937             arg83,
63938             arg84,
63939             arg85,
63940             arg86,
63941             arg87,
63942             arg88,
63943             arg89,
63944             arg90,
63945             arg91,
63946             arg92,
63947             arg93,
63948             arg94,
63949             arg95,
63950             arg96,
63951             arg97,
63952             arg98,
63953             arg99,
63954             arg100,
63955             arg101,
63956             arg102,
63957             arg103,
63958             arg104,
63959             arg105,
63960             arg106,
63961             arg107,
63962             arg108,
63963             arg109,
63964             arg110,
63965             arg111,
63966             arg112);
63967     }
63968 
63969     operator type_ ()    
63970     {
63971         return type_(*this);
63972     }
63973 
63974 };
63975 
63976 template<
63977     typename T0,
63978     typename T1,
63979     typename T2,
63980     typename T3,
63981     typename T4,
63982     typename T5,
63983     typename T6,
63984     typename T7,
63985     typename T8,
63986     typename T9,
63987     typename T10,
63988     typename T11,
63989     typename T12,
63990     typename T13,
63991     typename T14,
63992     typename T15,
63993     typename T16,
63994     typename T17,
63995     typename T18,
63996     typename T19,
63997     typename T20,
63998     typename T21,
63999     typename T22,
64000     typename T23,
64001     typename T24,
64002     typename T25,
64003     typename T26,
64004     typename T27,
64005     typename T28,
64006     typename T29,
64007     typename T30,
64008     typename T31,
64009     typename T32,
64010     typename T33,
64011     typename T34,
64012     typename T35,
64013     typename T36,
64014     typename T37,
64015     typename T38,
64016     typename T39,
64017     typename T40,
64018     typename T41,
64019     typename T42,
64020     typename T43,
64021     typename T44,
64022     typename T45,
64023     typename T46,
64024     typename T47,
64025     typename T48,
64026     typename T49,
64027     typename T50,
64028     typename T51,
64029     typename T52,
64030     typename T53,
64031     typename T54,
64032     typename T55,
64033     typename T56,
64034     typename T57,
64035     typename T58,
64036     typename T59,
64037     typename T60,
64038     typename T61,
64039     typename T62,
64040     typename T63,
64041     typename T64,
64042     typename T65,
64043     typename T66,
64044     typename T67,
64045     typename T68,
64046     typename T69,
64047     typename T70,
64048     typename T71,
64049     typename T72,
64050     typename T73,
64051     typename T74,
64052     typename T75,
64053     typename T76,
64054     typename T77,
64055     typename T78,
64056     typename T79,
64057     typename T80,
64058     typename T81,
64059     typename T82,
64060     typename T83,
64061     typename T84,
64062     typename T85,
64063     typename T86,
64064     typename T87,
64065     typename T88,
64066     typename T89,
64067     typename T90,
64068     typename T91,
64069     typename T92,
64070     typename T93,
64071     typename T94,
64072     typename T95,
64073     typename T96,
64074     typename T97,
64075     typename T98,
64076     typename T99,
64077     typename T100,
64078     typename T101,
64079     typename T102,
64080     typename T103,
64081     typename T104,
64082     typename T105,
64083     typename T106,
64084     typename T107,
64085     typename T108,
64086     typename T109,
64087     typename T110,
64088     typename T111,
64089     typename T112,
64090     typename T113>
64091 struct functionImplementation_<
64092     T0,
64093     T1,
64094     T2,
64095     T3,
64096     T4,
64097     T5,
64098     T6,
64099     T7,
64100     T8,
64101     T9,
64102     T10,
64103     T11,
64104     T12,
64105     T13,
64106     T14,
64107     T15,
64108     T16,
64109     T17,
64110     T18,
64111     T19,
64112     T20,
64113     T21,
64114     T22,
64115     T23,
64116     T24,
64117     T25,
64118     T26,
64119     T27,
64120     T28,
64121     T29,
64122     T30,
64123     T31,
64124     T32,
64125     T33,
64126     T34,
64127     T35,
64128     T36,
64129     T37,
64130     T38,
64131     T39,
64132     T40,
64133     T41,
64134     T42,
64135     T43,
64136     T44,
64137     T45,
64138     T46,
64139     T47,
64140     T48,
64141     T49,
64142     T50,
64143     T51,
64144     T52,
64145     T53,
64146     T54,
64147     T55,
64148     T56,
64149     T57,
64150     T58,
64151     T59,
64152     T60,
64153     T61,
64154     T62,
64155     T63,
64156     T64,
64157     T65,
64158     T66,
64159     T67,
64160     T68,
64161     T69,
64162     T70,
64163     T71,
64164     T72,
64165     T73,
64166     T74,
64167     T75,
64168     T76,
64169     T77,
64170     T78,
64171     T79,
64172     T80,
64173     T81,
64174     T82,
64175     T83,
64176     T84,
64177     T85,
64178     T86,
64179     T87,
64180     T88,
64181     T89,
64182     T90,
64183     T91,
64184     T92,
64185     T93,
64186     T94,
64187     T95,
64188     T96,
64189     T97,
64190     T98,
64191     T99,
64192     T100,
64193     T101,
64194     T102,
64195     T103,
64196     T104,
64197     T105,
64198     T106,
64199     T107,
64200     T108,
64201     T109,
64202     T110,
64203     T111,
64204     T112,
64205     T113,
64206     NullType,
64207     NullType,
64208     NullType,
64209     NullType,
64210     NullType,
64211     NullType,
64212     NullType,
64213     NullType,
64214     NullType,
64215     NullType,
64216     NullType,
64217     NullType,
64218     NullType,
64219     NullType>
64220 {
64221     typedef detail::KernelFunctorGlobal<
64222         T0,
64223         T1,
64224         T2,
64225         T3,
64226         T4,
64227         T5,
64228         T6,
64229         T7,
64230         T8,
64231         T9,
64232         T10,
64233         T11,
64234         T12,
64235         T13,
64236         T14,
64237         T15,
64238         T16,
64239         T17,
64240         T18,
64241         T19,
64242         T20,
64243         T21,
64244         T22,
64245         T23,
64246         T24,
64247         T25,
64248         T26,
64249         T27,
64250         T28,
64251         T29,
64252         T30,
64253         T31,
64254         T32,
64255         T33,
64256         T34,
64257         T35,
64258         T36,
64259         T37,
64260         T38,
64261         T39,
64262         T40,
64263         T41,
64264         T42,
64265         T43,
64266         T44,
64267         T45,
64268         T46,
64269         T47,
64270         T48,
64271         T49,
64272         T50,
64273         T51,
64274         T52,
64275         T53,
64276         T54,
64277         T55,
64278         T56,
64279         T57,
64280         T58,
64281         T59,
64282         T60,
64283         T61,
64284         T62,
64285         T63,
64286         T64,
64287         T65,
64288         T66,
64289         T67,
64290         T68,
64291         T69,
64292         T70,
64293         T71,
64294         T72,
64295         T73,
64296         T74,
64297         T75,
64298         T76,
64299         T77,
64300         T78,
64301         T79,
64302         T80,
64303         T81,
64304         T82,
64305         T83,
64306         T84,
64307         T85,
64308         T86,
64309         T87,
64310         T88,
64311         T89,
64312         T90,
64313         T91,
64314         T92,
64315         T93,
64316         T94,
64317         T95,
64318         T96,
64319         T97,
64320         T98,
64321         T99,
64322         T100,
64323         T101,
64324         T102,
64325         T103,
64326         T104,
64327         T105,
64328         T106,
64329         T107,
64330         T108,
64331         T109,
64332         T110,
64333         T111,
64334         T112,
64335         T113,
64336         NullType,
64337         NullType,
64338         NullType,
64339         NullType,
64340         NullType,
64341         NullType,
64342         NullType,
64343         NullType,
64344         NullType,
64345         NullType,
64346         NullType,
64347         NullType,
64348         NullType,
64349         NullType> FunctorType;
64350 
64351     FunctorType functor_;
64352 
64353     functionImplementation_(const FunctorType &functor) :
64354         functor_(functor)
64355     {
64356     }
64357         
64358     typedef std::tr1::function<Event (
64359         const EnqueueArgs&,
64360         T0,
64361         T1,
64362         T2,
64363         T3,
64364         T4,
64365         T5,
64366         T6,
64367         T7,
64368         T8,
64369         T9,
64370         T10,
64371         T11,
64372         T12,
64373         T13,
64374         T14,
64375         T15,
64376         T16,
64377         T17,
64378         T18,
64379         T19,
64380         T20,
64381         T21,
64382         T22,
64383         T23,
64384         T24,
64385         T25,
64386         T26,
64387         T27,
64388         T28,
64389         T29,
64390         T30,
64391         T31,
64392         T32,
64393         T33,
64394         T34,
64395         T35,
64396         T36,
64397         T37,
64398         T38,
64399         T39,
64400         T40,
64401         T41,
64402         T42,
64403         T43,
64404         T44,
64405         T45,
64406         T46,
64407         T47,
64408         T48,
64409         T49,
64410         T50,
64411         T51,
64412         T52,
64413         T53,
64414         T54,
64415         T55,
64416         T56,
64417         T57,
64418         T58,
64419         T59,
64420         T60,
64421         T61,
64422         T62,
64423         T63,
64424         T64,
64425         T65,
64426         T66,
64427         T67,
64428         T68,
64429         T69,
64430         T70,
64431         T71,
64432         T72,
64433         T73,
64434         T74,
64435         T75,
64436         T76,
64437         T77,
64438         T78,
64439         T79,
64440         T80,
64441         T81,
64442         T82,
64443         T83,
64444         T84,
64445         T85,
64446         T86,
64447         T87,
64448         T88,
64449         T89,
64450         T90,
64451         T91,
64452         T92,
64453         T93,
64454         T94,
64455         T95,
64456         T96,
64457         T97,
64458         T98,
64459         T99,
64460         T100,
64461         T101,
64462         T102,
64463         T103,
64464         T104,
64465         T105,
64466         T106,
64467         T107,
64468         T108,
64469         T109,
64470         T110,
64471         T111,
64472         T112,
64473         T113)> type_;
64474 
64475     Event operator()(const EnqueueArgs& enqueueArgs,
64476         T0 arg0,
64477         T1 arg1,
64478         T2 arg2,
64479         T3 arg3,
64480         T4 arg4,
64481         T5 arg5,
64482         T6 arg6,
64483         T7 arg7,
64484         T8 arg8,
64485         T9 arg9,
64486         T10 arg10,
64487         T11 arg11,
64488         T12 arg12,
64489         T13 arg13,
64490         T14 arg14,
64491         T15 arg15,
64492         T16 arg16,
64493         T17 arg17,
64494         T18 arg18,
64495         T19 arg19,
64496         T20 arg20,
64497         T21 arg21,
64498         T22 arg22,
64499         T23 arg23,
64500         T24 arg24,
64501         T25 arg25,
64502         T26 arg26,
64503         T27 arg27,
64504         T28 arg28,
64505         T29 arg29,
64506         T30 arg30,
64507         T31 arg31,
64508         T32 arg32,
64509         T33 arg33,
64510         T34 arg34,
64511         T35 arg35,
64512         T36 arg36,
64513         T37 arg37,
64514         T38 arg38,
64515         T39 arg39,
64516         T40 arg40,
64517         T41 arg41,
64518         T42 arg42,
64519         T43 arg43,
64520         T44 arg44,
64521         T45 arg45,
64522         T46 arg46,
64523         T47 arg47,
64524         T48 arg48,
64525         T49 arg49,
64526         T50 arg50,
64527         T51 arg51,
64528         T52 arg52,
64529         T53 arg53,
64530         T54 arg54,
64531         T55 arg55,
64532         T56 arg56,
64533         T57 arg57,
64534         T58 arg58,
64535         T59 arg59,
64536         T60 arg60,
64537         T61 arg61,
64538         T62 arg62,
64539         T63 arg63,
64540         T64 arg64,
64541         T65 arg65,
64542         T66 arg66,
64543         T67 arg67,
64544         T68 arg68,
64545         T69 arg69,
64546         T70 arg70,
64547         T71 arg71,
64548         T72 arg72,
64549         T73 arg73,
64550         T74 arg74,
64551         T75 arg75,
64552         T76 arg76,
64553         T77 arg77,
64554         T78 arg78,
64555         T79 arg79,
64556         T80 arg80,
64557         T81 arg81,
64558         T82 arg82,
64559         T83 arg83,
64560         T84 arg84,
64561         T85 arg85,
64562         T86 arg86,
64563         T87 arg87,
64564         T88 arg88,
64565         T89 arg89,
64566         T90 arg90,
64567         T91 arg91,
64568         T92 arg92,
64569         T93 arg93,
64570         T94 arg94,
64571         T95 arg95,
64572         T96 arg96,
64573         T97 arg97,
64574         T98 arg98,
64575         T99 arg99,
64576         T100 arg100,
64577         T101 arg101,
64578         T102 arg102,
64579         T103 arg103,
64580         T104 arg104,
64581         T105 arg105,
64582         T106 arg106,
64583         T107 arg107,
64584         T108 arg108,
64585         T109 arg109,
64586         T110 arg110,
64587         T111 arg111,
64588         T112 arg112,
64589         T113 arg113)
64590     {
64591         return functor_(
64592             enqueueArgs,
64593             arg0,
64594             arg1,
64595             arg2,
64596             arg3,
64597             arg4,
64598             arg5,
64599             arg6,
64600             arg7,
64601             arg8,
64602             arg9,
64603             arg10,
64604             arg11,
64605             arg12,
64606             arg13,
64607             arg14,
64608             arg15,
64609             arg16,
64610             arg17,
64611             arg18,
64612             arg19,
64613             arg20,
64614             arg21,
64615             arg22,
64616             arg23,
64617             arg24,
64618             arg25,
64619             arg26,
64620             arg27,
64621             arg28,
64622             arg29,
64623             arg30,
64624             arg31,
64625             arg32,
64626             arg33,
64627             arg34,
64628             arg35,
64629             arg36,
64630             arg37,
64631             arg38,
64632             arg39,
64633             arg40,
64634             arg41,
64635             arg42,
64636             arg43,
64637             arg44,
64638             arg45,
64639             arg46,
64640             arg47,
64641             arg48,
64642             arg49,
64643             arg50,
64644             arg51,
64645             arg52,
64646             arg53,
64647             arg54,
64648             arg55,
64649             arg56,
64650             arg57,
64651             arg58,
64652             arg59,
64653             arg60,
64654             arg61,
64655             arg62,
64656             arg63,
64657             arg64,
64658             arg65,
64659             arg66,
64660             arg67,
64661             arg68,
64662             arg69,
64663             arg70,
64664             arg71,
64665             arg72,
64666             arg73,
64667             arg74,
64668             arg75,
64669             arg76,
64670             arg77,
64671             arg78,
64672             arg79,
64673             arg80,
64674             arg81,
64675             arg82,
64676             arg83,
64677             arg84,
64678             arg85,
64679             arg86,
64680             arg87,
64681             arg88,
64682             arg89,
64683             arg90,
64684             arg91,
64685             arg92,
64686             arg93,
64687             arg94,
64688             arg95,
64689             arg96,
64690             arg97,
64691             arg98,
64692             arg99,
64693             arg100,
64694             arg101,
64695             arg102,
64696             arg103,
64697             arg104,
64698             arg105,
64699             arg106,
64700             arg107,
64701             arg108,
64702             arg109,
64703             arg110,
64704             arg111,
64705             arg112,
64706             arg113);
64707     }
64708 
64709     operator type_ ()    
64710     {
64711         return type_(*this);
64712     }
64713 
64714 };
64715 
64716 template<
64717     typename T0,
64718     typename T1,
64719     typename T2,
64720     typename T3,
64721     typename T4,
64722     typename T5,
64723     typename T6,
64724     typename T7,
64725     typename T8,
64726     typename T9,
64727     typename T10,
64728     typename T11,
64729     typename T12,
64730     typename T13,
64731     typename T14,
64732     typename T15,
64733     typename T16,
64734     typename T17,
64735     typename T18,
64736     typename T19,
64737     typename T20,
64738     typename T21,
64739     typename T22,
64740     typename T23,
64741     typename T24,
64742     typename T25,
64743     typename T26,
64744     typename T27,
64745     typename T28,
64746     typename T29,
64747     typename T30,
64748     typename T31,
64749     typename T32,
64750     typename T33,
64751     typename T34,
64752     typename T35,
64753     typename T36,
64754     typename T37,
64755     typename T38,
64756     typename T39,
64757     typename T40,
64758     typename T41,
64759     typename T42,
64760     typename T43,
64761     typename T44,
64762     typename T45,
64763     typename T46,
64764     typename T47,
64765     typename T48,
64766     typename T49,
64767     typename T50,
64768     typename T51,
64769     typename T52,
64770     typename T53,
64771     typename T54,
64772     typename T55,
64773     typename T56,
64774     typename T57,
64775     typename T58,
64776     typename T59,
64777     typename T60,
64778     typename T61,
64779     typename T62,
64780     typename T63,
64781     typename T64,
64782     typename T65,
64783     typename T66,
64784     typename T67,
64785     typename T68,
64786     typename T69,
64787     typename T70,
64788     typename T71,
64789     typename T72,
64790     typename T73,
64791     typename T74,
64792     typename T75,
64793     typename T76,
64794     typename T77,
64795     typename T78,
64796     typename T79,
64797     typename T80,
64798     typename T81,
64799     typename T82,
64800     typename T83,
64801     typename T84,
64802     typename T85,
64803     typename T86,
64804     typename T87,
64805     typename T88,
64806     typename T89,
64807     typename T90,
64808     typename T91,
64809     typename T92,
64810     typename T93,
64811     typename T94,
64812     typename T95,
64813     typename T96,
64814     typename T97,
64815     typename T98,
64816     typename T99,
64817     typename T100,
64818     typename T101,
64819     typename T102,
64820     typename T103,
64821     typename T104,
64822     typename T105,
64823     typename T106,
64824     typename T107,
64825     typename T108,
64826     typename T109,
64827     typename T110,
64828     typename T111,
64829     typename T112,
64830     typename T113,
64831     typename T114>
64832 struct functionImplementation_<
64833     T0,
64834     T1,
64835     T2,
64836     T3,
64837     T4,
64838     T5,
64839     T6,
64840     T7,
64841     T8,
64842     T9,
64843     T10,
64844     T11,
64845     T12,
64846     T13,
64847     T14,
64848     T15,
64849     T16,
64850     T17,
64851     T18,
64852     T19,
64853     T20,
64854     T21,
64855     T22,
64856     T23,
64857     T24,
64858     T25,
64859     T26,
64860     T27,
64861     T28,
64862     T29,
64863     T30,
64864     T31,
64865     T32,
64866     T33,
64867     T34,
64868     T35,
64869     T36,
64870     T37,
64871     T38,
64872     T39,
64873     T40,
64874     T41,
64875     T42,
64876     T43,
64877     T44,
64878     T45,
64879     T46,
64880     T47,
64881     T48,
64882     T49,
64883     T50,
64884     T51,
64885     T52,
64886     T53,
64887     T54,
64888     T55,
64889     T56,
64890     T57,
64891     T58,
64892     T59,
64893     T60,
64894     T61,
64895     T62,
64896     T63,
64897     T64,
64898     T65,
64899     T66,
64900     T67,
64901     T68,
64902     T69,
64903     T70,
64904     T71,
64905     T72,
64906     T73,
64907     T74,
64908     T75,
64909     T76,
64910     T77,
64911     T78,
64912     T79,
64913     T80,
64914     T81,
64915     T82,
64916     T83,
64917     T84,
64918     T85,
64919     T86,
64920     T87,
64921     T88,
64922     T89,
64923     T90,
64924     T91,
64925     T92,
64926     T93,
64927     T94,
64928     T95,
64929     T96,
64930     T97,
64931     T98,
64932     T99,
64933     T100,
64934     T101,
64935     T102,
64936     T103,
64937     T104,
64938     T105,
64939     T106,
64940     T107,
64941     T108,
64942     T109,
64943     T110,
64944     T111,
64945     T112,
64946     T113,
64947     T114,
64948     NullType,
64949     NullType,
64950     NullType,
64951     NullType,
64952     NullType,
64953     NullType,
64954     NullType,
64955     NullType,
64956     NullType,
64957     NullType,
64958     NullType,
64959     NullType,
64960     NullType>
64961 {
64962     typedef detail::KernelFunctorGlobal<
64963         T0,
64964         T1,
64965         T2,
64966         T3,
64967         T4,
64968         T5,
64969         T6,
64970         T7,
64971         T8,
64972         T9,
64973         T10,
64974         T11,
64975         T12,
64976         T13,
64977         T14,
64978         T15,
64979         T16,
64980         T17,
64981         T18,
64982         T19,
64983         T20,
64984         T21,
64985         T22,
64986         T23,
64987         T24,
64988         T25,
64989         T26,
64990         T27,
64991         T28,
64992         T29,
64993         T30,
64994         T31,
64995         T32,
64996         T33,
64997         T34,
64998         T35,
64999         T36,
65000         T37,
65001         T38,
65002         T39,
65003         T40,
65004         T41,
65005         T42,
65006         T43,
65007         T44,
65008         T45,
65009         T46,
65010         T47,
65011         T48,
65012         T49,
65013         T50,
65014         T51,
65015         T52,
65016         T53,
65017         T54,
65018         T55,
65019         T56,
65020         T57,
65021         T58,
65022         T59,
65023         T60,
65024         T61,
65025         T62,
65026         T63,
65027         T64,
65028         T65,
65029         T66,
65030         T67,
65031         T68,
65032         T69,
65033         T70,
65034         T71,
65035         T72,
65036         T73,
65037         T74,
65038         T75,
65039         T76,
65040         T77,
65041         T78,
65042         T79,
65043         T80,
65044         T81,
65045         T82,
65046         T83,
65047         T84,
65048         T85,
65049         T86,
65050         T87,
65051         T88,
65052         T89,
65053         T90,
65054         T91,
65055         T92,
65056         T93,
65057         T94,
65058         T95,
65059         T96,
65060         T97,
65061         T98,
65062         T99,
65063         T100,
65064         T101,
65065         T102,
65066         T103,
65067         T104,
65068         T105,
65069         T106,
65070         T107,
65071         T108,
65072         T109,
65073         T110,
65074         T111,
65075         T112,
65076         T113,
65077         T114,
65078         NullType,
65079         NullType,
65080         NullType,
65081         NullType,
65082         NullType,
65083         NullType,
65084         NullType,
65085         NullType,
65086         NullType,
65087         NullType,
65088         NullType,
65089         NullType,
65090         NullType> FunctorType;
65091 
65092     FunctorType functor_;
65093 
65094     functionImplementation_(const FunctorType &functor) :
65095         functor_(functor)
65096     {
65097     }
65098         
65099     typedef std::tr1::function<Event (
65100         const EnqueueArgs&,
65101         T0,
65102         T1,
65103         T2,
65104         T3,
65105         T4,
65106         T5,
65107         T6,
65108         T7,
65109         T8,
65110         T9,
65111         T10,
65112         T11,
65113         T12,
65114         T13,
65115         T14,
65116         T15,
65117         T16,
65118         T17,
65119         T18,
65120         T19,
65121         T20,
65122         T21,
65123         T22,
65124         T23,
65125         T24,
65126         T25,
65127         T26,
65128         T27,
65129         T28,
65130         T29,
65131         T30,
65132         T31,
65133         T32,
65134         T33,
65135         T34,
65136         T35,
65137         T36,
65138         T37,
65139         T38,
65140         T39,
65141         T40,
65142         T41,
65143         T42,
65144         T43,
65145         T44,
65146         T45,
65147         T46,
65148         T47,
65149         T48,
65150         T49,
65151         T50,
65152         T51,
65153         T52,
65154         T53,
65155         T54,
65156         T55,
65157         T56,
65158         T57,
65159         T58,
65160         T59,
65161         T60,
65162         T61,
65163         T62,
65164         T63,
65165         T64,
65166         T65,
65167         T66,
65168         T67,
65169         T68,
65170         T69,
65171         T70,
65172         T71,
65173         T72,
65174         T73,
65175         T74,
65176         T75,
65177         T76,
65178         T77,
65179         T78,
65180         T79,
65181         T80,
65182         T81,
65183         T82,
65184         T83,
65185         T84,
65186         T85,
65187         T86,
65188         T87,
65189         T88,
65190         T89,
65191         T90,
65192         T91,
65193         T92,
65194         T93,
65195         T94,
65196         T95,
65197         T96,
65198         T97,
65199         T98,
65200         T99,
65201         T100,
65202         T101,
65203         T102,
65204         T103,
65205         T104,
65206         T105,
65207         T106,
65208         T107,
65209         T108,
65210         T109,
65211         T110,
65212         T111,
65213         T112,
65214         T113,
65215         T114)> type_;
65216 
65217     Event operator()(const EnqueueArgs& enqueueArgs,
65218         T0 arg0,
65219         T1 arg1,
65220         T2 arg2,
65221         T3 arg3,
65222         T4 arg4,
65223         T5 arg5,
65224         T6 arg6,
65225         T7 arg7,
65226         T8 arg8,
65227         T9 arg9,
65228         T10 arg10,
65229         T11 arg11,
65230         T12 arg12,
65231         T13 arg13,
65232         T14 arg14,
65233         T15 arg15,
65234         T16 arg16,
65235         T17 arg17,
65236         T18 arg18,
65237         T19 arg19,
65238         T20 arg20,
65239         T21 arg21,
65240         T22 arg22,
65241         T23 arg23,
65242         T24 arg24,
65243         T25 arg25,
65244         T26 arg26,
65245         T27 arg27,
65246         T28 arg28,
65247         T29 arg29,
65248         T30 arg30,
65249         T31 arg31,
65250         T32 arg32,
65251         T33 arg33,
65252         T34 arg34,
65253         T35 arg35,
65254         T36 arg36,
65255         T37 arg37,
65256         T38 arg38,
65257         T39 arg39,
65258         T40 arg40,
65259         T41 arg41,
65260         T42 arg42,
65261         T43 arg43,
65262         T44 arg44,
65263         T45 arg45,
65264         T46 arg46,
65265         T47 arg47,
65266         T48 arg48,
65267         T49 arg49,
65268         T50 arg50,
65269         T51 arg51,
65270         T52 arg52,
65271         T53 arg53,
65272         T54 arg54,
65273         T55 arg55,
65274         T56 arg56,
65275         T57 arg57,
65276         T58 arg58,
65277         T59 arg59,
65278         T60 arg60,
65279         T61 arg61,
65280         T62 arg62,
65281         T63 arg63,
65282         T64 arg64,
65283         T65 arg65,
65284         T66 arg66,
65285         T67 arg67,
65286         T68 arg68,
65287         T69 arg69,
65288         T70 arg70,
65289         T71 arg71,
65290         T72 arg72,
65291         T73 arg73,
65292         T74 arg74,
65293         T75 arg75,
65294         T76 arg76,
65295         T77 arg77,
65296         T78 arg78,
65297         T79 arg79,
65298         T80 arg80,
65299         T81 arg81,
65300         T82 arg82,
65301         T83 arg83,
65302         T84 arg84,
65303         T85 arg85,
65304         T86 arg86,
65305         T87 arg87,
65306         T88 arg88,
65307         T89 arg89,
65308         T90 arg90,
65309         T91 arg91,
65310         T92 arg92,
65311         T93 arg93,
65312         T94 arg94,
65313         T95 arg95,
65314         T96 arg96,
65315         T97 arg97,
65316         T98 arg98,
65317         T99 arg99,
65318         T100 arg100,
65319         T101 arg101,
65320         T102 arg102,
65321         T103 arg103,
65322         T104 arg104,
65323         T105 arg105,
65324         T106 arg106,
65325         T107 arg107,
65326         T108 arg108,
65327         T109 arg109,
65328         T110 arg110,
65329         T111 arg111,
65330         T112 arg112,
65331         T113 arg113,
65332         T114 arg114)
65333     {
65334         return functor_(
65335             enqueueArgs,
65336             arg0,
65337             arg1,
65338             arg2,
65339             arg3,
65340             arg4,
65341             arg5,
65342             arg6,
65343             arg7,
65344             arg8,
65345             arg9,
65346             arg10,
65347             arg11,
65348             arg12,
65349             arg13,
65350             arg14,
65351             arg15,
65352             arg16,
65353             arg17,
65354             arg18,
65355             arg19,
65356             arg20,
65357             arg21,
65358             arg22,
65359             arg23,
65360             arg24,
65361             arg25,
65362             arg26,
65363             arg27,
65364             arg28,
65365             arg29,
65366             arg30,
65367             arg31,
65368             arg32,
65369             arg33,
65370             arg34,
65371             arg35,
65372             arg36,
65373             arg37,
65374             arg38,
65375             arg39,
65376             arg40,
65377             arg41,
65378             arg42,
65379             arg43,
65380             arg44,
65381             arg45,
65382             arg46,
65383             arg47,
65384             arg48,
65385             arg49,
65386             arg50,
65387             arg51,
65388             arg52,
65389             arg53,
65390             arg54,
65391             arg55,
65392             arg56,
65393             arg57,
65394             arg58,
65395             arg59,
65396             arg60,
65397             arg61,
65398             arg62,
65399             arg63,
65400             arg64,
65401             arg65,
65402             arg66,
65403             arg67,
65404             arg68,
65405             arg69,
65406             arg70,
65407             arg71,
65408             arg72,
65409             arg73,
65410             arg74,
65411             arg75,
65412             arg76,
65413             arg77,
65414             arg78,
65415             arg79,
65416             arg80,
65417             arg81,
65418             arg82,
65419             arg83,
65420             arg84,
65421             arg85,
65422             arg86,
65423             arg87,
65424             arg88,
65425             arg89,
65426             arg90,
65427             arg91,
65428             arg92,
65429             arg93,
65430             arg94,
65431             arg95,
65432             arg96,
65433             arg97,
65434             arg98,
65435             arg99,
65436             arg100,
65437             arg101,
65438             arg102,
65439             arg103,
65440             arg104,
65441             arg105,
65442             arg106,
65443             arg107,
65444             arg108,
65445             arg109,
65446             arg110,
65447             arg111,
65448             arg112,
65449             arg113,
65450             arg114);
65451     }
65452 
65453     operator type_ ()    
65454     {
65455         return type_(*this);
65456     }
65457 
65458 };
65459 
65460 template<
65461     typename T0,
65462     typename T1,
65463     typename T2,
65464     typename T3,
65465     typename T4,
65466     typename T5,
65467     typename T6,
65468     typename T7,
65469     typename T8,
65470     typename T9,
65471     typename T10,
65472     typename T11,
65473     typename T12,
65474     typename T13,
65475     typename T14,
65476     typename T15,
65477     typename T16,
65478     typename T17,
65479     typename T18,
65480     typename T19,
65481     typename T20,
65482     typename T21,
65483     typename T22,
65484     typename T23,
65485     typename T24,
65486     typename T25,
65487     typename T26,
65488     typename T27,
65489     typename T28,
65490     typename T29,
65491     typename T30,
65492     typename T31,
65493     typename T32,
65494     typename T33,
65495     typename T34,
65496     typename T35,
65497     typename T36,
65498     typename T37,
65499     typename T38,
65500     typename T39,
65501     typename T40,
65502     typename T41,
65503     typename T42,
65504     typename T43,
65505     typename T44,
65506     typename T45,
65507     typename T46,
65508     typename T47,
65509     typename T48,
65510     typename T49,
65511     typename T50,
65512     typename T51,
65513     typename T52,
65514     typename T53,
65515     typename T54,
65516     typename T55,
65517     typename T56,
65518     typename T57,
65519     typename T58,
65520     typename T59,
65521     typename T60,
65522     typename T61,
65523     typename T62,
65524     typename T63,
65525     typename T64,
65526     typename T65,
65527     typename T66,
65528     typename T67,
65529     typename T68,
65530     typename T69,
65531     typename T70,
65532     typename T71,
65533     typename T72,
65534     typename T73,
65535     typename T74,
65536     typename T75,
65537     typename T76,
65538     typename T77,
65539     typename T78,
65540     typename T79,
65541     typename T80,
65542     typename T81,
65543     typename T82,
65544     typename T83,
65545     typename T84,
65546     typename T85,
65547     typename T86,
65548     typename T87,
65549     typename T88,
65550     typename T89,
65551     typename T90,
65552     typename T91,
65553     typename T92,
65554     typename T93,
65555     typename T94,
65556     typename T95,
65557     typename T96,
65558     typename T97,
65559     typename T98,
65560     typename T99,
65561     typename T100,
65562     typename T101,
65563     typename T102,
65564     typename T103,
65565     typename T104,
65566     typename T105,
65567     typename T106,
65568     typename T107,
65569     typename T108,
65570     typename T109,
65571     typename T110,
65572     typename T111,
65573     typename T112,
65574     typename T113,
65575     typename T114,
65576     typename T115>
65577 struct functionImplementation_<
65578     T0,
65579     T1,
65580     T2,
65581     T3,
65582     T4,
65583     T5,
65584     T6,
65585     T7,
65586     T8,
65587     T9,
65588     T10,
65589     T11,
65590     T12,
65591     T13,
65592     T14,
65593     T15,
65594     T16,
65595     T17,
65596     T18,
65597     T19,
65598     T20,
65599     T21,
65600     T22,
65601     T23,
65602     T24,
65603     T25,
65604     T26,
65605     T27,
65606     T28,
65607     T29,
65608     T30,
65609     T31,
65610     T32,
65611     T33,
65612     T34,
65613     T35,
65614     T36,
65615     T37,
65616     T38,
65617     T39,
65618     T40,
65619     T41,
65620     T42,
65621     T43,
65622     T44,
65623     T45,
65624     T46,
65625     T47,
65626     T48,
65627     T49,
65628     T50,
65629     T51,
65630     T52,
65631     T53,
65632     T54,
65633     T55,
65634     T56,
65635     T57,
65636     T58,
65637     T59,
65638     T60,
65639     T61,
65640     T62,
65641     T63,
65642     T64,
65643     T65,
65644     T66,
65645     T67,
65646     T68,
65647     T69,
65648     T70,
65649     T71,
65650     T72,
65651     T73,
65652     T74,
65653     T75,
65654     T76,
65655     T77,
65656     T78,
65657     T79,
65658     T80,
65659     T81,
65660     T82,
65661     T83,
65662     T84,
65663     T85,
65664     T86,
65665     T87,
65666     T88,
65667     T89,
65668     T90,
65669     T91,
65670     T92,
65671     T93,
65672     T94,
65673     T95,
65674     T96,
65675     T97,
65676     T98,
65677     T99,
65678     T100,
65679     T101,
65680     T102,
65681     T103,
65682     T104,
65683     T105,
65684     T106,
65685     T107,
65686     T108,
65687     T109,
65688     T110,
65689     T111,
65690     T112,
65691     T113,
65692     T114,
65693     T115,
65694     NullType,
65695     NullType,
65696     NullType,
65697     NullType,
65698     NullType,
65699     NullType,
65700     NullType,
65701     NullType,
65702     NullType,
65703     NullType,
65704     NullType,
65705     NullType>
65706 {
65707     typedef detail::KernelFunctorGlobal<
65708         T0,
65709         T1,
65710         T2,
65711         T3,
65712         T4,
65713         T5,
65714         T6,
65715         T7,
65716         T8,
65717         T9,
65718         T10,
65719         T11,
65720         T12,
65721         T13,
65722         T14,
65723         T15,
65724         T16,
65725         T17,
65726         T18,
65727         T19,
65728         T20,
65729         T21,
65730         T22,
65731         T23,
65732         T24,
65733         T25,
65734         T26,
65735         T27,
65736         T28,
65737         T29,
65738         T30,
65739         T31,
65740         T32,
65741         T33,
65742         T34,
65743         T35,
65744         T36,
65745         T37,
65746         T38,
65747         T39,
65748         T40,
65749         T41,
65750         T42,
65751         T43,
65752         T44,
65753         T45,
65754         T46,
65755         T47,
65756         T48,
65757         T49,
65758         T50,
65759         T51,
65760         T52,
65761         T53,
65762         T54,
65763         T55,
65764         T56,
65765         T57,
65766         T58,
65767         T59,
65768         T60,
65769         T61,
65770         T62,
65771         T63,
65772         T64,
65773         T65,
65774         T66,
65775         T67,
65776         T68,
65777         T69,
65778         T70,
65779         T71,
65780         T72,
65781         T73,
65782         T74,
65783         T75,
65784         T76,
65785         T77,
65786         T78,
65787         T79,
65788         T80,
65789         T81,
65790         T82,
65791         T83,
65792         T84,
65793         T85,
65794         T86,
65795         T87,
65796         T88,
65797         T89,
65798         T90,
65799         T91,
65800         T92,
65801         T93,
65802         T94,
65803         T95,
65804         T96,
65805         T97,
65806         T98,
65807         T99,
65808         T100,
65809         T101,
65810         T102,
65811         T103,
65812         T104,
65813         T105,
65814         T106,
65815         T107,
65816         T108,
65817         T109,
65818         T110,
65819         T111,
65820         T112,
65821         T113,
65822         T114,
65823         T115,
65824         NullType,
65825         NullType,
65826         NullType,
65827         NullType,
65828         NullType,
65829         NullType,
65830         NullType,
65831         NullType,
65832         NullType,
65833         NullType,
65834         NullType,
65835         NullType> FunctorType;
65836 
65837     FunctorType functor_;
65838 
65839     functionImplementation_(const FunctorType &functor) :
65840         functor_(functor)
65841     {
65842     }
65843         
65844     typedef std::tr1::function<Event (
65845         const EnqueueArgs&,
65846         T0,
65847         T1,
65848         T2,
65849         T3,
65850         T4,
65851         T5,
65852         T6,
65853         T7,
65854         T8,
65855         T9,
65856         T10,
65857         T11,
65858         T12,
65859         T13,
65860         T14,
65861         T15,
65862         T16,
65863         T17,
65864         T18,
65865         T19,
65866         T20,
65867         T21,
65868         T22,
65869         T23,
65870         T24,
65871         T25,
65872         T26,
65873         T27,
65874         T28,
65875         T29,
65876         T30,
65877         T31,
65878         T32,
65879         T33,
65880         T34,
65881         T35,
65882         T36,
65883         T37,
65884         T38,
65885         T39,
65886         T40,
65887         T41,
65888         T42,
65889         T43,
65890         T44,
65891         T45,
65892         T46,
65893         T47,
65894         T48,
65895         T49,
65896         T50,
65897         T51,
65898         T52,
65899         T53,
65900         T54,
65901         T55,
65902         T56,
65903         T57,
65904         T58,
65905         T59,
65906         T60,
65907         T61,
65908         T62,
65909         T63,
65910         T64,
65911         T65,
65912         T66,
65913         T67,
65914         T68,
65915         T69,
65916         T70,
65917         T71,
65918         T72,
65919         T73,
65920         T74,
65921         T75,
65922         T76,
65923         T77,
65924         T78,
65925         T79,
65926         T80,
65927         T81,
65928         T82,
65929         T83,
65930         T84,
65931         T85,
65932         T86,
65933         T87,
65934         T88,
65935         T89,
65936         T90,
65937         T91,
65938         T92,
65939         T93,
65940         T94,
65941         T95,
65942         T96,
65943         T97,
65944         T98,
65945         T99,
65946         T100,
65947         T101,
65948         T102,
65949         T103,
65950         T104,
65951         T105,
65952         T106,
65953         T107,
65954         T108,
65955         T109,
65956         T110,
65957         T111,
65958         T112,
65959         T113,
65960         T114,
65961         T115)> type_;
65962 
65963     Event operator()(const EnqueueArgs& enqueueArgs,
65964         T0 arg0,
65965         T1 arg1,
65966         T2 arg2,
65967         T3 arg3,
65968         T4 arg4,
65969         T5 arg5,
65970         T6 arg6,
65971         T7 arg7,
65972         T8 arg8,
65973         T9 arg9,
65974         T10 arg10,
65975         T11 arg11,
65976         T12 arg12,
65977         T13 arg13,
65978         T14 arg14,
65979         T15 arg15,
65980         T16 arg16,
65981         T17 arg17,
65982         T18 arg18,
65983         T19 arg19,
65984         T20 arg20,
65985         T21 arg21,
65986         T22 arg22,
65987         T23 arg23,
65988         T24 arg24,
65989         T25 arg25,
65990         T26 arg26,
65991         T27 arg27,
65992         T28 arg28,
65993         T29 arg29,
65994         T30 arg30,
65995         T31 arg31,
65996         T32 arg32,
65997         T33 arg33,
65998         T34 arg34,
65999         T35 arg35,
66000         T36 arg36,
66001         T37 arg37,
66002         T38 arg38,
66003         T39 arg39,
66004         T40 arg40,
66005         T41 arg41,
66006         T42 arg42,
66007         T43 arg43,
66008         T44 arg44,
66009         T45 arg45,
66010         T46 arg46,
66011         T47 arg47,
66012         T48 arg48,
66013         T49 arg49,
66014         T50 arg50,
66015         T51 arg51,
66016         T52 arg52,
66017         T53 arg53,
66018         T54 arg54,
66019         T55 arg55,
66020         T56 arg56,
66021         T57 arg57,
66022         T58 arg58,
66023         T59 arg59,
66024         T60 arg60,
66025         T61 arg61,
66026         T62 arg62,
66027         T63 arg63,
66028         T64 arg64,
66029         T65 arg65,
66030         T66 arg66,
66031         T67 arg67,
66032         T68 arg68,
66033         T69 arg69,
66034         T70 arg70,
66035         T71 arg71,
66036         T72 arg72,
66037         T73 arg73,
66038         T74 arg74,
66039         T75 arg75,
66040         T76 arg76,
66041         T77 arg77,
66042         T78 arg78,
66043         T79 arg79,
66044         T80 arg80,
66045         T81 arg81,
66046         T82 arg82,
66047         T83 arg83,
66048         T84 arg84,
66049         T85 arg85,
66050         T86 arg86,
66051         T87 arg87,
66052         T88 arg88,
66053         T89 arg89,
66054         T90 arg90,
66055         T91 arg91,
66056         T92 arg92,
66057         T93 arg93,
66058         T94 arg94,
66059         T95 arg95,
66060         T96 arg96,
66061         T97 arg97,
66062         T98 arg98,
66063         T99 arg99,
66064         T100 arg100,
66065         T101 arg101,
66066         T102 arg102,
66067         T103 arg103,
66068         T104 arg104,
66069         T105 arg105,
66070         T106 arg106,
66071         T107 arg107,
66072         T108 arg108,
66073         T109 arg109,
66074         T110 arg110,
66075         T111 arg111,
66076         T112 arg112,
66077         T113 arg113,
66078         T114 arg114,
66079         T115 arg115)
66080     {
66081         return functor_(
66082             enqueueArgs,
66083             arg0,
66084             arg1,
66085             arg2,
66086             arg3,
66087             arg4,
66088             arg5,
66089             arg6,
66090             arg7,
66091             arg8,
66092             arg9,
66093             arg10,
66094             arg11,
66095             arg12,
66096             arg13,
66097             arg14,
66098             arg15,
66099             arg16,
66100             arg17,
66101             arg18,
66102             arg19,
66103             arg20,
66104             arg21,
66105             arg22,
66106             arg23,
66107             arg24,
66108             arg25,
66109             arg26,
66110             arg27,
66111             arg28,
66112             arg29,
66113             arg30,
66114             arg31,
66115             arg32,
66116             arg33,
66117             arg34,
66118             arg35,
66119             arg36,
66120             arg37,
66121             arg38,
66122             arg39,
66123             arg40,
66124             arg41,
66125             arg42,
66126             arg43,
66127             arg44,
66128             arg45,
66129             arg46,
66130             arg47,
66131             arg48,
66132             arg49,
66133             arg50,
66134             arg51,
66135             arg52,
66136             arg53,
66137             arg54,
66138             arg55,
66139             arg56,
66140             arg57,
66141             arg58,
66142             arg59,
66143             arg60,
66144             arg61,
66145             arg62,
66146             arg63,
66147             arg64,
66148             arg65,
66149             arg66,
66150             arg67,
66151             arg68,
66152             arg69,
66153             arg70,
66154             arg71,
66155             arg72,
66156             arg73,
66157             arg74,
66158             arg75,
66159             arg76,
66160             arg77,
66161             arg78,
66162             arg79,
66163             arg80,
66164             arg81,
66165             arg82,
66166             arg83,
66167             arg84,
66168             arg85,
66169             arg86,
66170             arg87,
66171             arg88,
66172             arg89,
66173             arg90,
66174             arg91,
66175             arg92,
66176             arg93,
66177             arg94,
66178             arg95,
66179             arg96,
66180             arg97,
66181             arg98,
66182             arg99,
66183             arg100,
66184             arg101,
66185             arg102,
66186             arg103,
66187             arg104,
66188             arg105,
66189             arg106,
66190             arg107,
66191             arg108,
66192             arg109,
66193             arg110,
66194             arg111,
66195             arg112,
66196             arg113,
66197             arg114,
66198             arg115);
66199     }
66200 
66201     operator type_ ()    
66202     {
66203         return type_(*this);
66204     }
66205 
66206 };
66207 
66208 template<
66209     typename T0,
66210     typename T1,
66211     typename T2,
66212     typename T3,
66213     typename T4,
66214     typename T5,
66215     typename T6,
66216     typename T7,
66217     typename T8,
66218     typename T9,
66219     typename T10,
66220     typename T11,
66221     typename T12,
66222     typename T13,
66223     typename T14,
66224     typename T15,
66225     typename T16,
66226     typename T17,
66227     typename T18,
66228     typename T19,
66229     typename T20,
66230     typename T21,
66231     typename T22,
66232     typename T23,
66233     typename T24,
66234     typename T25,
66235     typename T26,
66236     typename T27,
66237     typename T28,
66238     typename T29,
66239     typename T30,
66240     typename T31,
66241     typename T32,
66242     typename T33,
66243     typename T34,
66244     typename T35,
66245     typename T36,
66246     typename T37,
66247     typename T38,
66248     typename T39,
66249     typename T40,
66250     typename T41,
66251     typename T42,
66252     typename T43,
66253     typename T44,
66254     typename T45,
66255     typename T46,
66256     typename T47,
66257     typename T48,
66258     typename T49,
66259     typename T50,
66260     typename T51,
66261     typename T52,
66262     typename T53,
66263     typename T54,
66264     typename T55,
66265     typename T56,
66266     typename T57,
66267     typename T58,
66268     typename T59,
66269     typename T60,
66270     typename T61,
66271     typename T62,
66272     typename T63,
66273     typename T64,
66274     typename T65,
66275     typename T66,
66276     typename T67,
66277     typename T68,
66278     typename T69,
66279     typename T70,
66280     typename T71,
66281     typename T72,
66282     typename T73,
66283     typename T74,
66284     typename T75,
66285     typename T76,
66286     typename T77,
66287     typename T78,
66288     typename T79,
66289     typename T80,
66290     typename T81,
66291     typename T82,
66292     typename T83,
66293     typename T84,
66294     typename T85,
66295     typename T86,
66296     typename T87,
66297     typename T88,
66298     typename T89,
66299     typename T90,
66300     typename T91,
66301     typename T92,
66302     typename T93,
66303     typename T94,
66304     typename T95,
66305     typename T96,
66306     typename T97,
66307     typename T98,
66308     typename T99,
66309     typename T100,
66310     typename T101,
66311     typename T102,
66312     typename T103,
66313     typename T104,
66314     typename T105,
66315     typename T106,
66316     typename T107,
66317     typename T108,
66318     typename T109,
66319     typename T110,
66320     typename T111,
66321     typename T112,
66322     typename T113,
66323     typename T114,
66324     typename T115,
66325     typename T116>
66326 struct functionImplementation_<
66327     T0,
66328     T1,
66329     T2,
66330     T3,
66331     T4,
66332     T5,
66333     T6,
66334     T7,
66335     T8,
66336     T9,
66337     T10,
66338     T11,
66339     T12,
66340     T13,
66341     T14,
66342     T15,
66343     T16,
66344     T17,
66345     T18,
66346     T19,
66347     T20,
66348     T21,
66349     T22,
66350     T23,
66351     T24,
66352     T25,
66353     T26,
66354     T27,
66355     T28,
66356     T29,
66357     T30,
66358     T31,
66359     T32,
66360     T33,
66361     T34,
66362     T35,
66363     T36,
66364     T37,
66365     T38,
66366     T39,
66367     T40,
66368     T41,
66369     T42,
66370     T43,
66371     T44,
66372     T45,
66373     T46,
66374     T47,
66375     T48,
66376     T49,
66377     T50,
66378     T51,
66379     T52,
66380     T53,
66381     T54,
66382     T55,
66383     T56,
66384     T57,
66385     T58,
66386     T59,
66387     T60,
66388     T61,
66389     T62,
66390     T63,
66391     T64,
66392     T65,
66393     T66,
66394     T67,
66395     T68,
66396     T69,
66397     T70,
66398     T71,
66399     T72,
66400     T73,
66401     T74,
66402     T75,
66403     T76,
66404     T77,
66405     T78,
66406     T79,
66407     T80,
66408     T81,
66409     T82,
66410     T83,
66411     T84,
66412     T85,
66413     T86,
66414     T87,
66415     T88,
66416     T89,
66417     T90,
66418     T91,
66419     T92,
66420     T93,
66421     T94,
66422     T95,
66423     T96,
66424     T97,
66425     T98,
66426     T99,
66427     T100,
66428     T101,
66429     T102,
66430     T103,
66431     T104,
66432     T105,
66433     T106,
66434     T107,
66435     T108,
66436     T109,
66437     T110,
66438     T111,
66439     T112,
66440     T113,
66441     T114,
66442     T115,
66443     T116,
66444     NullType,
66445     NullType,
66446     NullType,
66447     NullType,
66448     NullType,
66449     NullType,
66450     NullType,
66451     NullType,
66452     NullType,
66453     NullType,
66454     NullType>
66455 {
66456     typedef detail::KernelFunctorGlobal<
66457         T0,
66458         T1,
66459         T2,
66460         T3,
66461         T4,
66462         T5,
66463         T6,
66464         T7,
66465         T8,
66466         T9,
66467         T10,
66468         T11,
66469         T12,
66470         T13,
66471         T14,
66472         T15,
66473         T16,
66474         T17,
66475         T18,
66476         T19,
66477         T20,
66478         T21,
66479         T22,
66480         T23,
66481         T24,
66482         T25,
66483         T26,
66484         T27,
66485         T28,
66486         T29,
66487         T30,
66488         T31,
66489         T32,
66490         T33,
66491         T34,
66492         T35,
66493         T36,
66494         T37,
66495         T38,
66496         T39,
66497         T40,
66498         T41,
66499         T42,
66500         T43,
66501         T44,
66502         T45,
66503         T46,
66504         T47,
66505         T48,
66506         T49,
66507         T50,
66508         T51,
66509         T52,
66510         T53,
66511         T54,
66512         T55,
66513         T56,
66514         T57,
66515         T58,
66516         T59,
66517         T60,
66518         T61,
66519         T62,
66520         T63,
66521         T64,
66522         T65,
66523         T66,
66524         T67,
66525         T68,
66526         T69,
66527         T70,
66528         T71,
66529         T72,
66530         T73,
66531         T74,
66532         T75,
66533         T76,
66534         T77,
66535         T78,
66536         T79,
66537         T80,
66538         T81,
66539         T82,
66540         T83,
66541         T84,
66542         T85,
66543         T86,
66544         T87,
66545         T88,
66546         T89,
66547         T90,
66548         T91,
66549         T92,
66550         T93,
66551         T94,
66552         T95,
66553         T96,
66554         T97,
66555         T98,
66556         T99,
66557         T100,
66558         T101,
66559         T102,
66560         T103,
66561         T104,
66562         T105,
66563         T106,
66564         T107,
66565         T108,
66566         T109,
66567         T110,
66568         T111,
66569         T112,
66570         T113,
66571         T114,
66572         T115,
66573         T116,
66574         NullType,
66575         NullType,
66576         NullType,
66577         NullType,
66578         NullType,
66579         NullType,
66580         NullType,
66581         NullType,
66582         NullType,
66583         NullType,
66584         NullType> FunctorType;
66585 
66586     FunctorType functor_;
66587 
66588     functionImplementation_(const FunctorType &functor) :
66589         functor_(functor)
66590     {
66591     }
66592         
66593     typedef std::tr1::function<Event (
66594         const EnqueueArgs&,
66595         T0,
66596         T1,
66597         T2,
66598         T3,
66599         T4,
66600         T5,
66601         T6,
66602         T7,
66603         T8,
66604         T9,
66605         T10,
66606         T11,
66607         T12,
66608         T13,
66609         T14,
66610         T15,
66611         T16,
66612         T17,
66613         T18,
66614         T19,
66615         T20,
66616         T21,
66617         T22,
66618         T23,
66619         T24,
66620         T25,
66621         T26,
66622         T27,
66623         T28,
66624         T29,
66625         T30,
66626         T31,
66627         T32,
66628         T33,
66629         T34,
66630         T35,
66631         T36,
66632         T37,
66633         T38,
66634         T39,
66635         T40,
66636         T41,
66637         T42,
66638         T43,
66639         T44,
66640         T45,
66641         T46,
66642         T47,
66643         T48,
66644         T49,
66645         T50,
66646         T51,
66647         T52,
66648         T53,
66649         T54,
66650         T55,
66651         T56,
66652         T57,
66653         T58,
66654         T59,
66655         T60,
66656         T61,
66657         T62,
66658         T63,
66659         T64,
66660         T65,
66661         T66,
66662         T67,
66663         T68,
66664         T69,
66665         T70,
66666         T71,
66667         T72,
66668         T73,
66669         T74,
66670         T75,
66671         T76,
66672         T77,
66673         T78,
66674         T79,
66675         T80,
66676         T81,
66677         T82,
66678         T83,
66679         T84,
66680         T85,
66681         T86,
66682         T87,
66683         T88,
66684         T89,
66685         T90,
66686         T91,
66687         T92,
66688         T93,
66689         T94,
66690         T95,
66691         T96,
66692         T97,
66693         T98,
66694         T99,
66695         T100,
66696         T101,
66697         T102,
66698         T103,
66699         T104,
66700         T105,
66701         T106,
66702         T107,
66703         T108,
66704         T109,
66705         T110,
66706         T111,
66707         T112,
66708         T113,
66709         T114,
66710         T115,
66711         T116)> type_;
66712 
66713     Event operator()(const EnqueueArgs& enqueueArgs,
66714         T0 arg0,
66715         T1 arg1,
66716         T2 arg2,
66717         T3 arg3,
66718         T4 arg4,
66719         T5 arg5,
66720         T6 arg6,
66721         T7 arg7,
66722         T8 arg8,
66723         T9 arg9,
66724         T10 arg10,
66725         T11 arg11,
66726         T12 arg12,
66727         T13 arg13,
66728         T14 arg14,
66729         T15 arg15,
66730         T16 arg16,
66731         T17 arg17,
66732         T18 arg18,
66733         T19 arg19,
66734         T20 arg20,
66735         T21 arg21,
66736         T22 arg22,
66737         T23 arg23,
66738         T24 arg24,
66739         T25 arg25,
66740         T26 arg26,
66741         T27 arg27,
66742         T28 arg28,
66743         T29 arg29,
66744         T30 arg30,
66745         T31 arg31,
66746         T32 arg32,
66747         T33 arg33,
66748         T34 arg34,
66749         T35 arg35,
66750         T36 arg36,
66751         T37 arg37,
66752         T38 arg38,
66753         T39 arg39,
66754         T40 arg40,
66755         T41 arg41,
66756         T42 arg42,
66757         T43 arg43,
66758         T44 arg44,
66759         T45 arg45,
66760         T46 arg46,
66761         T47 arg47,
66762         T48 arg48,
66763         T49 arg49,
66764         T50 arg50,
66765         T51 arg51,
66766         T52 arg52,
66767         T53 arg53,
66768         T54 arg54,
66769         T55 arg55,
66770         T56 arg56,
66771         T57 arg57,
66772         T58 arg58,
66773         T59 arg59,
66774         T60 arg60,
66775         T61 arg61,
66776         T62 arg62,
66777         T63 arg63,
66778         T64 arg64,
66779         T65 arg65,
66780         T66 arg66,
66781         T67 arg67,
66782         T68 arg68,
66783         T69 arg69,
66784         T70 arg70,
66785         T71 arg71,
66786         T72 arg72,
66787         T73 arg73,
66788         T74 arg74,
66789         T75 arg75,
66790         T76 arg76,
66791         T77 arg77,
66792         T78 arg78,
66793         T79 arg79,
66794         T80 arg80,
66795         T81 arg81,
66796         T82 arg82,
66797         T83 arg83,
66798         T84 arg84,
66799         T85 arg85,
66800         T86 arg86,
66801         T87 arg87,
66802         T88 arg88,
66803         T89 arg89,
66804         T90 arg90,
66805         T91 arg91,
66806         T92 arg92,
66807         T93 arg93,
66808         T94 arg94,
66809         T95 arg95,
66810         T96 arg96,
66811         T97 arg97,
66812         T98 arg98,
66813         T99 arg99,
66814         T100 arg100,
66815         T101 arg101,
66816         T102 arg102,
66817         T103 arg103,
66818         T104 arg104,
66819         T105 arg105,
66820         T106 arg106,
66821         T107 arg107,
66822         T108 arg108,
66823         T109 arg109,
66824         T110 arg110,
66825         T111 arg111,
66826         T112 arg112,
66827         T113 arg113,
66828         T114 arg114,
66829         T115 arg115,
66830         T116 arg116)
66831     {
66832         return functor_(
66833             enqueueArgs,
66834             arg0,
66835             arg1,
66836             arg2,
66837             arg3,
66838             arg4,
66839             arg5,
66840             arg6,
66841             arg7,
66842             arg8,
66843             arg9,
66844             arg10,
66845             arg11,
66846             arg12,
66847             arg13,
66848             arg14,
66849             arg15,
66850             arg16,
66851             arg17,
66852             arg18,
66853             arg19,
66854             arg20,
66855             arg21,
66856             arg22,
66857             arg23,
66858             arg24,
66859             arg25,
66860             arg26,
66861             arg27,
66862             arg28,
66863             arg29,
66864             arg30,
66865             arg31,
66866             arg32,
66867             arg33,
66868             arg34,
66869             arg35,
66870             arg36,
66871             arg37,
66872             arg38,
66873             arg39,
66874             arg40,
66875             arg41,
66876             arg42,
66877             arg43,
66878             arg44,
66879             arg45,
66880             arg46,
66881             arg47,
66882             arg48,
66883             arg49,
66884             arg50,
66885             arg51,
66886             arg52,
66887             arg53,
66888             arg54,
66889             arg55,
66890             arg56,
66891             arg57,
66892             arg58,
66893             arg59,
66894             arg60,
66895             arg61,
66896             arg62,
66897             arg63,
66898             arg64,
66899             arg65,
66900             arg66,
66901             arg67,
66902             arg68,
66903             arg69,
66904             arg70,
66905             arg71,
66906             arg72,
66907             arg73,
66908             arg74,
66909             arg75,
66910             arg76,
66911             arg77,
66912             arg78,
66913             arg79,
66914             arg80,
66915             arg81,
66916             arg82,
66917             arg83,
66918             arg84,
66919             arg85,
66920             arg86,
66921             arg87,
66922             arg88,
66923             arg89,
66924             arg90,
66925             arg91,
66926             arg92,
66927             arg93,
66928             arg94,
66929             arg95,
66930             arg96,
66931             arg97,
66932             arg98,
66933             arg99,
66934             arg100,
66935             arg101,
66936             arg102,
66937             arg103,
66938             arg104,
66939             arg105,
66940             arg106,
66941             arg107,
66942             arg108,
66943             arg109,
66944             arg110,
66945             arg111,
66946             arg112,
66947             arg113,
66948             arg114,
66949             arg115,
66950             arg116);
66951     }
66952 
66953     operator type_ ()    
66954     {
66955         return type_(*this);
66956     }
66957 
66958 };
66959 
66960 template<
66961     typename T0,
66962     typename T1,
66963     typename T2,
66964     typename T3,
66965     typename T4,
66966     typename T5,
66967     typename T6,
66968     typename T7,
66969     typename T8,
66970     typename T9,
66971     typename T10,
66972     typename T11,
66973     typename T12,
66974     typename T13,
66975     typename T14,
66976     typename T15,
66977     typename T16,
66978     typename T17,
66979     typename T18,
66980     typename T19,
66981     typename T20,
66982     typename T21,
66983     typename T22,
66984     typename T23,
66985     typename T24,
66986     typename T25,
66987     typename T26,
66988     typename T27,
66989     typename T28,
66990     typename T29,
66991     typename T30,
66992     typename T31,
66993     typename T32,
66994     typename T33,
66995     typename T34,
66996     typename T35,
66997     typename T36,
66998     typename T37,
66999     typename T38,
67000     typename T39,
67001     typename T40,
67002     typename T41,
67003     typename T42,
67004     typename T43,
67005     typename T44,
67006     typename T45,
67007     typename T46,
67008     typename T47,
67009     typename T48,
67010     typename T49,
67011     typename T50,
67012     typename T51,
67013     typename T52,
67014     typename T53,
67015     typename T54,
67016     typename T55,
67017     typename T56,
67018     typename T57,
67019     typename T58,
67020     typename T59,
67021     typename T60,
67022     typename T61,
67023     typename T62,
67024     typename T63,
67025     typename T64,
67026     typename T65,
67027     typename T66,
67028     typename T67,
67029     typename T68,
67030     typename T69,
67031     typename T70,
67032     typename T71,
67033     typename T72,
67034     typename T73,
67035     typename T74,
67036     typename T75,
67037     typename T76,
67038     typename T77,
67039     typename T78,
67040     typename T79,
67041     typename T80,
67042     typename T81,
67043     typename T82,
67044     typename T83,
67045     typename T84,
67046     typename T85,
67047     typename T86,
67048     typename T87,
67049     typename T88,
67050     typename T89,
67051     typename T90,
67052     typename T91,
67053     typename T92,
67054     typename T93,
67055     typename T94,
67056     typename T95,
67057     typename T96,
67058     typename T97,
67059     typename T98,
67060     typename T99,
67061     typename T100,
67062     typename T101,
67063     typename T102,
67064     typename T103,
67065     typename T104,
67066     typename T105,
67067     typename T106,
67068     typename T107,
67069     typename T108,
67070     typename T109,
67071     typename T110,
67072     typename T111,
67073     typename T112,
67074     typename T113,
67075     typename T114,
67076     typename T115,
67077     typename T116,
67078     typename T117>
67079 struct functionImplementation_<
67080     T0,
67081     T1,
67082     T2,
67083     T3,
67084     T4,
67085     T5,
67086     T6,
67087     T7,
67088     T8,
67089     T9,
67090     T10,
67091     T11,
67092     T12,
67093     T13,
67094     T14,
67095     T15,
67096     T16,
67097     T17,
67098     T18,
67099     T19,
67100     T20,
67101     T21,
67102     T22,
67103     T23,
67104     T24,
67105     T25,
67106     T26,
67107     T27,
67108     T28,
67109     T29,
67110     T30,
67111     T31,
67112     T32,
67113     T33,
67114     T34,
67115     T35,
67116     T36,
67117     T37,
67118     T38,
67119     T39,
67120     T40,
67121     T41,
67122     T42,
67123     T43,
67124     T44,
67125     T45,
67126     T46,
67127     T47,
67128     T48,
67129     T49,
67130     T50,
67131     T51,
67132     T52,
67133     T53,
67134     T54,
67135     T55,
67136     T56,
67137     T57,
67138     T58,
67139     T59,
67140     T60,
67141     T61,
67142     T62,
67143     T63,
67144     T64,
67145     T65,
67146     T66,
67147     T67,
67148     T68,
67149     T69,
67150     T70,
67151     T71,
67152     T72,
67153     T73,
67154     T74,
67155     T75,
67156     T76,
67157     T77,
67158     T78,
67159     T79,
67160     T80,
67161     T81,
67162     T82,
67163     T83,
67164     T84,
67165     T85,
67166     T86,
67167     T87,
67168     T88,
67169     T89,
67170     T90,
67171     T91,
67172     T92,
67173     T93,
67174     T94,
67175     T95,
67176     T96,
67177     T97,
67178     T98,
67179     T99,
67180     T100,
67181     T101,
67182     T102,
67183     T103,
67184     T104,
67185     T105,
67186     T106,
67187     T107,
67188     T108,
67189     T109,
67190     T110,
67191     T111,
67192     T112,
67193     T113,
67194     T114,
67195     T115,
67196     T116,
67197     T117,
67198     NullType,
67199     NullType,
67200     NullType,
67201     NullType,
67202     NullType,
67203     NullType,
67204     NullType,
67205     NullType,
67206     NullType,
67207     NullType>
67208 {
67209     typedef detail::KernelFunctorGlobal<
67210         T0,
67211         T1,
67212         T2,
67213         T3,
67214         T4,
67215         T5,
67216         T6,
67217         T7,
67218         T8,
67219         T9,
67220         T10,
67221         T11,
67222         T12,
67223         T13,
67224         T14,
67225         T15,
67226         T16,
67227         T17,
67228         T18,
67229         T19,
67230         T20,
67231         T21,
67232         T22,
67233         T23,
67234         T24,
67235         T25,
67236         T26,
67237         T27,
67238         T28,
67239         T29,
67240         T30,
67241         T31,
67242         T32,
67243         T33,
67244         T34,
67245         T35,
67246         T36,
67247         T37,
67248         T38,
67249         T39,
67250         T40,
67251         T41,
67252         T42,
67253         T43,
67254         T44,
67255         T45,
67256         T46,
67257         T47,
67258         T48,
67259         T49,
67260         T50,
67261         T51,
67262         T52,
67263         T53,
67264         T54,
67265         T55,
67266         T56,
67267         T57,
67268         T58,
67269         T59,
67270         T60,
67271         T61,
67272         T62,
67273         T63,
67274         T64,
67275         T65,
67276         T66,
67277         T67,
67278         T68,
67279         T69,
67280         T70,
67281         T71,
67282         T72,
67283         T73,
67284         T74,
67285         T75,
67286         T76,
67287         T77,
67288         T78,
67289         T79,
67290         T80,
67291         T81,
67292         T82,
67293         T83,
67294         T84,
67295         T85,
67296         T86,
67297         T87,
67298         T88,
67299         T89,
67300         T90,
67301         T91,
67302         T92,
67303         T93,
67304         T94,
67305         T95,
67306         T96,
67307         T97,
67308         T98,
67309         T99,
67310         T100,
67311         T101,
67312         T102,
67313         T103,
67314         T104,
67315         T105,
67316         T106,
67317         T107,
67318         T108,
67319         T109,
67320         T110,
67321         T111,
67322         T112,
67323         T113,
67324         T114,
67325         T115,
67326         T116,
67327         T117,
67328         NullType,
67329         NullType,
67330         NullType,
67331         NullType,
67332         NullType,
67333         NullType,
67334         NullType,
67335         NullType,
67336         NullType,
67337         NullType> FunctorType;
67338 
67339     FunctorType functor_;
67340 
67341     functionImplementation_(const FunctorType &functor) :
67342         functor_(functor)
67343     {
67344     }
67345         
67346     typedef std::tr1::function<Event (
67347         const EnqueueArgs&,
67348         T0,
67349         T1,
67350         T2,
67351         T3,
67352         T4,
67353         T5,
67354         T6,
67355         T7,
67356         T8,
67357         T9,
67358         T10,
67359         T11,
67360         T12,
67361         T13,
67362         T14,
67363         T15,
67364         T16,
67365         T17,
67366         T18,
67367         T19,
67368         T20,
67369         T21,
67370         T22,
67371         T23,
67372         T24,
67373         T25,
67374         T26,
67375         T27,
67376         T28,
67377         T29,
67378         T30,
67379         T31,
67380         T32,
67381         T33,
67382         T34,
67383         T35,
67384         T36,
67385         T37,
67386         T38,
67387         T39,
67388         T40,
67389         T41,
67390         T42,
67391         T43,
67392         T44,
67393         T45,
67394         T46,
67395         T47,
67396         T48,
67397         T49,
67398         T50,
67399         T51,
67400         T52,
67401         T53,
67402         T54,
67403         T55,
67404         T56,
67405         T57,
67406         T58,
67407         T59,
67408         T60,
67409         T61,
67410         T62,
67411         T63,
67412         T64,
67413         T65,
67414         T66,
67415         T67,
67416         T68,
67417         T69,
67418         T70,
67419         T71,
67420         T72,
67421         T73,
67422         T74,
67423         T75,
67424         T76,
67425         T77,
67426         T78,
67427         T79,
67428         T80,
67429         T81,
67430         T82,
67431         T83,
67432         T84,
67433         T85,
67434         T86,
67435         T87,
67436         T88,
67437         T89,
67438         T90,
67439         T91,
67440         T92,
67441         T93,
67442         T94,
67443         T95,
67444         T96,
67445         T97,
67446         T98,
67447         T99,
67448         T100,
67449         T101,
67450         T102,
67451         T103,
67452         T104,
67453         T105,
67454         T106,
67455         T107,
67456         T108,
67457         T109,
67458         T110,
67459         T111,
67460         T112,
67461         T113,
67462         T114,
67463         T115,
67464         T116,
67465         T117)> type_;
67466 
67467     Event operator()(const EnqueueArgs& enqueueArgs,
67468         T0 arg0,
67469         T1 arg1,
67470         T2 arg2,
67471         T3 arg3,
67472         T4 arg4,
67473         T5 arg5,
67474         T6 arg6,
67475         T7 arg7,
67476         T8 arg8,
67477         T9 arg9,
67478         T10 arg10,
67479         T11 arg11,
67480         T12 arg12,
67481         T13 arg13,
67482         T14 arg14,
67483         T15 arg15,
67484         T16 arg16,
67485         T17 arg17,
67486         T18 arg18,
67487         T19 arg19,
67488         T20 arg20,
67489         T21 arg21,
67490         T22 arg22,
67491         T23 arg23,
67492         T24 arg24,
67493         T25 arg25,
67494         T26 arg26,
67495         T27 arg27,
67496         T28 arg28,
67497         T29 arg29,
67498         T30 arg30,
67499         T31 arg31,
67500         T32 arg32,
67501         T33 arg33,
67502         T34 arg34,
67503         T35 arg35,
67504         T36 arg36,
67505         T37 arg37,
67506         T38 arg38,
67507         T39 arg39,
67508         T40 arg40,
67509         T41 arg41,
67510         T42 arg42,
67511         T43 arg43,
67512         T44 arg44,
67513         T45 arg45,
67514         T46 arg46,
67515         T47 arg47,
67516         T48 arg48,
67517         T49 arg49,
67518         T50 arg50,
67519         T51 arg51,
67520         T52 arg52,
67521         T53 arg53,
67522         T54 arg54,
67523         T55 arg55,
67524         T56 arg56,
67525         T57 arg57,
67526         T58 arg58,
67527         T59 arg59,
67528         T60 arg60,
67529         T61 arg61,
67530         T62 arg62,
67531         T63 arg63,
67532         T64 arg64,
67533         T65 arg65,
67534         T66 arg66,
67535         T67 arg67,
67536         T68 arg68,
67537         T69 arg69,
67538         T70 arg70,
67539         T71 arg71,
67540         T72 arg72,
67541         T73 arg73,
67542         T74 arg74,
67543         T75 arg75,
67544         T76 arg76,
67545         T77 arg77,
67546         T78 arg78,
67547         T79 arg79,
67548         T80 arg80,
67549         T81 arg81,
67550         T82 arg82,
67551         T83 arg83,
67552         T84 arg84,
67553         T85 arg85,
67554         T86 arg86,
67555         T87 arg87,
67556         T88 arg88,
67557         T89 arg89,
67558         T90 arg90,
67559         T91 arg91,
67560         T92 arg92,
67561         T93 arg93,
67562         T94 arg94,
67563         T95 arg95,
67564         T96 arg96,
67565         T97 arg97,
67566         T98 arg98,
67567         T99 arg99,
67568         T100 arg100,
67569         T101 arg101,
67570         T102 arg102,
67571         T103 arg103,
67572         T104 arg104,
67573         T105 arg105,
67574         T106 arg106,
67575         T107 arg107,
67576         T108 arg108,
67577         T109 arg109,
67578         T110 arg110,
67579         T111 arg111,
67580         T112 arg112,
67581         T113 arg113,
67582         T114 arg114,
67583         T115 arg115,
67584         T116 arg116,
67585         T117 arg117)
67586     {
67587         return functor_(
67588             enqueueArgs,
67589             arg0,
67590             arg1,
67591             arg2,
67592             arg3,
67593             arg4,
67594             arg5,
67595             arg6,
67596             arg7,
67597             arg8,
67598             arg9,
67599             arg10,
67600             arg11,
67601             arg12,
67602             arg13,
67603             arg14,
67604             arg15,
67605             arg16,
67606             arg17,
67607             arg18,
67608             arg19,
67609             arg20,
67610             arg21,
67611             arg22,
67612             arg23,
67613             arg24,
67614             arg25,
67615             arg26,
67616             arg27,
67617             arg28,
67618             arg29,
67619             arg30,
67620             arg31,
67621             arg32,
67622             arg33,
67623             arg34,
67624             arg35,
67625             arg36,
67626             arg37,
67627             arg38,
67628             arg39,
67629             arg40,
67630             arg41,
67631             arg42,
67632             arg43,
67633             arg44,
67634             arg45,
67635             arg46,
67636             arg47,
67637             arg48,
67638             arg49,
67639             arg50,
67640             arg51,
67641             arg52,
67642             arg53,
67643             arg54,
67644             arg55,
67645             arg56,
67646             arg57,
67647             arg58,
67648             arg59,
67649             arg60,
67650             arg61,
67651             arg62,
67652             arg63,
67653             arg64,
67654             arg65,
67655             arg66,
67656             arg67,
67657             arg68,
67658             arg69,
67659             arg70,
67660             arg71,
67661             arg72,
67662             arg73,
67663             arg74,
67664             arg75,
67665             arg76,
67666             arg77,
67667             arg78,
67668             arg79,
67669             arg80,
67670             arg81,
67671             arg82,
67672             arg83,
67673             arg84,
67674             arg85,
67675             arg86,
67676             arg87,
67677             arg88,
67678             arg89,
67679             arg90,
67680             arg91,
67681             arg92,
67682             arg93,
67683             arg94,
67684             arg95,
67685             arg96,
67686             arg97,
67687             arg98,
67688             arg99,
67689             arg100,
67690             arg101,
67691             arg102,
67692             arg103,
67693             arg104,
67694             arg105,
67695             arg106,
67696             arg107,
67697             arg108,
67698             arg109,
67699             arg110,
67700             arg111,
67701             arg112,
67702             arg113,
67703             arg114,
67704             arg115,
67705             arg116,
67706             arg117);
67707     }
67708 
67709     operator type_ ()    
67710     {
67711         return type_(*this);
67712     }
67713 
67714 };
67715 
67716 template<
67717     typename T0,
67718     typename T1,
67719     typename T2,
67720     typename T3,
67721     typename T4,
67722     typename T5,
67723     typename T6,
67724     typename T7,
67725     typename T8,
67726     typename T9,
67727     typename T10,
67728     typename T11,
67729     typename T12,
67730     typename T13,
67731     typename T14,
67732     typename T15,
67733     typename T16,
67734     typename T17,
67735     typename T18,
67736     typename T19,
67737     typename T20,
67738     typename T21,
67739     typename T22,
67740     typename T23,
67741     typename T24,
67742     typename T25,
67743     typename T26,
67744     typename T27,
67745     typename T28,
67746     typename T29,
67747     typename T30,
67748     typename T31,
67749     typename T32,
67750     typename T33,
67751     typename T34,
67752     typename T35,
67753     typename T36,
67754     typename T37,
67755     typename T38,
67756     typename T39,
67757     typename T40,
67758     typename T41,
67759     typename T42,
67760     typename T43,
67761     typename T44,
67762     typename T45,
67763     typename T46,
67764     typename T47,
67765     typename T48,
67766     typename T49,
67767     typename T50,
67768     typename T51,
67769     typename T52,
67770     typename T53,
67771     typename T54,
67772     typename T55,
67773     typename T56,
67774     typename T57,
67775     typename T58,
67776     typename T59,
67777     typename T60,
67778     typename T61,
67779     typename T62,
67780     typename T63,
67781     typename T64,
67782     typename T65,
67783     typename T66,
67784     typename T67,
67785     typename T68,
67786     typename T69,
67787     typename T70,
67788     typename T71,
67789     typename T72,
67790     typename T73,
67791     typename T74,
67792     typename T75,
67793     typename T76,
67794     typename T77,
67795     typename T78,
67796     typename T79,
67797     typename T80,
67798     typename T81,
67799     typename T82,
67800     typename T83,
67801     typename T84,
67802     typename T85,
67803     typename T86,
67804     typename T87,
67805     typename T88,
67806     typename T89,
67807     typename T90,
67808     typename T91,
67809     typename T92,
67810     typename T93,
67811     typename T94,
67812     typename T95,
67813     typename T96,
67814     typename T97,
67815     typename T98,
67816     typename T99,
67817     typename T100,
67818     typename T101,
67819     typename T102,
67820     typename T103,
67821     typename T104,
67822     typename T105,
67823     typename T106,
67824     typename T107,
67825     typename T108,
67826     typename T109,
67827     typename T110,
67828     typename T111,
67829     typename T112,
67830     typename T113,
67831     typename T114,
67832     typename T115,
67833     typename T116,
67834     typename T117,
67835     typename T118>
67836 struct functionImplementation_<
67837     T0,
67838     T1,
67839     T2,
67840     T3,
67841     T4,
67842     T5,
67843     T6,
67844     T7,
67845     T8,
67846     T9,
67847     T10,
67848     T11,
67849     T12,
67850     T13,
67851     T14,
67852     T15,
67853     T16,
67854     T17,
67855     T18,
67856     T19,
67857     T20,
67858     T21,
67859     T22,
67860     T23,
67861     T24,
67862     T25,
67863     T26,
67864     T27,
67865     T28,
67866     T29,
67867     T30,
67868     T31,
67869     T32,
67870     T33,
67871     T34,
67872     T35,
67873     T36,
67874     T37,
67875     T38,
67876     T39,
67877     T40,
67878     T41,
67879     T42,
67880     T43,
67881     T44,
67882     T45,
67883     T46,
67884     T47,
67885     T48,
67886     T49,
67887     T50,
67888     T51,
67889     T52,
67890     T53,
67891     T54,
67892     T55,
67893     T56,
67894     T57,
67895     T58,
67896     T59,
67897     T60,
67898     T61,
67899     T62,
67900     T63,
67901     T64,
67902     T65,
67903     T66,
67904     T67,
67905     T68,
67906     T69,
67907     T70,
67908     T71,
67909     T72,
67910     T73,
67911     T74,
67912     T75,
67913     T76,
67914     T77,
67915     T78,
67916     T79,
67917     T80,
67918     T81,
67919     T82,
67920     T83,
67921     T84,
67922     T85,
67923     T86,
67924     T87,
67925     T88,
67926     T89,
67927     T90,
67928     T91,
67929     T92,
67930     T93,
67931     T94,
67932     T95,
67933     T96,
67934     T97,
67935     T98,
67936     T99,
67937     T100,
67938     T101,
67939     T102,
67940     T103,
67941     T104,
67942     T105,
67943     T106,
67944     T107,
67945     T108,
67946     T109,
67947     T110,
67948     T111,
67949     T112,
67950     T113,
67951     T114,
67952     T115,
67953     T116,
67954     T117,
67955     T118,
67956     NullType,
67957     NullType,
67958     NullType,
67959     NullType,
67960     NullType,
67961     NullType,
67962     NullType,
67963     NullType,
67964     NullType>
67965 {
67966     typedef detail::KernelFunctorGlobal<
67967         T0,
67968         T1,
67969         T2,
67970         T3,
67971         T4,
67972         T5,
67973         T6,
67974         T7,
67975         T8,
67976         T9,
67977         T10,
67978         T11,
67979         T12,
67980         T13,
67981         T14,
67982         T15,
67983         T16,
67984         T17,
67985         T18,
67986         T19,
67987         T20,
67988         T21,
67989         T22,
67990         T23,
67991         T24,
67992         T25,
67993         T26,
67994         T27,
67995         T28,
67996         T29,
67997         T30,
67998         T31,
67999         T32,
68000         T33,
68001         T34,
68002         T35,
68003         T36,
68004         T37,
68005         T38,
68006         T39,
68007         T40,
68008         T41,
68009         T42,
68010         T43,
68011         T44,
68012         T45,
68013         T46,
68014         T47,
68015         T48,
68016         T49,
68017         T50,
68018         T51,
68019         T52,
68020         T53,
68021         T54,
68022         T55,
68023         T56,
68024         T57,
68025         T58,
68026         T59,
68027         T60,
68028         T61,
68029         T62,
68030         T63,
68031         T64,
68032         T65,
68033         T66,
68034         T67,
68035         T68,
68036         T69,
68037         T70,
68038         T71,
68039         T72,
68040         T73,
68041         T74,
68042         T75,
68043         T76,
68044         T77,
68045         T78,
68046         T79,
68047         T80,
68048         T81,
68049         T82,
68050         T83,
68051         T84,
68052         T85,
68053         T86,
68054         T87,
68055         T88,
68056         T89,
68057         T90,
68058         T91,
68059         T92,
68060         T93,
68061         T94,
68062         T95,
68063         T96,
68064         T97,
68065         T98,
68066         T99,
68067         T100,
68068         T101,
68069         T102,
68070         T103,
68071         T104,
68072         T105,
68073         T106,
68074         T107,
68075         T108,
68076         T109,
68077         T110,
68078         T111,
68079         T112,
68080         T113,
68081         T114,
68082         T115,
68083         T116,
68084         T117,
68085         T118,
68086         NullType,
68087         NullType,
68088         NullType,
68089         NullType,
68090         NullType,
68091         NullType,
68092         NullType,
68093         NullType,
68094         NullType> FunctorType;
68095 
68096     FunctorType functor_;
68097 
68098     functionImplementation_(const FunctorType &functor) :
68099         functor_(functor)
68100     {
68101     }
68102         
68103     typedef std::tr1::function<Event (
68104         const EnqueueArgs&,
68105         T0,
68106         T1,
68107         T2,
68108         T3,
68109         T4,
68110         T5,
68111         T6,
68112         T7,
68113         T8,
68114         T9,
68115         T10,
68116         T11,
68117         T12,
68118         T13,
68119         T14,
68120         T15,
68121         T16,
68122         T17,
68123         T18,
68124         T19,
68125         T20,
68126         T21,
68127         T22,
68128         T23,
68129         T24,
68130         T25,
68131         T26,
68132         T27,
68133         T28,
68134         T29,
68135         T30,
68136         T31,
68137         T32,
68138         T33,
68139         T34,
68140         T35,
68141         T36,
68142         T37,
68143         T38,
68144         T39,
68145         T40,
68146         T41,
68147         T42,
68148         T43,
68149         T44,
68150         T45,
68151         T46,
68152         T47,
68153         T48,
68154         T49,
68155         T50,
68156         T51,
68157         T52,
68158         T53,
68159         T54,
68160         T55,
68161         T56,
68162         T57,
68163         T58,
68164         T59,
68165         T60,
68166         T61,
68167         T62,
68168         T63,
68169         T64,
68170         T65,
68171         T66,
68172         T67,
68173         T68,
68174         T69,
68175         T70,
68176         T71,
68177         T72,
68178         T73,
68179         T74,
68180         T75,
68181         T76,
68182         T77,
68183         T78,
68184         T79,
68185         T80,
68186         T81,
68187         T82,
68188         T83,
68189         T84,
68190         T85,
68191         T86,
68192         T87,
68193         T88,
68194         T89,
68195         T90,
68196         T91,
68197         T92,
68198         T93,
68199         T94,
68200         T95,
68201         T96,
68202         T97,
68203         T98,
68204         T99,
68205         T100,
68206         T101,
68207         T102,
68208         T103,
68209         T104,
68210         T105,
68211         T106,
68212         T107,
68213         T108,
68214         T109,
68215         T110,
68216         T111,
68217         T112,
68218         T113,
68219         T114,
68220         T115,
68221         T116,
68222         T117,
68223         T118)> type_;
68224 
68225     Event operator()(const EnqueueArgs& enqueueArgs,
68226         T0 arg0,
68227         T1 arg1,
68228         T2 arg2,
68229         T3 arg3,
68230         T4 arg4,
68231         T5 arg5,
68232         T6 arg6,
68233         T7 arg7,
68234         T8 arg8,
68235         T9 arg9,
68236         T10 arg10,
68237         T11 arg11,
68238         T12 arg12,
68239         T13 arg13,
68240         T14 arg14,
68241         T15 arg15,
68242         T16 arg16,
68243         T17 arg17,
68244         T18 arg18,
68245         T19 arg19,
68246         T20 arg20,
68247         T21 arg21,
68248         T22 arg22,
68249         T23 arg23,
68250         T24 arg24,
68251         T25 arg25,
68252         T26 arg26,
68253         T27 arg27,
68254         T28 arg28,
68255         T29 arg29,
68256         T30 arg30,
68257         T31 arg31,
68258         T32 arg32,
68259         T33 arg33,
68260         T34 arg34,
68261         T35 arg35,
68262         T36 arg36,
68263         T37 arg37,
68264         T38 arg38,
68265         T39 arg39,
68266         T40 arg40,
68267         T41 arg41,
68268         T42 arg42,
68269         T43 arg43,
68270         T44 arg44,
68271         T45 arg45,
68272         T46 arg46,
68273         T47 arg47,
68274         T48 arg48,
68275         T49 arg49,
68276         T50 arg50,
68277         T51 arg51,
68278         T52 arg52,
68279         T53 arg53,
68280         T54 arg54,
68281         T55 arg55,
68282         T56 arg56,
68283         T57 arg57,
68284         T58 arg58,
68285         T59 arg59,
68286         T60 arg60,
68287         T61 arg61,
68288         T62 arg62,
68289         T63 arg63,
68290         T64 arg64,
68291         T65 arg65,
68292         T66 arg66,
68293         T67 arg67,
68294         T68 arg68,
68295         T69 arg69,
68296         T70 arg70,
68297         T71 arg71,
68298         T72 arg72,
68299         T73 arg73,
68300         T74 arg74,
68301         T75 arg75,
68302         T76 arg76,
68303         T77 arg77,
68304         T78 arg78,
68305         T79 arg79,
68306         T80 arg80,
68307         T81 arg81,
68308         T82 arg82,
68309         T83 arg83,
68310         T84 arg84,
68311         T85 arg85,
68312         T86 arg86,
68313         T87 arg87,
68314         T88 arg88,
68315         T89 arg89,
68316         T90 arg90,
68317         T91 arg91,
68318         T92 arg92,
68319         T93 arg93,
68320         T94 arg94,
68321         T95 arg95,
68322         T96 arg96,
68323         T97 arg97,
68324         T98 arg98,
68325         T99 arg99,
68326         T100 arg100,
68327         T101 arg101,
68328         T102 arg102,
68329         T103 arg103,
68330         T104 arg104,
68331         T105 arg105,
68332         T106 arg106,
68333         T107 arg107,
68334         T108 arg108,
68335         T109 arg109,
68336         T110 arg110,
68337         T111 arg111,
68338         T112 arg112,
68339         T113 arg113,
68340         T114 arg114,
68341         T115 arg115,
68342         T116 arg116,
68343         T117 arg117,
68344         T118 arg118)
68345     {
68346         return functor_(
68347             enqueueArgs,
68348             arg0,
68349             arg1,
68350             arg2,
68351             arg3,
68352             arg4,
68353             arg5,
68354             arg6,
68355             arg7,
68356             arg8,
68357             arg9,
68358             arg10,
68359             arg11,
68360             arg12,
68361             arg13,
68362             arg14,
68363             arg15,
68364             arg16,
68365             arg17,
68366             arg18,
68367             arg19,
68368             arg20,
68369             arg21,
68370             arg22,
68371             arg23,
68372             arg24,
68373             arg25,
68374             arg26,
68375             arg27,
68376             arg28,
68377             arg29,
68378             arg30,
68379             arg31,
68380             arg32,
68381             arg33,
68382             arg34,
68383             arg35,
68384             arg36,
68385             arg37,
68386             arg38,
68387             arg39,
68388             arg40,
68389             arg41,
68390             arg42,
68391             arg43,
68392             arg44,
68393             arg45,
68394             arg46,
68395             arg47,
68396             arg48,
68397             arg49,
68398             arg50,
68399             arg51,
68400             arg52,
68401             arg53,
68402             arg54,
68403             arg55,
68404             arg56,
68405             arg57,
68406             arg58,
68407             arg59,
68408             arg60,
68409             arg61,
68410             arg62,
68411             arg63,
68412             arg64,
68413             arg65,
68414             arg66,
68415             arg67,
68416             arg68,
68417             arg69,
68418             arg70,
68419             arg71,
68420             arg72,
68421             arg73,
68422             arg74,
68423             arg75,
68424             arg76,
68425             arg77,
68426             arg78,
68427             arg79,
68428             arg80,
68429             arg81,
68430             arg82,
68431             arg83,
68432             arg84,
68433             arg85,
68434             arg86,
68435             arg87,
68436             arg88,
68437             arg89,
68438             arg90,
68439             arg91,
68440             arg92,
68441             arg93,
68442             arg94,
68443             arg95,
68444             arg96,
68445             arg97,
68446             arg98,
68447             arg99,
68448             arg100,
68449             arg101,
68450             arg102,
68451             arg103,
68452             arg104,
68453             arg105,
68454             arg106,
68455             arg107,
68456             arg108,
68457             arg109,
68458             arg110,
68459             arg111,
68460             arg112,
68461             arg113,
68462             arg114,
68463             arg115,
68464             arg116,
68465             arg117,
68466             arg118);
68467     }
68468 
68469     operator type_ ()    
68470     {
68471         return type_(*this);
68472     }
68473 
68474 };
68475 
68476 template<
68477     typename T0,
68478     typename T1,
68479     typename T2,
68480     typename T3,
68481     typename T4,
68482     typename T5,
68483     typename T6,
68484     typename T7,
68485     typename T8,
68486     typename T9,
68487     typename T10,
68488     typename T11,
68489     typename T12,
68490     typename T13,
68491     typename T14,
68492     typename T15,
68493     typename T16,
68494     typename T17,
68495     typename T18,
68496     typename T19,
68497     typename T20,
68498     typename T21,
68499     typename T22,
68500     typename T23,
68501     typename T24,
68502     typename T25,
68503     typename T26,
68504     typename T27,
68505     typename T28,
68506     typename T29,
68507     typename T30,
68508     typename T31,
68509     typename T32,
68510     typename T33,
68511     typename T34,
68512     typename T35,
68513     typename T36,
68514     typename T37,
68515     typename T38,
68516     typename T39,
68517     typename T40,
68518     typename T41,
68519     typename T42,
68520     typename T43,
68521     typename T44,
68522     typename T45,
68523     typename T46,
68524     typename T47,
68525     typename T48,
68526     typename T49,
68527     typename T50,
68528     typename T51,
68529     typename T52,
68530     typename T53,
68531     typename T54,
68532     typename T55,
68533     typename T56,
68534     typename T57,
68535     typename T58,
68536     typename T59,
68537     typename T60,
68538     typename T61,
68539     typename T62,
68540     typename T63,
68541     typename T64,
68542     typename T65,
68543     typename T66,
68544     typename T67,
68545     typename T68,
68546     typename T69,
68547     typename T70,
68548     typename T71,
68549     typename T72,
68550     typename T73,
68551     typename T74,
68552     typename T75,
68553     typename T76,
68554     typename T77,
68555     typename T78,
68556     typename T79,
68557     typename T80,
68558     typename T81,
68559     typename T82,
68560     typename T83,
68561     typename T84,
68562     typename T85,
68563     typename T86,
68564     typename T87,
68565     typename T88,
68566     typename T89,
68567     typename T90,
68568     typename T91,
68569     typename T92,
68570     typename T93,
68571     typename T94,
68572     typename T95,
68573     typename T96,
68574     typename T97,
68575     typename T98,
68576     typename T99,
68577     typename T100,
68578     typename T101,
68579     typename T102,
68580     typename T103,
68581     typename T104,
68582     typename T105,
68583     typename T106,
68584     typename T107,
68585     typename T108,
68586     typename T109,
68587     typename T110,
68588     typename T111,
68589     typename T112,
68590     typename T113,
68591     typename T114,
68592     typename T115,
68593     typename T116,
68594     typename T117,
68595     typename T118,
68596     typename T119>
68597 struct functionImplementation_<
68598     T0,
68599     T1,
68600     T2,
68601     T3,
68602     T4,
68603     T5,
68604     T6,
68605     T7,
68606     T8,
68607     T9,
68608     T10,
68609     T11,
68610     T12,
68611     T13,
68612     T14,
68613     T15,
68614     T16,
68615     T17,
68616     T18,
68617     T19,
68618     T20,
68619     T21,
68620     T22,
68621     T23,
68622     T24,
68623     T25,
68624     T26,
68625     T27,
68626     T28,
68627     T29,
68628     T30,
68629     T31,
68630     T32,
68631     T33,
68632     T34,
68633     T35,
68634     T36,
68635     T37,
68636     T38,
68637     T39,
68638     T40,
68639     T41,
68640     T42,
68641     T43,
68642     T44,
68643     T45,
68644     T46,
68645     T47,
68646     T48,
68647     T49,
68648     T50,
68649     T51,
68650     T52,
68651     T53,
68652     T54,
68653     T55,
68654     T56,
68655     T57,
68656     T58,
68657     T59,
68658     T60,
68659     T61,
68660     T62,
68661     T63,
68662     T64,
68663     T65,
68664     T66,
68665     T67,
68666     T68,
68667     T69,
68668     T70,
68669     T71,
68670     T72,
68671     T73,
68672     T74,
68673     T75,
68674     T76,
68675     T77,
68676     T78,
68677     T79,
68678     T80,
68679     T81,
68680     T82,
68681     T83,
68682     T84,
68683     T85,
68684     T86,
68685     T87,
68686     T88,
68687     T89,
68688     T90,
68689     T91,
68690     T92,
68691     T93,
68692     T94,
68693     T95,
68694     T96,
68695     T97,
68696     T98,
68697     T99,
68698     T100,
68699     T101,
68700     T102,
68701     T103,
68702     T104,
68703     T105,
68704     T106,
68705     T107,
68706     T108,
68707     T109,
68708     T110,
68709     T111,
68710     T112,
68711     T113,
68712     T114,
68713     T115,
68714     T116,
68715     T117,
68716     T118,
68717     T119,
68718     NullType,
68719     NullType,
68720     NullType,
68721     NullType,
68722     NullType,
68723     NullType,
68724     NullType,
68725     NullType>
68726 {
68727     typedef detail::KernelFunctorGlobal<
68728         T0,
68729         T1,
68730         T2,
68731         T3,
68732         T4,
68733         T5,
68734         T6,
68735         T7,
68736         T8,
68737         T9,
68738         T10,
68739         T11,
68740         T12,
68741         T13,
68742         T14,
68743         T15,
68744         T16,
68745         T17,
68746         T18,
68747         T19,
68748         T20,
68749         T21,
68750         T22,
68751         T23,
68752         T24,
68753         T25,
68754         T26,
68755         T27,
68756         T28,
68757         T29,
68758         T30,
68759         T31,
68760         T32,
68761         T33,
68762         T34,
68763         T35,
68764         T36,
68765         T37,
68766         T38,
68767         T39,
68768         T40,
68769         T41,
68770         T42,
68771         T43,
68772         T44,
68773         T45,
68774         T46,
68775         T47,
68776         T48,
68777         T49,
68778         T50,
68779         T51,
68780         T52,
68781         T53,
68782         T54,
68783         T55,
68784         T56,
68785         T57,
68786         T58,
68787         T59,
68788         T60,
68789         T61,
68790         T62,
68791         T63,
68792         T64,
68793         T65,
68794         T66,
68795         T67,
68796         T68,
68797         T69,
68798         T70,
68799         T71,
68800         T72,
68801         T73,
68802         T74,
68803         T75,
68804         T76,
68805         T77,
68806         T78,
68807         T79,
68808         T80,
68809         T81,
68810         T82,
68811         T83,
68812         T84,
68813         T85,
68814         T86,
68815         T87,
68816         T88,
68817         T89,
68818         T90,
68819         T91,
68820         T92,
68821         T93,
68822         T94,
68823         T95,
68824         T96,
68825         T97,
68826         T98,
68827         T99,
68828         T100,
68829         T101,
68830         T102,
68831         T103,
68832         T104,
68833         T105,
68834         T106,
68835         T107,
68836         T108,
68837         T109,
68838         T110,
68839         T111,
68840         T112,
68841         T113,
68842         T114,
68843         T115,
68844         T116,
68845         T117,
68846         T118,
68847         T119,
68848         NullType,
68849         NullType,
68850         NullType,
68851         NullType,
68852         NullType,
68853         NullType,
68854         NullType,
68855         NullType> FunctorType;
68856 
68857     FunctorType functor_;
68858 
68859     functionImplementation_(const FunctorType &functor) :
68860         functor_(functor)
68861     {
68862     }
68863         
68864     typedef std::tr1::function<Event (
68865         const EnqueueArgs&,
68866         T0,
68867         T1,
68868         T2,
68869         T3,
68870         T4,
68871         T5,
68872         T6,
68873         T7,
68874         T8,
68875         T9,
68876         T10,
68877         T11,
68878         T12,
68879         T13,
68880         T14,
68881         T15,
68882         T16,
68883         T17,
68884         T18,
68885         T19,
68886         T20,
68887         T21,
68888         T22,
68889         T23,
68890         T24,
68891         T25,
68892         T26,
68893         T27,
68894         T28,
68895         T29,
68896         T30,
68897         T31,
68898         T32,
68899         T33,
68900         T34,
68901         T35,
68902         T36,
68903         T37,
68904         T38,
68905         T39,
68906         T40,
68907         T41,
68908         T42,
68909         T43,
68910         T44,
68911         T45,
68912         T46,
68913         T47,
68914         T48,
68915         T49,
68916         T50,
68917         T51,
68918         T52,
68919         T53,
68920         T54,
68921         T55,
68922         T56,
68923         T57,
68924         T58,
68925         T59,
68926         T60,
68927         T61,
68928         T62,
68929         T63,
68930         T64,
68931         T65,
68932         T66,
68933         T67,
68934         T68,
68935         T69,
68936         T70,
68937         T71,
68938         T72,
68939         T73,
68940         T74,
68941         T75,
68942         T76,
68943         T77,
68944         T78,
68945         T79,
68946         T80,
68947         T81,
68948         T82,
68949         T83,
68950         T84,
68951         T85,
68952         T86,
68953         T87,
68954         T88,
68955         T89,
68956         T90,
68957         T91,
68958         T92,
68959         T93,
68960         T94,
68961         T95,
68962         T96,
68963         T97,
68964         T98,
68965         T99,
68966         T100,
68967         T101,
68968         T102,
68969         T103,
68970         T104,
68971         T105,
68972         T106,
68973         T107,
68974         T108,
68975         T109,
68976         T110,
68977         T111,
68978         T112,
68979         T113,
68980         T114,
68981         T115,
68982         T116,
68983         T117,
68984         T118,
68985         T119)> type_;
68986 
68987     Event operator()(const EnqueueArgs& enqueueArgs,
68988         T0 arg0,
68989         T1 arg1,
68990         T2 arg2,
68991         T3 arg3,
68992         T4 arg4,
68993         T5 arg5,
68994         T6 arg6,
68995         T7 arg7,
68996         T8 arg8,
68997         T9 arg9,
68998         T10 arg10,
68999         T11 arg11,
69000         T12 arg12,
69001         T13 arg13,
69002         T14 arg14,
69003         T15 arg15,
69004         T16 arg16,
69005         T17 arg17,
69006         T18 arg18,
69007         T19 arg19,
69008         T20 arg20,
69009         T21 arg21,
69010         T22 arg22,
69011         T23 arg23,
69012         T24 arg24,
69013         T25 arg25,
69014         T26 arg26,
69015         T27 arg27,
69016         T28 arg28,
69017         T29 arg29,
69018         T30 arg30,
69019         T31 arg31,
69020         T32 arg32,
69021         T33 arg33,
69022         T34 arg34,
69023         T35 arg35,
69024         T36 arg36,
69025         T37 arg37,
69026         T38 arg38,
69027         T39 arg39,
69028         T40 arg40,
69029         T41 arg41,
69030         T42 arg42,
69031         T43 arg43,
69032         T44 arg44,
69033         T45 arg45,
69034         T46 arg46,
69035         T47 arg47,
69036         T48 arg48,
69037         T49 arg49,
69038         T50 arg50,
69039         T51 arg51,
69040         T52 arg52,
69041         T53 arg53,
69042         T54 arg54,
69043         T55 arg55,
69044         T56 arg56,
69045         T57 arg57,
69046         T58 arg58,
69047         T59 arg59,
69048         T60 arg60,
69049         T61 arg61,
69050         T62 arg62,
69051         T63 arg63,
69052         T64 arg64,
69053         T65 arg65,
69054         T66 arg66,
69055         T67 arg67,
69056         T68 arg68,
69057         T69 arg69,
69058         T70 arg70,
69059         T71 arg71,
69060         T72 arg72,
69061         T73 arg73,
69062         T74 arg74,
69063         T75 arg75,
69064         T76 arg76,
69065         T77 arg77,
69066         T78 arg78,
69067         T79 arg79,
69068         T80 arg80,
69069         T81 arg81,
69070         T82 arg82,
69071         T83 arg83,
69072         T84 arg84,
69073         T85 arg85,
69074         T86 arg86,
69075         T87 arg87,
69076         T88 arg88,
69077         T89 arg89,
69078         T90 arg90,
69079         T91 arg91,
69080         T92 arg92,
69081         T93 arg93,
69082         T94 arg94,
69083         T95 arg95,
69084         T96 arg96,
69085         T97 arg97,
69086         T98 arg98,
69087         T99 arg99,
69088         T100 arg100,
69089         T101 arg101,
69090         T102 arg102,
69091         T103 arg103,
69092         T104 arg104,
69093         T105 arg105,
69094         T106 arg106,
69095         T107 arg107,
69096         T108 arg108,
69097         T109 arg109,
69098         T110 arg110,
69099         T111 arg111,
69100         T112 arg112,
69101         T113 arg113,
69102         T114 arg114,
69103         T115 arg115,
69104         T116 arg116,
69105         T117 arg117,
69106         T118 arg118,
69107         T119 arg119)
69108     {
69109         return functor_(
69110             enqueueArgs,
69111             arg0,
69112             arg1,
69113             arg2,
69114             arg3,
69115             arg4,
69116             arg5,
69117             arg6,
69118             arg7,
69119             arg8,
69120             arg9,
69121             arg10,
69122             arg11,
69123             arg12,
69124             arg13,
69125             arg14,
69126             arg15,
69127             arg16,
69128             arg17,
69129             arg18,
69130             arg19,
69131             arg20,
69132             arg21,
69133             arg22,
69134             arg23,
69135             arg24,
69136             arg25,
69137             arg26,
69138             arg27,
69139             arg28,
69140             arg29,
69141             arg30,
69142             arg31,
69143             arg32,
69144             arg33,
69145             arg34,
69146             arg35,
69147             arg36,
69148             arg37,
69149             arg38,
69150             arg39,
69151             arg40,
69152             arg41,
69153             arg42,
69154             arg43,
69155             arg44,
69156             arg45,
69157             arg46,
69158             arg47,
69159             arg48,
69160             arg49,
69161             arg50,
69162             arg51,
69163             arg52,
69164             arg53,
69165             arg54,
69166             arg55,
69167             arg56,
69168             arg57,
69169             arg58,
69170             arg59,
69171             arg60,
69172             arg61,
69173             arg62,
69174             arg63,
69175             arg64,
69176             arg65,
69177             arg66,
69178             arg67,
69179             arg68,
69180             arg69,
69181             arg70,
69182             arg71,
69183             arg72,
69184             arg73,
69185             arg74,
69186             arg75,
69187             arg76,
69188             arg77,
69189             arg78,
69190             arg79,
69191             arg80,
69192             arg81,
69193             arg82,
69194             arg83,
69195             arg84,
69196             arg85,
69197             arg86,
69198             arg87,
69199             arg88,
69200             arg89,
69201             arg90,
69202             arg91,
69203             arg92,
69204             arg93,
69205             arg94,
69206             arg95,
69207             arg96,
69208             arg97,
69209             arg98,
69210             arg99,
69211             arg100,
69212             arg101,
69213             arg102,
69214             arg103,
69215             arg104,
69216             arg105,
69217             arg106,
69218             arg107,
69219             arg108,
69220             arg109,
69221             arg110,
69222             arg111,
69223             arg112,
69224             arg113,
69225             arg114,
69226             arg115,
69227             arg116,
69228             arg117,
69229             arg118,
69230             arg119);
69231     }
69232 
69233     operator type_ ()    
69234     {
69235         return type_(*this);
69236     }
69237 
69238 };
69239 
69240 template<
69241     typename T0,
69242     typename T1,
69243     typename T2,
69244     typename T3,
69245     typename T4,
69246     typename T5,
69247     typename T6,
69248     typename T7,
69249     typename T8,
69250     typename T9,
69251     typename T10,
69252     typename T11,
69253     typename T12,
69254     typename T13,
69255     typename T14,
69256     typename T15,
69257     typename T16,
69258     typename T17,
69259     typename T18,
69260     typename T19,
69261     typename T20,
69262     typename T21,
69263     typename T22,
69264     typename T23,
69265     typename T24,
69266     typename T25,
69267     typename T26,
69268     typename T27,
69269     typename T28,
69270     typename T29,
69271     typename T30,
69272     typename T31,
69273     typename T32,
69274     typename T33,
69275     typename T34,
69276     typename T35,
69277     typename T36,
69278     typename T37,
69279     typename T38,
69280     typename T39,
69281     typename T40,
69282     typename T41,
69283     typename T42,
69284     typename T43,
69285     typename T44,
69286     typename T45,
69287     typename T46,
69288     typename T47,
69289     typename T48,
69290     typename T49,
69291     typename T50,
69292     typename T51,
69293     typename T52,
69294     typename T53,
69295     typename T54,
69296     typename T55,
69297     typename T56,
69298     typename T57,
69299     typename T58,
69300     typename T59,
69301     typename T60,
69302     typename T61,
69303     typename T62,
69304     typename T63,
69305     typename T64,
69306     typename T65,
69307     typename T66,
69308     typename T67,
69309     typename T68,
69310     typename T69,
69311     typename T70,
69312     typename T71,
69313     typename T72,
69314     typename T73,
69315     typename T74,
69316     typename T75,
69317     typename T76,
69318     typename T77,
69319     typename T78,
69320     typename T79,
69321     typename T80,
69322     typename T81,
69323     typename T82,
69324     typename T83,
69325     typename T84,
69326     typename T85,
69327     typename T86,
69328     typename T87,
69329     typename T88,
69330     typename T89,
69331     typename T90,
69332     typename T91,
69333     typename T92,
69334     typename T93,
69335     typename T94,
69336     typename T95,
69337     typename T96,
69338     typename T97,
69339     typename T98,
69340     typename T99,
69341     typename T100,
69342     typename T101,
69343     typename T102,
69344     typename T103,
69345     typename T104,
69346     typename T105,
69347     typename T106,
69348     typename T107,
69349     typename T108,
69350     typename T109,
69351     typename T110,
69352     typename T111,
69353     typename T112,
69354     typename T113,
69355     typename T114,
69356     typename T115,
69357     typename T116,
69358     typename T117,
69359     typename T118,
69360     typename T119,
69361     typename T120>
69362 struct functionImplementation_<
69363     T0,
69364     T1,
69365     T2,
69366     T3,
69367     T4,
69368     T5,
69369     T6,
69370     T7,
69371     T8,
69372     T9,
69373     T10,
69374     T11,
69375     T12,
69376     T13,
69377     T14,
69378     T15,
69379     T16,
69380     T17,
69381     T18,
69382     T19,
69383     T20,
69384     T21,
69385     T22,
69386     T23,
69387     T24,
69388     T25,
69389     T26,
69390     T27,
69391     T28,
69392     T29,
69393     T30,
69394     T31,
69395     T32,
69396     T33,
69397     T34,
69398     T35,
69399     T36,
69400     T37,
69401     T38,
69402     T39,
69403     T40,
69404     T41,
69405     T42,
69406     T43,
69407     T44,
69408     T45,
69409     T46,
69410     T47,
69411     T48,
69412     T49,
69413     T50,
69414     T51,
69415     T52,
69416     T53,
69417     T54,
69418     T55,
69419     T56,
69420     T57,
69421     T58,
69422     T59,
69423     T60,
69424     T61,
69425     T62,
69426     T63,
69427     T64,
69428     T65,
69429     T66,
69430     T67,
69431     T68,
69432     T69,
69433     T70,
69434     T71,
69435     T72,
69436     T73,
69437     T74,
69438     T75,
69439     T76,
69440     T77,
69441     T78,
69442     T79,
69443     T80,
69444     T81,
69445     T82,
69446     T83,
69447     T84,
69448     T85,
69449     T86,
69450     T87,
69451     T88,
69452     T89,
69453     T90,
69454     T91,
69455     T92,
69456     T93,
69457     T94,
69458     T95,
69459     T96,
69460     T97,
69461     T98,
69462     T99,
69463     T100,
69464     T101,
69465     T102,
69466     T103,
69467     T104,
69468     T105,
69469     T106,
69470     T107,
69471     T108,
69472     T109,
69473     T110,
69474     T111,
69475     T112,
69476     T113,
69477     T114,
69478     T115,
69479     T116,
69480     T117,
69481     T118,
69482     T119,
69483     T120,
69484     NullType,
69485     NullType,
69486     NullType,
69487     NullType,
69488     NullType,
69489     NullType,
69490     NullType>
69491 {
69492     typedef detail::KernelFunctorGlobal<
69493         T0,
69494         T1,
69495         T2,
69496         T3,
69497         T4,
69498         T5,
69499         T6,
69500         T7,
69501         T8,
69502         T9,
69503         T10,
69504         T11,
69505         T12,
69506         T13,
69507         T14,
69508         T15,
69509         T16,
69510         T17,
69511         T18,
69512         T19,
69513         T20,
69514         T21,
69515         T22,
69516         T23,
69517         T24,
69518         T25,
69519         T26,
69520         T27,
69521         T28,
69522         T29,
69523         T30,
69524         T31,
69525         T32,
69526         T33,
69527         T34,
69528         T35,
69529         T36,
69530         T37,
69531         T38,
69532         T39,
69533         T40,
69534         T41,
69535         T42,
69536         T43,
69537         T44,
69538         T45,
69539         T46,
69540         T47,
69541         T48,
69542         T49,
69543         T50,
69544         T51,
69545         T52,
69546         T53,
69547         T54,
69548         T55,
69549         T56,
69550         T57,
69551         T58,
69552         T59,
69553         T60,
69554         T61,
69555         T62,
69556         T63,
69557         T64,
69558         T65,
69559         T66,
69560         T67,
69561         T68,
69562         T69,
69563         T70,
69564         T71,
69565         T72,
69566         T73,
69567         T74,
69568         T75,
69569         T76,
69570         T77,
69571         T78,
69572         T79,
69573         T80,
69574         T81,
69575         T82,
69576         T83,
69577         T84,
69578         T85,
69579         T86,
69580         T87,
69581         T88,
69582         T89,
69583         T90,
69584         T91,
69585         T92,
69586         T93,
69587         T94,
69588         T95,
69589         T96,
69590         T97,
69591         T98,
69592         T99,
69593         T100,
69594         T101,
69595         T102,
69596         T103,
69597         T104,
69598         T105,
69599         T106,
69600         T107,
69601         T108,
69602         T109,
69603         T110,
69604         T111,
69605         T112,
69606         T113,
69607         T114,
69608         T115,
69609         T116,
69610         T117,
69611         T118,
69612         T119,
69613         T120,
69614         NullType,
69615         NullType,
69616         NullType,
69617         NullType,
69618         NullType,
69619         NullType,
69620         NullType> FunctorType;
69621 
69622     FunctorType functor_;
69623 
69624     functionImplementation_(const FunctorType &functor) :
69625         functor_(functor)
69626     {
69627     }
69628         
69629     typedef std::tr1::function<Event (
69630         const EnqueueArgs&,
69631         T0,
69632         T1,
69633         T2,
69634         T3,
69635         T4,
69636         T5,
69637         T6,
69638         T7,
69639         T8,
69640         T9,
69641         T10,
69642         T11,
69643         T12,
69644         T13,
69645         T14,
69646         T15,
69647         T16,
69648         T17,
69649         T18,
69650         T19,
69651         T20,
69652         T21,
69653         T22,
69654         T23,
69655         T24,
69656         T25,
69657         T26,
69658         T27,
69659         T28,
69660         T29,
69661         T30,
69662         T31,
69663         T32,
69664         T33,
69665         T34,
69666         T35,
69667         T36,
69668         T37,
69669         T38,
69670         T39,
69671         T40,
69672         T41,
69673         T42,
69674         T43,
69675         T44,
69676         T45,
69677         T46,
69678         T47,
69679         T48,
69680         T49,
69681         T50,
69682         T51,
69683         T52,
69684         T53,
69685         T54,
69686         T55,
69687         T56,
69688         T57,
69689         T58,
69690         T59,
69691         T60,
69692         T61,
69693         T62,
69694         T63,
69695         T64,
69696         T65,
69697         T66,
69698         T67,
69699         T68,
69700         T69,
69701         T70,
69702         T71,
69703         T72,
69704         T73,
69705         T74,
69706         T75,
69707         T76,
69708         T77,
69709         T78,
69710         T79,
69711         T80,
69712         T81,
69713         T82,
69714         T83,
69715         T84,
69716         T85,
69717         T86,
69718         T87,
69719         T88,
69720         T89,
69721         T90,
69722         T91,
69723         T92,
69724         T93,
69725         T94,
69726         T95,
69727         T96,
69728         T97,
69729         T98,
69730         T99,
69731         T100,
69732         T101,
69733         T102,
69734         T103,
69735         T104,
69736         T105,
69737         T106,
69738         T107,
69739         T108,
69740         T109,
69741         T110,
69742         T111,
69743         T112,
69744         T113,
69745         T114,
69746         T115,
69747         T116,
69748         T117,
69749         T118,
69750         T119,
69751         T120)> type_;
69752 
69753     Event operator()(const EnqueueArgs& enqueueArgs,
69754         T0 arg0,
69755         T1 arg1,
69756         T2 arg2,
69757         T3 arg3,
69758         T4 arg4,
69759         T5 arg5,
69760         T6 arg6,
69761         T7 arg7,
69762         T8 arg8,
69763         T9 arg9,
69764         T10 arg10,
69765         T11 arg11,
69766         T12 arg12,
69767         T13 arg13,
69768         T14 arg14,
69769         T15 arg15,
69770         T16 arg16,
69771         T17 arg17,
69772         T18 arg18,
69773         T19 arg19,
69774         T20 arg20,
69775         T21 arg21,
69776         T22 arg22,
69777         T23 arg23,
69778         T24 arg24,
69779         T25 arg25,
69780         T26 arg26,
69781         T27 arg27,
69782         T28 arg28,
69783         T29 arg29,
69784         T30 arg30,
69785         T31 arg31,
69786         T32 arg32,
69787         T33 arg33,
69788         T34 arg34,
69789         T35 arg35,
69790         T36 arg36,
69791         T37 arg37,
69792         T38 arg38,
69793         T39 arg39,
69794         T40 arg40,
69795         T41 arg41,
69796         T42 arg42,
69797         T43 arg43,
69798         T44 arg44,
69799         T45 arg45,
69800         T46 arg46,
69801         T47 arg47,
69802         T48 arg48,
69803         T49 arg49,
69804         T50 arg50,
69805         T51 arg51,
69806         T52 arg52,
69807         T53 arg53,
69808         T54 arg54,
69809         T55 arg55,
69810         T56 arg56,
69811         T57 arg57,
69812         T58 arg58,
69813         T59 arg59,
69814         T60 arg60,
69815         T61 arg61,
69816         T62 arg62,
69817         T63 arg63,
69818         T64 arg64,
69819         T65 arg65,
69820         T66 arg66,
69821         T67 arg67,
69822         T68 arg68,
69823         T69 arg69,
69824         T70 arg70,
69825         T71 arg71,
69826         T72 arg72,
69827         T73 arg73,
69828         T74 arg74,
69829         T75 arg75,
69830         T76 arg76,
69831         T77 arg77,
69832         T78 arg78,
69833         T79 arg79,
69834         T80 arg80,
69835         T81 arg81,
69836         T82 arg82,
69837         T83 arg83,
69838         T84 arg84,
69839         T85 arg85,
69840         T86 arg86,
69841         T87 arg87,
69842         T88 arg88,
69843         T89 arg89,
69844         T90 arg90,
69845         T91 arg91,
69846         T92 arg92,
69847         T93 arg93,
69848         T94 arg94,
69849         T95 arg95,
69850         T96 arg96,
69851         T97 arg97,
69852         T98 arg98,
69853         T99 arg99,
69854         T100 arg100,
69855         T101 arg101,
69856         T102 arg102,
69857         T103 arg103,
69858         T104 arg104,
69859         T105 arg105,
69860         T106 arg106,
69861         T107 arg107,
69862         T108 arg108,
69863         T109 arg109,
69864         T110 arg110,
69865         T111 arg111,
69866         T112 arg112,
69867         T113 arg113,
69868         T114 arg114,
69869         T115 arg115,
69870         T116 arg116,
69871         T117 arg117,
69872         T118 arg118,
69873         T119 arg119,
69874         T120 arg120)
69875     {
69876         return functor_(
69877             enqueueArgs,
69878             arg0,
69879             arg1,
69880             arg2,
69881             arg3,
69882             arg4,
69883             arg5,
69884             arg6,
69885             arg7,
69886             arg8,
69887             arg9,
69888             arg10,
69889             arg11,
69890             arg12,
69891             arg13,
69892             arg14,
69893             arg15,
69894             arg16,
69895             arg17,
69896             arg18,
69897             arg19,
69898             arg20,
69899             arg21,
69900             arg22,
69901             arg23,
69902             arg24,
69903             arg25,
69904             arg26,
69905             arg27,
69906             arg28,
69907             arg29,
69908             arg30,
69909             arg31,
69910             arg32,
69911             arg33,
69912             arg34,
69913             arg35,
69914             arg36,
69915             arg37,
69916             arg38,
69917             arg39,
69918             arg40,
69919             arg41,
69920             arg42,
69921             arg43,
69922             arg44,
69923             arg45,
69924             arg46,
69925             arg47,
69926             arg48,
69927             arg49,
69928             arg50,
69929             arg51,
69930             arg52,
69931             arg53,
69932             arg54,
69933             arg55,
69934             arg56,
69935             arg57,
69936             arg58,
69937             arg59,
69938             arg60,
69939             arg61,
69940             arg62,
69941             arg63,
69942             arg64,
69943             arg65,
69944             arg66,
69945             arg67,
69946             arg68,
69947             arg69,
69948             arg70,
69949             arg71,
69950             arg72,
69951             arg73,
69952             arg74,
69953             arg75,
69954             arg76,
69955             arg77,
69956             arg78,
69957             arg79,
69958             arg80,
69959             arg81,
69960             arg82,
69961             arg83,
69962             arg84,
69963             arg85,
69964             arg86,
69965             arg87,
69966             arg88,
69967             arg89,
69968             arg90,
69969             arg91,
69970             arg92,
69971             arg93,
69972             arg94,
69973             arg95,
69974             arg96,
69975             arg97,
69976             arg98,
69977             arg99,
69978             arg100,
69979             arg101,
69980             arg102,
69981             arg103,
69982             arg104,
69983             arg105,
69984             arg106,
69985             arg107,
69986             arg108,
69987             arg109,
69988             arg110,
69989             arg111,
69990             arg112,
69991             arg113,
69992             arg114,
69993             arg115,
69994             arg116,
69995             arg117,
69996             arg118,
69997             arg119,
69998             arg120);
69999     }
70000 
70001     operator type_ ()    
70002     {
70003         return type_(*this);
70004     }
70005 
70006 };
70007 
70008 template<
70009     typename T0,
70010     typename T1,
70011     typename T2,
70012     typename T3,
70013     typename T4,
70014     typename T5,
70015     typename T6,
70016     typename T7,
70017     typename T8,
70018     typename T9,
70019     typename T10,
70020     typename T11,
70021     typename T12,
70022     typename T13,
70023     typename T14,
70024     typename T15,
70025     typename T16,
70026     typename T17,
70027     typename T18,
70028     typename T19,
70029     typename T20,
70030     typename T21,
70031     typename T22,
70032     typename T23,
70033     typename T24,
70034     typename T25,
70035     typename T26,
70036     typename T27,
70037     typename T28,
70038     typename T29,
70039     typename T30,
70040     typename T31,
70041     typename T32,
70042     typename T33,
70043     typename T34,
70044     typename T35,
70045     typename T36,
70046     typename T37,
70047     typename T38,
70048     typename T39,
70049     typename T40,
70050     typename T41,
70051     typename T42,
70052     typename T43,
70053     typename T44,
70054     typename T45,
70055     typename T46,
70056     typename T47,
70057     typename T48,
70058     typename T49,
70059     typename T50,
70060     typename T51,
70061     typename T52,
70062     typename T53,
70063     typename T54,
70064     typename T55,
70065     typename T56,
70066     typename T57,
70067     typename T58,
70068     typename T59,
70069     typename T60,
70070     typename T61,
70071     typename T62,
70072     typename T63,
70073     typename T64,
70074     typename T65,
70075     typename T66,
70076     typename T67,
70077     typename T68,
70078     typename T69,
70079     typename T70,
70080     typename T71,
70081     typename T72,
70082     typename T73,
70083     typename T74,
70084     typename T75,
70085     typename T76,
70086     typename T77,
70087     typename T78,
70088     typename T79,
70089     typename T80,
70090     typename T81,
70091     typename T82,
70092     typename T83,
70093     typename T84,
70094     typename T85,
70095     typename T86,
70096     typename T87,
70097     typename T88,
70098     typename T89,
70099     typename T90,
70100     typename T91,
70101     typename T92,
70102     typename T93,
70103     typename T94,
70104     typename T95,
70105     typename T96,
70106     typename T97,
70107     typename T98,
70108     typename T99,
70109     typename T100,
70110     typename T101,
70111     typename T102,
70112     typename T103,
70113     typename T104,
70114     typename T105,
70115     typename T106,
70116     typename T107,
70117     typename T108,
70118     typename T109,
70119     typename T110,
70120     typename T111,
70121     typename T112,
70122     typename T113,
70123     typename T114,
70124     typename T115,
70125     typename T116,
70126     typename T117,
70127     typename T118,
70128     typename T119,
70129     typename T120,
70130     typename T121>
70131 struct functionImplementation_<
70132     T0,
70133     T1,
70134     T2,
70135     T3,
70136     T4,
70137     T5,
70138     T6,
70139     T7,
70140     T8,
70141     T9,
70142     T10,
70143     T11,
70144     T12,
70145     T13,
70146     T14,
70147     T15,
70148     T16,
70149     T17,
70150     T18,
70151     T19,
70152     T20,
70153     T21,
70154     T22,
70155     T23,
70156     T24,
70157     T25,
70158     T26,
70159     T27,
70160     T28,
70161     T29,
70162     T30,
70163     T31,
70164     T32,
70165     T33,
70166     T34,
70167     T35,
70168     T36,
70169     T37,
70170     T38,
70171     T39,
70172     T40,
70173     T41,
70174     T42,
70175     T43,
70176     T44,
70177     T45,
70178     T46,
70179     T47,
70180     T48,
70181     T49,
70182     T50,
70183     T51,
70184     T52,
70185     T53,
70186     T54,
70187     T55,
70188     T56,
70189     T57,
70190     T58,
70191     T59,
70192     T60,
70193     T61,
70194     T62,
70195     T63,
70196     T64,
70197     T65,
70198     T66,
70199     T67,
70200     T68,
70201     T69,
70202     T70,
70203     T71,
70204     T72,
70205     T73,
70206     T74,
70207     T75,
70208     T76,
70209     T77,
70210     T78,
70211     T79,
70212     T80,
70213     T81,
70214     T82,
70215     T83,
70216     T84,
70217     T85,
70218     T86,
70219     T87,
70220     T88,
70221     T89,
70222     T90,
70223     T91,
70224     T92,
70225     T93,
70226     T94,
70227     T95,
70228     T96,
70229     T97,
70230     T98,
70231     T99,
70232     T100,
70233     T101,
70234     T102,
70235     T103,
70236     T104,
70237     T105,
70238     T106,
70239     T107,
70240     T108,
70241     T109,
70242     T110,
70243     T111,
70244     T112,
70245     T113,
70246     T114,
70247     T115,
70248     T116,
70249     T117,
70250     T118,
70251     T119,
70252     T120,
70253     T121,
70254     NullType,
70255     NullType,
70256     NullType,
70257     NullType,
70258     NullType,
70259     NullType>
70260 {
70261     typedef detail::KernelFunctorGlobal<
70262         T0,
70263         T1,
70264         T2,
70265         T3,
70266         T4,
70267         T5,
70268         T6,
70269         T7,
70270         T8,
70271         T9,
70272         T10,
70273         T11,
70274         T12,
70275         T13,
70276         T14,
70277         T15,
70278         T16,
70279         T17,
70280         T18,
70281         T19,
70282         T20,
70283         T21,
70284         T22,
70285         T23,
70286         T24,
70287         T25,
70288         T26,
70289         T27,
70290         T28,
70291         T29,
70292         T30,
70293         T31,
70294         T32,
70295         T33,
70296         T34,
70297         T35,
70298         T36,
70299         T37,
70300         T38,
70301         T39,
70302         T40,
70303         T41,
70304         T42,
70305         T43,
70306         T44,
70307         T45,
70308         T46,
70309         T47,
70310         T48,
70311         T49,
70312         T50,
70313         T51,
70314         T52,
70315         T53,
70316         T54,
70317         T55,
70318         T56,
70319         T57,
70320         T58,
70321         T59,
70322         T60,
70323         T61,
70324         T62,
70325         T63,
70326         T64,
70327         T65,
70328         T66,
70329         T67,
70330         T68,
70331         T69,
70332         T70,
70333         T71,
70334         T72,
70335         T73,
70336         T74,
70337         T75,
70338         T76,
70339         T77,
70340         T78,
70341         T79,
70342         T80,
70343         T81,
70344         T82,
70345         T83,
70346         T84,
70347         T85,
70348         T86,
70349         T87,
70350         T88,
70351         T89,
70352         T90,
70353         T91,
70354         T92,
70355         T93,
70356         T94,
70357         T95,
70358         T96,
70359         T97,
70360         T98,
70361         T99,
70362         T100,
70363         T101,
70364         T102,
70365         T103,
70366         T104,
70367         T105,
70368         T106,
70369         T107,
70370         T108,
70371         T109,
70372         T110,
70373         T111,
70374         T112,
70375         T113,
70376         T114,
70377         T115,
70378         T116,
70379         T117,
70380         T118,
70381         T119,
70382         T120,
70383         T121,
70384         NullType,
70385         NullType,
70386         NullType,
70387         NullType,
70388         NullType,
70389         NullType> FunctorType;
70390 
70391     FunctorType functor_;
70392 
70393     functionImplementation_(const FunctorType &functor) :
70394         functor_(functor)
70395     {
70396     }
70397         
70398     typedef std::tr1::function<Event (
70399         const EnqueueArgs&,
70400         T0,
70401         T1,
70402         T2,
70403         T3,
70404         T4,
70405         T5,
70406         T6,
70407         T7,
70408         T8,
70409         T9,
70410         T10,
70411         T11,
70412         T12,
70413         T13,
70414         T14,
70415         T15,
70416         T16,
70417         T17,
70418         T18,
70419         T19,
70420         T20,
70421         T21,
70422         T22,
70423         T23,
70424         T24,
70425         T25,
70426         T26,
70427         T27,
70428         T28,
70429         T29,
70430         T30,
70431         T31,
70432         T32,
70433         T33,
70434         T34,
70435         T35,
70436         T36,
70437         T37,
70438         T38,
70439         T39,
70440         T40,
70441         T41,
70442         T42,
70443         T43,
70444         T44,
70445         T45,
70446         T46,
70447         T47,
70448         T48,
70449         T49,
70450         T50,
70451         T51,
70452         T52,
70453         T53,
70454         T54,
70455         T55,
70456         T56,
70457         T57,
70458         T58,
70459         T59,
70460         T60,
70461         T61,
70462         T62,
70463         T63,
70464         T64,
70465         T65,
70466         T66,
70467         T67,
70468         T68,
70469         T69,
70470         T70,
70471         T71,
70472         T72,
70473         T73,
70474         T74,
70475         T75,
70476         T76,
70477         T77,
70478         T78,
70479         T79,
70480         T80,
70481         T81,
70482         T82,
70483         T83,
70484         T84,
70485         T85,
70486         T86,
70487         T87,
70488         T88,
70489         T89,
70490         T90,
70491         T91,
70492         T92,
70493         T93,
70494         T94,
70495         T95,
70496         T96,
70497         T97,
70498         T98,
70499         T99,
70500         T100,
70501         T101,
70502         T102,
70503         T103,
70504         T104,
70505         T105,
70506         T106,
70507         T107,
70508         T108,
70509         T109,
70510         T110,
70511         T111,
70512         T112,
70513         T113,
70514         T114,
70515         T115,
70516         T116,
70517         T117,
70518         T118,
70519         T119,
70520         T120,
70521         T121)> type_;
70522 
70523     Event operator()(const EnqueueArgs& enqueueArgs,
70524         T0 arg0,
70525         T1 arg1,
70526         T2 arg2,
70527         T3 arg3,
70528         T4 arg4,
70529         T5 arg5,
70530         T6 arg6,
70531         T7 arg7,
70532         T8 arg8,
70533         T9 arg9,
70534         T10 arg10,
70535         T11 arg11,
70536         T12 arg12,
70537         T13 arg13,
70538         T14 arg14,
70539         T15 arg15,
70540         T16 arg16,
70541         T17 arg17,
70542         T18 arg18,
70543         T19 arg19,
70544         T20 arg20,
70545         T21 arg21,
70546         T22 arg22,
70547         T23 arg23,
70548         T24 arg24,
70549         T25 arg25,
70550         T26 arg26,
70551         T27 arg27,
70552         T28 arg28,
70553         T29 arg29,
70554         T30 arg30,
70555         T31 arg31,
70556         T32 arg32,
70557         T33 arg33,
70558         T34 arg34,
70559         T35 arg35,
70560         T36 arg36,
70561         T37 arg37,
70562         T38 arg38,
70563         T39 arg39,
70564         T40 arg40,
70565         T41 arg41,
70566         T42 arg42,
70567         T43 arg43,
70568         T44 arg44,
70569         T45 arg45,
70570         T46 arg46,
70571         T47 arg47,
70572         T48 arg48,
70573         T49 arg49,
70574         T50 arg50,
70575         T51 arg51,
70576         T52 arg52,
70577         T53 arg53,
70578         T54 arg54,
70579         T55 arg55,
70580         T56 arg56,
70581         T57 arg57,
70582         T58 arg58,
70583         T59 arg59,
70584         T60 arg60,
70585         T61 arg61,
70586         T62 arg62,
70587         T63 arg63,
70588         T64 arg64,
70589         T65 arg65,
70590         T66 arg66,
70591         T67 arg67,
70592         T68 arg68,
70593         T69 arg69,
70594         T70 arg70,
70595         T71 arg71,
70596         T72 arg72,
70597         T73 arg73,
70598         T74 arg74,
70599         T75 arg75,
70600         T76 arg76,
70601         T77 arg77,
70602         T78 arg78,
70603         T79 arg79,
70604         T80 arg80,
70605         T81 arg81,
70606         T82 arg82,
70607         T83 arg83,
70608         T84 arg84,
70609         T85 arg85,
70610         T86 arg86,
70611         T87 arg87,
70612         T88 arg88,
70613         T89 arg89,
70614         T90 arg90,
70615         T91 arg91,
70616         T92 arg92,
70617         T93 arg93,
70618         T94 arg94,
70619         T95 arg95,
70620         T96 arg96,
70621         T97 arg97,
70622         T98 arg98,
70623         T99 arg99,
70624         T100 arg100,
70625         T101 arg101,
70626         T102 arg102,
70627         T103 arg103,
70628         T104 arg104,
70629         T105 arg105,
70630         T106 arg106,
70631         T107 arg107,
70632         T108 arg108,
70633         T109 arg109,
70634         T110 arg110,
70635         T111 arg111,
70636         T112 arg112,
70637         T113 arg113,
70638         T114 arg114,
70639         T115 arg115,
70640         T116 arg116,
70641         T117 arg117,
70642         T118 arg118,
70643         T119 arg119,
70644         T120 arg120,
70645         T121 arg121)
70646     {
70647         return functor_(
70648             enqueueArgs,
70649             arg0,
70650             arg1,
70651             arg2,
70652             arg3,
70653             arg4,
70654             arg5,
70655             arg6,
70656             arg7,
70657             arg8,
70658             arg9,
70659             arg10,
70660             arg11,
70661             arg12,
70662             arg13,
70663             arg14,
70664             arg15,
70665             arg16,
70666             arg17,
70667             arg18,
70668             arg19,
70669             arg20,
70670             arg21,
70671             arg22,
70672             arg23,
70673             arg24,
70674             arg25,
70675             arg26,
70676             arg27,
70677             arg28,
70678             arg29,
70679             arg30,
70680             arg31,
70681             arg32,
70682             arg33,
70683             arg34,
70684             arg35,
70685             arg36,
70686             arg37,
70687             arg38,
70688             arg39,
70689             arg40,
70690             arg41,
70691             arg42,
70692             arg43,
70693             arg44,
70694             arg45,
70695             arg46,
70696             arg47,
70697             arg48,
70698             arg49,
70699             arg50,
70700             arg51,
70701             arg52,
70702             arg53,
70703             arg54,
70704             arg55,
70705             arg56,
70706             arg57,
70707             arg58,
70708             arg59,
70709             arg60,
70710             arg61,
70711             arg62,
70712             arg63,
70713             arg64,
70714             arg65,
70715             arg66,
70716             arg67,
70717             arg68,
70718             arg69,
70719             arg70,
70720             arg71,
70721             arg72,
70722             arg73,
70723             arg74,
70724             arg75,
70725             arg76,
70726             arg77,
70727             arg78,
70728             arg79,
70729             arg80,
70730             arg81,
70731             arg82,
70732             arg83,
70733             arg84,
70734             arg85,
70735             arg86,
70736             arg87,
70737             arg88,
70738             arg89,
70739             arg90,
70740             arg91,
70741             arg92,
70742             arg93,
70743             arg94,
70744             arg95,
70745             arg96,
70746             arg97,
70747             arg98,
70748             arg99,
70749             arg100,
70750             arg101,
70751             arg102,
70752             arg103,
70753             arg104,
70754             arg105,
70755             arg106,
70756             arg107,
70757             arg108,
70758             arg109,
70759             arg110,
70760             arg111,
70761             arg112,
70762             arg113,
70763             arg114,
70764             arg115,
70765             arg116,
70766             arg117,
70767             arg118,
70768             arg119,
70769             arg120,
70770             arg121);
70771     }
70772 
70773     operator type_ ()    
70774     {
70775         return type_(*this);
70776     }
70777 
70778 };
70779 
70780 template<
70781     typename T0,
70782     typename T1,
70783     typename T2,
70784     typename T3,
70785     typename T4,
70786     typename T5,
70787     typename T6,
70788     typename T7,
70789     typename T8,
70790     typename T9,
70791     typename T10,
70792     typename T11,
70793     typename T12,
70794     typename T13,
70795     typename T14,
70796     typename T15,
70797     typename T16,
70798     typename T17,
70799     typename T18,
70800     typename T19,
70801     typename T20,
70802     typename T21,
70803     typename T22,
70804     typename T23,
70805     typename T24,
70806     typename T25,
70807     typename T26,
70808     typename T27,
70809     typename T28,
70810     typename T29,
70811     typename T30,
70812     typename T31,
70813     typename T32,
70814     typename T33,
70815     typename T34,
70816     typename T35,
70817     typename T36,
70818     typename T37,
70819     typename T38,
70820     typename T39,
70821     typename T40,
70822     typename T41,
70823     typename T42,
70824     typename T43,
70825     typename T44,
70826     typename T45,
70827     typename T46,
70828     typename T47,
70829     typename T48,
70830     typename T49,
70831     typename T50,
70832     typename T51,
70833     typename T52,
70834     typename T53,
70835     typename T54,
70836     typename T55,
70837     typename T56,
70838     typename T57,
70839     typename T58,
70840     typename T59,
70841     typename T60,
70842     typename T61,
70843     typename T62,
70844     typename T63,
70845     typename T64,
70846     typename T65,
70847     typename T66,
70848     typename T67,
70849     typename T68,
70850     typename T69,
70851     typename T70,
70852     typename T71,
70853     typename T72,
70854     typename T73,
70855     typename T74,
70856     typename T75,
70857     typename T76,
70858     typename T77,
70859     typename T78,
70860     typename T79,
70861     typename T80,
70862     typename T81,
70863     typename T82,
70864     typename T83,
70865     typename T84,
70866     typename T85,
70867     typename T86,
70868     typename T87,
70869     typename T88,
70870     typename T89,
70871     typename T90,
70872     typename T91,
70873     typename T92,
70874     typename T93,
70875     typename T94,
70876     typename T95,
70877     typename T96,
70878     typename T97,
70879     typename T98,
70880     typename T99,
70881     typename T100,
70882     typename T101,
70883     typename T102,
70884     typename T103,
70885     typename T104,
70886     typename T105,
70887     typename T106,
70888     typename T107,
70889     typename T108,
70890     typename T109,
70891     typename T110,
70892     typename T111,
70893     typename T112,
70894     typename T113,
70895     typename T114,
70896     typename T115,
70897     typename T116,
70898     typename T117,
70899     typename T118,
70900     typename T119,
70901     typename T120,
70902     typename T121,
70903     typename T122>
70904 struct functionImplementation_<
70905     T0,
70906     T1,
70907     T2,
70908     T3,
70909     T4,
70910     T5,
70911     T6,
70912     T7,
70913     T8,
70914     T9,
70915     T10,
70916     T11,
70917     T12,
70918     T13,
70919     T14,
70920     T15,
70921     T16,
70922     T17,
70923     T18,
70924     T19,
70925     T20,
70926     T21,
70927     T22,
70928     T23,
70929     T24,
70930     T25,
70931     T26,
70932     T27,
70933     T28,
70934     T29,
70935     T30,
70936     T31,
70937     T32,
70938     T33,
70939     T34,
70940     T35,
70941     T36,
70942     T37,
70943     T38,
70944     T39,
70945     T40,
70946     T41,
70947     T42,
70948     T43,
70949     T44,
70950     T45,
70951     T46,
70952     T47,
70953     T48,
70954     T49,
70955     T50,
70956     T51,
70957     T52,
70958     T53,
70959     T54,
70960     T55,
70961     T56,
70962     T57,
70963     T58,
70964     T59,
70965     T60,
70966     T61,
70967     T62,
70968     T63,
70969     T64,
70970     T65,
70971     T66,
70972     T67,
70973     T68,
70974     T69,
70975     T70,
70976     T71,
70977     T72,
70978     T73,
70979     T74,
70980     T75,
70981     T76,
70982     T77,
70983     T78,
70984     T79,
70985     T80,
70986     T81,
70987     T82,
70988     T83,
70989     T84,
70990     T85,
70991     T86,
70992     T87,
70993     T88,
70994     T89,
70995     T90,
70996     T91,
70997     T92,
70998     T93,
70999     T94,
71000     T95,
71001     T96,
71002     T97,
71003     T98,
71004     T99,
71005     T100,
71006     T101,
71007     T102,
71008     T103,
71009     T104,
71010     T105,
71011     T106,
71012     T107,
71013     T108,
71014     T109,
71015     T110,
71016     T111,
71017     T112,
71018     T113,
71019     T114,
71020     T115,
71021     T116,
71022     T117,
71023     T118,
71024     T119,
71025     T120,
71026     T121,
71027     T122,
71028     NullType,
71029     NullType,
71030     NullType,
71031     NullType,
71032     NullType>
71033 {
71034     typedef detail::KernelFunctorGlobal<
71035         T0,
71036         T1,
71037         T2,
71038         T3,
71039         T4,
71040         T5,
71041         T6,
71042         T7,
71043         T8,
71044         T9,
71045         T10,
71046         T11,
71047         T12,
71048         T13,
71049         T14,
71050         T15,
71051         T16,
71052         T17,
71053         T18,
71054         T19,
71055         T20,
71056         T21,
71057         T22,
71058         T23,
71059         T24,
71060         T25,
71061         T26,
71062         T27,
71063         T28,
71064         T29,
71065         T30,
71066         T31,
71067         T32,
71068         T33,
71069         T34,
71070         T35,
71071         T36,
71072         T37,
71073         T38,
71074         T39,
71075         T40,
71076         T41,
71077         T42,
71078         T43,
71079         T44,
71080         T45,
71081         T46,
71082         T47,
71083         T48,
71084         T49,
71085         T50,
71086         T51,
71087         T52,
71088         T53,
71089         T54,
71090         T55,
71091         T56,
71092         T57,
71093         T58,
71094         T59,
71095         T60,
71096         T61,
71097         T62,
71098         T63,
71099         T64,
71100         T65,
71101         T66,
71102         T67,
71103         T68,
71104         T69,
71105         T70,
71106         T71,
71107         T72,
71108         T73,
71109         T74,
71110         T75,
71111         T76,
71112         T77,
71113         T78,
71114         T79,
71115         T80,
71116         T81,
71117         T82,
71118         T83,
71119         T84,
71120         T85,
71121         T86,
71122         T87,
71123         T88,
71124         T89,
71125         T90,
71126         T91,
71127         T92,
71128         T93,
71129         T94,
71130         T95,
71131         T96,
71132         T97,
71133         T98,
71134         T99,
71135         T100,
71136         T101,
71137         T102,
71138         T103,
71139         T104,
71140         T105,
71141         T106,
71142         T107,
71143         T108,
71144         T109,
71145         T110,
71146         T111,
71147         T112,
71148         T113,
71149         T114,
71150         T115,
71151         T116,
71152         T117,
71153         T118,
71154         T119,
71155         T120,
71156         T121,
71157         T122,
71158         NullType,
71159         NullType,
71160         NullType,
71161         NullType,
71162         NullType> FunctorType;
71163 
71164     FunctorType functor_;
71165 
71166     functionImplementation_(const FunctorType &functor) :
71167         functor_(functor)
71168     {
71169     }
71170         
71171     typedef std::tr1::function<Event (
71172         const EnqueueArgs&,
71173         T0,
71174         T1,
71175         T2,
71176         T3,
71177         T4,
71178         T5,
71179         T6,
71180         T7,
71181         T8,
71182         T9,
71183         T10,
71184         T11,
71185         T12,
71186         T13,
71187         T14,
71188         T15,
71189         T16,
71190         T17,
71191         T18,
71192         T19,
71193         T20,
71194         T21,
71195         T22,
71196         T23,
71197         T24,
71198         T25,
71199         T26,
71200         T27,
71201         T28,
71202         T29,
71203         T30,
71204         T31,
71205         T32,
71206         T33,
71207         T34,
71208         T35,
71209         T36,
71210         T37,
71211         T38,
71212         T39,
71213         T40,
71214         T41,
71215         T42,
71216         T43,
71217         T44,
71218         T45,
71219         T46,
71220         T47,
71221         T48,
71222         T49,
71223         T50,
71224         T51,
71225         T52,
71226         T53,
71227         T54,
71228         T55,
71229         T56,
71230         T57,
71231         T58,
71232         T59,
71233         T60,
71234         T61,
71235         T62,
71236         T63,
71237         T64,
71238         T65,
71239         T66,
71240         T67,
71241         T68,
71242         T69,
71243         T70,
71244         T71,
71245         T72,
71246         T73,
71247         T74,
71248         T75,
71249         T76,
71250         T77,
71251         T78,
71252         T79,
71253         T80,
71254         T81,
71255         T82,
71256         T83,
71257         T84,
71258         T85,
71259         T86,
71260         T87,
71261         T88,
71262         T89,
71263         T90,
71264         T91,
71265         T92,
71266         T93,
71267         T94,
71268         T95,
71269         T96,
71270         T97,
71271         T98,
71272         T99,
71273         T100,
71274         T101,
71275         T102,
71276         T103,
71277         T104,
71278         T105,
71279         T106,
71280         T107,
71281         T108,
71282         T109,
71283         T110,
71284         T111,
71285         T112,
71286         T113,
71287         T114,
71288         T115,
71289         T116,
71290         T117,
71291         T118,
71292         T119,
71293         T120,
71294         T121,
71295         T122)> type_;
71296 
71297     Event operator()(const EnqueueArgs& enqueueArgs,
71298         T0 arg0,
71299         T1 arg1,
71300         T2 arg2,
71301         T3 arg3,
71302         T4 arg4,
71303         T5 arg5,
71304         T6 arg6,
71305         T7 arg7,
71306         T8 arg8,
71307         T9 arg9,
71308         T10 arg10,
71309         T11 arg11,
71310         T12 arg12,
71311         T13 arg13,
71312         T14 arg14,
71313         T15 arg15,
71314         T16 arg16,
71315         T17 arg17,
71316         T18 arg18,
71317         T19 arg19,
71318         T20 arg20,
71319         T21 arg21,
71320         T22 arg22,
71321         T23 arg23,
71322         T24 arg24,
71323         T25 arg25,
71324         T26 arg26,
71325         T27 arg27,
71326         T28 arg28,
71327         T29 arg29,
71328         T30 arg30,
71329         T31 arg31,
71330         T32 arg32,
71331         T33 arg33,
71332         T34 arg34,
71333         T35 arg35,
71334         T36 arg36,
71335         T37 arg37,
71336         T38 arg38,
71337         T39 arg39,
71338         T40 arg40,
71339         T41 arg41,
71340         T42 arg42,
71341         T43 arg43,
71342         T44 arg44,
71343         T45 arg45,
71344         T46 arg46,
71345         T47 arg47,
71346         T48 arg48,
71347         T49 arg49,
71348         T50 arg50,
71349         T51 arg51,
71350         T52 arg52,
71351         T53 arg53,
71352         T54 arg54,
71353         T55 arg55,
71354         T56 arg56,
71355         T57 arg57,
71356         T58 arg58,
71357         T59 arg59,
71358         T60 arg60,
71359         T61 arg61,
71360         T62 arg62,
71361         T63 arg63,
71362         T64 arg64,
71363         T65 arg65,
71364         T66 arg66,
71365         T67 arg67,
71366         T68 arg68,
71367         T69 arg69,
71368         T70 arg70,
71369         T71 arg71,
71370         T72 arg72,
71371         T73 arg73,
71372         T74 arg74,
71373         T75 arg75,
71374         T76 arg76,
71375         T77 arg77,
71376         T78 arg78,
71377         T79 arg79,
71378         T80 arg80,
71379         T81 arg81,
71380         T82 arg82,
71381         T83 arg83,
71382         T84 arg84,
71383         T85 arg85,
71384         T86 arg86,
71385         T87 arg87,
71386         T88 arg88,
71387         T89 arg89,
71388         T90 arg90,
71389         T91 arg91,
71390         T92 arg92,
71391         T93 arg93,
71392         T94 arg94,
71393         T95 arg95,
71394         T96 arg96,
71395         T97 arg97,
71396         T98 arg98,
71397         T99 arg99,
71398         T100 arg100,
71399         T101 arg101,
71400         T102 arg102,
71401         T103 arg103,
71402         T104 arg104,
71403         T105 arg105,
71404         T106 arg106,
71405         T107 arg107,
71406         T108 arg108,
71407         T109 arg109,
71408         T110 arg110,
71409         T111 arg111,
71410         T112 arg112,
71411         T113 arg113,
71412         T114 arg114,
71413         T115 arg115,
71414         T116 arg116,
71415         T117 arg117,
71416         T118 arg118,
71417         T119 arg119,
71418         T120 arg120,
71419         T121 arg121,
71420         T122 arg122)
71421     {
71422         return functor_(
71423             enqueueArgs,
71424             arg0,
71425             arg1,
71426             arg2,
71427             arg3,
71428             arg4,
71429             arg5,
71430             arg6,
71431             arg7,
71432             arg8,
71433             arg9,
71434             arg10,
71435             arg11,
71436             arg12,
71437             arg13,
71438             arg14,
71439             arg15,
71440             arg16,
71441             arg17,
71442             arg18,
71443             arg19,
71444             arg20,
71445             arg21,
71446             arg22,
71447             arg23,
71448             arg24,
71449             arg25,
71450             arg26,
71451             arg27,
71452             arg28,
71453             arg29,
71454             arg30,
71455             arg31,
71456             arg32,
71457             arg33,
71458             arg34,
71459             arg35,
71460             arg36,
71461             arg37,
71462             arg38,
71463             arg39,
71464             arg40,
71465             arg41,
71466             arg42,
71467             arg43,
71468             arg44,
71469             arg45,
71470             arg46,
71471             arg47,
71472             arg48,
71473             arg49,
71474             arg50,
71475             arg51,
71476             arg52,
71477             arg53,
71478             arg54,
71479             arg55,
71480             arg56,
71481             arg57,
71482             arg58,
71483             arg59,
71484             arg60,
71485             arg61,
71486             arg62,
71487             arg63,
71488             arg64,
71489             arg65,
71490             arg66,
71491             arg67,
71492             arg68,
71493             arg69,
71494             arg70,
71495             arg71,
71496             arg72,
71497             arg73,
71498             arg74,
71499             arg75,
71500             arg76,
71501             arg77,
71502             arg78,
71503             arg79,
71504             arg80,
71505             arg81,
71506             arg82,
71507             arg83,
71508             arg84,
71509             arg85,
71510             arg86,
71511             arg87,
71512             arg88,
71513             arg89,
71514             arg90,
71515             arg91,
71516             arg92,
71517             arg93,
71518             arg94,
71519             arg95,
71520             arg96,
71521             arg97,
71522             arg98,
71523             arg99,
71524             arg100,
71525             arg101,
71526             arg102,
71527             arg103,
71528             arg104,
71529             arg105,
71530             arg106,
71531             arg107,
71532             arg108,
71533             arg109,
71534             arg110,
71535             arg111,
71536             arg112,
71537             arg113,
71538             arg114,
71539             arg115,
71540             arg116,
71541             arg117,
71542             arg118,
71543             arg119,
71544             arg120,
71545             arg121,
71546             arg122);
71547     }
71548 
71549     operator type_ ()    
71550     {
71551         return type_(*this);
71552     }
71553 
71554 };
71555 
71556 template<
71557     typename T0,
71558     typename T1,
71559     typename T2,
71560     typename T3,
71561     typename T4,
71562     typename T5,
71563     typename T6,
71564     typename T7,
71565     typename T8,
71566     typename T9,
71567     typename T10,
71568     typename T11,
71569     typename T12,
71570     typename T13,
71571     typename T14,
71572     typename T15,
71573     typename T16,
71574     typename T17,
71575     typename T18,
71576     typename T19,
71577     typename T20,
71578     typename T21,
71579     typename T22,
71580     typename T23,
71581     typename T24,
71582     typename T25,
71583     typename T26,
71584     typename T27,
71585     typename T28,
71586     typename T29,
71587     typename T30,
71588     typename T31,
71589     typename T32,
71590     typename T33,
71591     typename T34,
71592     typename T35,
71593     typename T36,
71594     typename T37,
71595     typename T38,
71596     typename T39,
71597     typename T40,
71598     typename T41,
71599     typename T42,
71600     typename T43,
71601     typename T44,
71602     typename T45,
71603     typename T46,
71604     typename T47,
71605     typename T48,
71606     typename T49,
71607     typename T50,
71608     typename T51,
71609     typename T52,
71610     typename T53,
71611     typename T54,
71612     typename T55,
71613     typename T56,
71614     typename T57,
71615     typename T58,
71616     typename T59,
71617     typename T60,
71618     typename T61,
71619     typename T62,
71620     typename T63,
71621     typename T64,
71622     typename T65,
71623     typename T66,
71624     typename T67,
71625     typename T68,
71626     typename T69,
71627     typename T70,
71628     typename T71,
71629     typename T72,
71630     typename T73,
71631     typename T74,
71632     typename T75,
71633     typename T76,
71634     typename T77,
71635     typename T78,
71636     typename T79,
71637     typename T80,
71638     typename T81,
71639     typename T82,
71640     typename T83,
71641     typename T84,
71642     typename T85,
71643     typename T86,
71644     typename T87,
71645     typename T88,
71646     typename T89,
71647     typename T90,
71648     typename T91,
71649     typename T92,
71650     typename T93,
71651     typename T94,
71652     typename T95,
71653     typename T96,
71654     typename T97,
71655     typename T98,
71656     typename T99,
71657     typename T100,
71658     typename T101,
71659     typename T102,
71660     typename T103,
71661     typename T104,
71662     typename T105,
71663     typename T106,
71664     typename T107,
71665     typename T108,
71666     typename T109,
71667     typename T110,
71668     typename T111,
71669     typename T112,
71670     typename T113,
71671     typename T114,
71672     typename T115,
71673     typename T116,
71674     typename T117,
71675     typename T118,
71676     typename T119,
71677     typename T120,
71678     typename T121,
71679     typename T122,
71680     typename T123>
71681 struct functionImplementation_<
71682     T0,
71683     T1,
71684     T2,
71685     T3,
71686     T4,
71687     T5,
71688     T6,
71689     T7,
71690     T8,
71691     T9,
71692     T10,
71693     T11,
71694     T12,
71695     T13,
71696     T14,
71697     T15,
71698     T16,
71699     T17,
71700     T18,
71701     T19,
71702     T20,
71703     T21,
71704     T22,
71705     T23,
71706     T24,
71707     T25,
71708     T26,
71709     T27,
71710     T28,
71711     T29,
71712     T30,
71713     T31,
71714     T32,
71715     T33,
71716     T34,
71717     T35,
71718     T36,
71719     T37,
71720     T38,
71721     T39,
71722     T40,
71723     T41,
71724     T42,
71725     T43,
71726     T44,
71727     T45,
71728     T46,
71729     T47,
71730     T48,
71731     T49,
71732     T50,
71733     T51,
71734     T52,
71735     T53,
71736     T54,
71737     T55,
71738     T56,
71739     T57,
71740     T58,
71741     T59,
71742     T60,
71743     T61,
71744     T62,
71745     T63,
71746     T64,
71747     T65,
71748     T66,
71749     T67,
71750     T68,
71751     T69,
71752     T70,
71753     T71,
71754     T72,
71755     T73,
71756     T74,
71757     T75,
71758     T76,
71759     T77,
71760     T78,
71761     T79,
71762     T80,
71763     T81,
71764     T82,
71765     T83,
71766     T84,
71767     T85,
71768     T86,
71769     T87,
71770     T88,
71771     T89,
71772     T90,
71773     T91,
71774     T92,
71775     T93,
71776     T94,
71777     T95,
71778     T96,
71779     T97,
71780     T98,
71781     T99,
71782     T100,
71783     T101,
71784     T102,
71785     T103,
71786     T104,
71787     T105,
71788     T106,
71789     T107,
71790     T108,
71791     T109,
71792     T110,
71793     T111,
71794     T112,
71795     T113,
71796     T114,
71797     T115,
71798     T116,
71799     T117,
71800     T118,
71801     T119,
71802     T120,
71803     T121,
71804     T122,
71805     T123,
71806     NullType,
71807     NullType,
71808     NullType,
71809     NullType>
71810 {
71811     typedef detail::KernelFunctorGlobal<
71812         T0,
71813         T1,
71814         T2,
71815         T3,
71816         T4,
71817         T5,
71818         T6,
71819         T7,
71820         T8,
71821         T9,
71822         T10,
71823         T11,
71824         T12,
71825         T13,
71826         T14,
71827         T15,
71828         T16,
71829         T17,
71830         T18,
71831         T19,
71832         T20,
71833         T21,
71834         T22,
71835         T23,
71836         T24,
71837         T25,
71838         T26,
71839         T27,
71840         T28,
71841         T29,
71842         T30,
71843         T31,
71844         T32,
71845         T33,
71846         T34,
71847         T35,
71848         T36,
71849         T37,
71850         T38,
71851         T39,
71852         T40,
71853         T41,
71854         T42,
71855         T43,
71856         T44,
71857         T45,
71858         T46,
71859         T47,
71860         T48,
71861         T49,
71862         T50,
71863         T51,
71864         T52,
71865         T53,
71866         T54,
71867         T55,
71868         T56,
71869         T57,
71870         T58,
71871         T59,
71872         T60,
71873         T61,
71874         T62,
71875         T63,
71876         T64,
71877         T65,
71878         T66,
71879         T67,
71880         T68,
71881         T69,
71882         T70,
71883         T71,
71884         T72,
71885         T73,
71886         T74,
71887         T75,
71888         T76,
71889         T77,
71890         T78,
71891         T79,
71892         T80,
71893         T81,
71894         T82,
71895         T83,
71896         T84,
71897         T85,
71898         T86,
71899         T87,
71900         T88,
71901         T89,
71902         T90,
71903         T91,
71904         T92,
71905         T93,
71906         T94,
71907         T95,
71908         T96,
71909         T97,
71910         T98,
71911         T99,
71912         T100,
71913         T101,
71914         T102,
71915         T103,
71916         T104,
71917         T105,
71918         T106,
71919         T107,
71920         T108,
71921         T109,
71922         T110,
71923         T111,
71924         T112,
71925         T113,
71926         T114,
71927         T115,
71928         T116,
71929         T117,
71930         T118,
71931         T119,
71932         T120,
71933         T121,
71934         T122,
71935         T123,
71936         NullType,
71937         NullType,
71938         NullType,
71939         NullType> FunctorType;
71940 
71941     FunctorType functor_;
71942 
71943     functionImplementation_(const FunctorType &functor) :
71944         functor_(functor)
71945     {
71946     }
71947         
71948     typedef std::tr1::function<Event (
71949         const EnqueueArgs&,
71950         T0,
71951         T1,
71952         T2,
71953         T3,
71954         T4,
71955         T5,
71956         T6,
71957         T7,
71958         T8,
71959         T9,
71960         T10,
71961         T11,
71962         T12,
71963         T13,
71964         T14,
71965         T15,
71966         T16,
71967         T17,
71968         T18,
71969         T19,
71970         T20,
71971         T21,
71972         T22,
71973         T23,
71974         T24,
71975         T25,
71976         T26,
71977         T27,
71978         T28,
71979         T29,
71980         T30,
71981         T31,
71982         T32,
71983         T33,
71984         T34,
71985         T35,
71986         T36,
71987         T37,
71988         T38,
71989         T39,
71990         T40,
71991         T41,
71992         T42,
71993         T43,
71994         T44,
71995         T45,
71996         T46,
71997         T47,
71998         T48,
71999         T49,
72000         T50,
72001         T51,
72002         T52,
72003         T53,
72004         T54,
72005         T55,
72006         T56,
72007         T57,
72008         T58,
72009         T59,
72010         T60,
72011         T61,
72012         T62,
72013         T63,
72014         T64,
72015         T65,
72016         T66,
72017         T67,
72018         T68,
72019         T69,
72020         T70,
72021         T71,
72022         T72,
72023         T73,
72024         T74,
72025         T75,
72026         T76,
72027         T77,
72028         T78,
72029         T79,
72030         T80,
72031         T81,
72032         T82,
72033         T83,
72034         T84,
72035         T85,
72036         T86,
72037         T87,
72038         T88,
72039         T89,
72040         T90,
72041         T91,
72042         T92,
72043         T93,
72044         T94,
72045         T95,
72046         T96,
72047         T97,
72048         T98,
72049         T99,
72050         T100,
72051         T101,
72052         T102,
72053         T103,
72054         T104,
72055         T105,
72056         T106,
72057         T107,
72058         T108,
72059         T109,
72060         T110,
72061         T111,
72062         T112,
72063         T113,
72064         T114,
72065         T115,
72066         T116,
72067         T117,
72068         T118,
72069         T119,
72070         T120,
72071         T121,
72072         T122,
72073         T123)> type_;
72074 
72075     Event operator()(const EnqueueArgs& enqueueArgs,
72076         T0 arg0,
72077         T1 arg1,
72078         T2 arg2,
72079         T3 arg3,
72080         T4 arg4,
72081         T5 arg5,
72082         T6 arg6,
72083         T7 arg7,
72084         T8 arg8,
72085         T9 arg9,
72086         T10 arg10,
72087         T11 arg11,
72088         T12 arg12,
72089         T13 arg13,
72090         T14 arg14,
72091         T15 arg15,
72092         T16 arg16,
72093         T17 arg17,
72094         T18 arg18,
72095         T19 arg19,
72096         T20 arg20,
72097         T21 arg21,
72098         T22 arg22,
72099         T23 arg23,
72100         T24 arg24,
72101         T25 arg25,
72102         T26 arg26,
72103         T27 arg27,
72104         T28 arg28,
72105         T29 arg29,
72106         T30 arg30,
72107         T31 arg31,
72108         T32 arg32,
72109         T33 arg33,
72110         T34 arg34,
72111         T35 arg35,
72112         T36 arg36,
72113         T37 arg37,
72114         T38 arg38,
72115         T39 arg39,
72116         T40 arg40,
72117         T41 arg41,
72118         T42 arg42,
72119         T43 arg43,
72120         T44 arg44,
72121         T45 arg45,
72122         T46 arg46,
72123         T47 arg47,
72124         T48 arg48,
72125         T49 arg49,
72126         T50 arg50,
72127         T51 arg51,
72128         T52 arg52,
72129         T53 arg53,
72130         T54 arg54,
72131         T55 arg55,
72132         T56 arg56,
72133         T57 arg57,
72134         T58 arg58,
72135         T59 arg59,
72136         T60 arg60,
72137         T61 arg61,
72138         T62 arg62,
72139         T63 arg63,
72140         T64 arg64,
72141         T65 arg65,
72142         T66 arg66,
72143         T67 arg67,
72144         T68 arg68,
72145         T69 arg69,
72146         T70 arg70,
72147         T71 arg71,
72148         T72 arg72,
72149         T73 arg73,
72150         T74 arg74,
72151         T75 arg75,
72152         T76 arg76,
72153         T77 arg77,
72154         T78 arg78,
72155         T79 arg79,
72156         T80 arg80,
72157         T81 arg81,
72158         T82 arg82,
72159         T83 arg83,
72160         T84 arg84,
72161         T85 arg85,
72162         T86 arg86,
72163         T87 arg87,
72164         T88 arg88,
72165         T89 arg89,
72166         T90 arg90,
72167         T91 arg91,
72168         T92 arg92,
72169         T93 arg93,
72170         T94 arg94,
72171         T95 arg95,
72172         T96 arg96,
72173         T97 arg97,
72174         T98 arg98,
72175         T99 arg99,
72176         T100 arg100,
72177         T101 arg101,
72178         T102 arg102,
72179         T103 arg103,
72180         T104 arg104,
72181         T105 arg105,
72182         T106 arg106,
72183         T107 arg107,
72184         T108 arg108,
72185         T109 arg109,
72186         T110 arg110,
72187         T111 arg111,
72188         T112 arg112,
72189         T113 arg113,
72190         T114 arg114,
72191         T115 arg115,
72192         T116 arg116,
72193         T117 arg117,
72194         T118 arg118,
72195         T119 arg119,
72196         T120 arg120,
72197         T121 arg121,
72198         T122 arg122,
72199         T123 arg123)
72200     {
72201         return functor_(
72202             enqueueArgs,
72203             arg0,
72204             arg1,
72205             arg2,
72206             arg3,
72207             arg4,
72208             arg5,
72209             arg6,
72210             arg7,
72211             arg8,
72212             arg9,
72213             arg10,
72214             arg11,
72215             arg12,
72216             arg13,
72217             arg14,
72218             arg15,
72219             arg16,
72220             arg17,
72221             arg18,
72222             arg19,
72223             arg20,
72224             arg21,
72225             arg22,
72226             arg23,
72227             arg24,
72228             arg25,
72229             arg26,
72230             arg27,
72231             arg28,
72232             arg29,
72233             arg30,
72234             arg31,
72235             arg32,
72236             arg33,
72237             arg34,
72238             arg35,
72239             arg36,
72240             arg37,
72241             arg38,
72242             arg39,
72243             arg40,
72244             arg41,
72245             arg42,
72246             arg43,
72247             arg44,
72248             arg45,
72249             arg46,
72250             arg47,
72251             arg48,
72252             arg49,
72253             arg50,
72254             arg51,
72255             arg52,
72256             arg53,
72257             arg54,
72258             arg55,
72259             arg56,
72260             arg57,
72261             arg58,
72262             arg59,
72263             arg60,
72264             arg61,
72265             arg62,
72266             arg63,
72267             arg64,
72268             arg65,
72269             arg66,
72270             arg67,
72271             arg68,
72272             arg69,
72273             arg70,
72274             arg71,
72275             arg72,
72276             arg73,
72277             arg74,
72278             arg75,
72279             arg76,
72280             arg77,
72281             arg78,
72282             arg79,
72283             arg80,
72284             arg81,
72285             arg82,
72286             arg83,
72287             arg84,
72288             arg85,
72289             arg86,
72290             arg87,
72291             arg88,
72292             arg89,
72293             arg90,
72294             arg91,
72295             arg92,
72296             arg93,
72297             arg94,
72298             arg95,
72299             arg96,
72300             arg97,
72301             arg98,
72302             arg99,
72303             arg100,
72304             arg101,
72305             arg102,
72306             arg103,
72307             arg104,
72308             arg105,
72309             arg106,
72310             arg107,
72311             arg108,
72312             arg109,
72313             arg110,
72314             arg111,
72315             arg112,
72316             arg113,
72317             arg114,
72318             arg115,
72319             arg116,
72320             arg117,
72321             arg118,
72322             arg119,
72323             arg120,
72324             arg121,
72325             arg122,
72326             arg123);
72327     }
72328 
72329     operator type_ ()    
72330     {
72331         return type_(*this);
72332     }
72333 
72334 };
72335 
72336 template<
72337     typename T0,
72338     typename T1,
72339     typename T2,
72340     typename T3,
72341     typename T4,
72342     typename T5,
72343     typename T6,
72344     typename T7,
72345     typename T8,
72346     typename T9,
72347     typename T10,
72348     typename T11,
72349     typename T12,
72350     typename T13,
72351     typename T14,
72352     typename T15,
72353     typename T16,
72354     typename T17,
72355     typename T18,
72356     typename T19,
72357     typename T20,
72358     typename T21,
72359     typename T22,
72360     typename T23,
72361     typename T24,
72362     typename T25,
72363     typename T26,
72364     typename T27,
72365     typename T28,
72366     typename T29,
72367     typename T30,
72368     typename T31,
72369     typename T32,
72370     typename T33,
72371     typename T34,
72372     typename T35,
72373     typename T36,
72374     typename T37,
72375     typename T38,
72376     typename T39,
72377     typename T40,
72378     typename T41,
72379     typename T42,
72380     typename T43,
72381     typename T44,
72382     typename T45,
72383     typename T46,
72384     typename T47,
72385     typename T48,
72386     typename T49,
72387     typename T50,
72388     typename T51,
72389     typename T52,
72390     typename T53,
72391     typename T54,
72392     typename T55,
72393     typename T56,
72394     typename T57,
72395     typename T58,
72396     typename T59,
72397     typename T60,
72398     typename T61,
72399     typename T62,
72400     typename T63,
72401     typename T64,
72402     typename T65,
72403     typename T66,
72404     typename T67,
72405     typename T68,
72406     typename T69,
72407     typename T70,
72408     typename T71,
72409     typename T72,
72410     typename T73,
72411     typename T74,
72412     typename T75,
72413     typename T76,
72414     typename T77,
72415     typename T78,
72416     typename T79,
72417     typename T80,
72418     typename T81,
72419     typename T82,
72420     typename T83,
72421     typename T84,
72422     typename T85,
72423     typename T86,
72424     typename T87,
72425     typename T88,
72426     typename T89,
72427     typename T90,
72428     typename T91,
72429     typename T92,
72430     typename T93,
72431     typename T94,
72432     typename T95,
72433     typename T96,
72434     typename T97,
72435     typename T98,
72436     typename T99,
72437     typename T100,
72438     typename T101,
72439     typename T102,
72440     typename T103,
72441     typename T104,
72442     typename T105,
72443     typename T106,
72444     typename T107,
72445     typename T108,
72446     typename T109,
72447     typename T110,
72448     typename T111,
72449     typename T112,
72450     typename T113,
72451     typename T114,
72452     typename T115,
72453     typename T116,
72454     typename T117,
72455     typename T118,
72456     typename T119,
72457     typename T120,
72458     typename T121,
72459     typename T122,
72460     typename T123,
72461     typename T124>
72462 struct functionImplementation_<
72463     T0,
72464     T1,
72465     T2,
72466     T3,
72467     T4,
72468     T5,
72469     T6,
72470     T7,
72471     T8,
72472     T9,
72473     T10,
72474     T11,
72475     T12,
72476     T13,
72477     T14,
72478     T15,
72479     T16,
72480     T17,
72481     T18,
72482     T19,
72483     T20,
72484     T21,
72485     T22,
72486     T23,
72487     T24,
72488     T25,
72489     T26,
72490     T27,
72491     T28,
72492     T29,
72493     T30,
72494     T31,
72495     T32,
72496     T33,
72497     T34,
72498     T35,
72499     T36,
72500     T37,
72501     T38,
72502     T39,
72503     T40,
72504     T41,
72505     T42,
72506     T43,
72507     T44,
72508     T45,
72509     T46,
72510     T47,
72511     T48,
72512     T49,
72513     T50,
72514     T51,
72515     T52,
72516     T53,
72517     T54,
72518     T55,
72519     T56,
72520     T57,
72521     T58,
72522     T59,
72523     T60,
72524     T61,
72525     T62,
72526     T63,
72527     T64,
72528     T65,
72529     T66,
72530     T67,
72531     T68,
72532     T69,
72533     T70,
72534     T71,
72535     T72,
72536     T73,
72537     T74,
72538     T75,
72539     T76,
72540     T77,
72541     T78,
72542     T79,
72543     T80,
72544     T81,
72545     T82,
72546     T83,
72547     T84,
72548     T85,
72549     T86,
72550     T87,
72551     T88,
72552     T89,
72553     T90,
72554     T91,
72555     T92,
72556     T93,
72557     T94,
72558     T95,
72559     T96,
72560     T97,
72561     T98,
72562     T99,
72563     T100,
72564     T101,
72565     T102,
72566     T103,
72567     T104,
72568     T105,
72569     T106,
72570     T107,
72571     T108,
72572     T109,
72573     T110,
72574     T111,
72575     T112,
72576     T113,
72577     T114,
72578     T115,
72579     T116,
72580     T117,
72581     T118,
72582     T119,
72583     T120,
72584     T121,
72585     T122,
72586     T123,
72587     T124,
72588     NullType,
72589     NullType,
72590     NullType>
72591 {
72592     typedef detail::KernelFunctorGlobal<
72593         T0,
72594         T1,
72595         T2,
72596         T3,
72597         T4,
72598         T5,
72599         T6,
72600         T7,
72601         T8,
72602         T9,
72603         T10,
72604         T11,
72605         T12,
72606         T13,
72607         T14,
72608         T15,
72609         T16,
72610         T17,
72611         T18,
72612         T19,
72613         T20,
72614         T21,
72615         T22,
72616         T23,
72617         T24,
72618         T25,
72619         T26,
72620         T27,
72621         T28,
72622         T29,
72623         T30,
72624         T31,
72625         T32,
72626         T33,
72627         T34,
72628         T35,
72629         T36,
72630         T37,
72631         T38,
72632         T39,
72633         T40,
72634         T41,
72635         T42,
72636         T43,
72637         T44,
72638         T45,
72639         T46,
72640         T47,
72641         T48,
72642         T49,
72643         T50,
72644         T51,
72645         T52,
72646         T53,
72647         T54,
72648         T55,
72649         T56,
72650         T57,
72651         T58,
72652         T59,
72653         T60,
72654         T61,
72655         T62,
72656         T63,
72657         T64,
72658         T65,
72659         T66,
72660         T67,
72661         T68,
72662         T69,
72663         T70,
72664         T71,
72665         T72,
72666         T73,
72667         T74,
72668         T75,
72669         T76,
72670         T77,
72671         T78,
72672         T79,
72673         T80,
72674         T81,
72675         T82,
72676         T83,
72677         T84,
72678         T85,
72679         T86,
72680         T87,
72681         T88,
72682         T89,
72683         T90,
72684         T91,
72685         T92,
72686         T93,
72687         T94,
72688         T95,
72689         T96,
72690         T97,
72691         T98,
72692         T99,
72693         T100,
72694         T101,
72695         T102,
72696         T103,
72697         T104,
72698         T105,
72699         T106,
72700         T107,
72701         T108,
72702         T109,
72703         T110,
72704         T111,
72705         T112,
72706         T113,
72707         T114,
72708         T115,
72709         T116,
72710         T117,
72711         T118,
72712         T119,
72713         T120,
72714         T121,
72715         T122,
72716         T123,
72717         T124,
72718         NullType,
72719         NullType,
72720         NullType> FunctorType;
72721 
72722     FunctorType functor_;
72723 
72724     functionImplementation_(const FunctorType &functor) :
72725         functor_(functor)
72726     {
72727     }
72728         
72729     typedef std::tr1::function<Event (
72730         const EnqueueArgs&,
72731         T0,
72732         T1,
72733         T2,
72734         T3,
72735         T4,
72736         T5,
72737         T6,
72738         T7,
72739         T8,
72740         T9,
72741         T10,
72742         T11,
72743         T12,
72744         T13,
72745         T14,
72746         T15,
72747         T16,
72748         T17,
72749         T18,
72750         T19,
72751         T20,
72752         T21,
72753         T22,
72754         T23,
72755         T24,
72756         T25,
72757         T26,
72758         T27,
72759         T28,
72760         T29,
72761         T30,
72762         T31,
72763         T32,
72764         T33,
72765         T34,
72766         T35,
72767         T36,
72768         T37,
72769         T38,
72770         T39,
72771         T40,
72772         T41,
72773         T42,
72774         T43,
72775         T44,
72776         T45,
72777         T46,
72778         T47,
72779         T48,
72780         T49,
72781         T50,
72782         T51,
72783         T52,
72784         T53,
72785         T54,
72786         T55,
72787         T56,
72788         T57,
72789         T58,
72790         T59,
72791         T60,
72792         T61,
72793         T62,
72794         T63,
72795         T64,
72796         T65,
72797         T66,
72798         T67,
72799         T68,
72800         T69,
72801         T70,
72802         T71,
72803         T72,
72804         T73,
72805         T74,
72806         T75,
72807         T76,
72808         T77,
72809         T78,
72810         T79,
72811         T80,
72812         T81,
72813         T82,
72814         T83,
72815         T84,
72816         T85,
72817         T86,
72818         T87,
72819         T88,
72820         T89,
72821         T90,
72822         T91,
72823         T92,
72824         T93,
72825         T94,
72826         T95,
72827         T96,
72828         T97,
72829         T98,
72830         T99,
72831         T100,
72832         T101,
72833         T102,
72834         T103,
72835         T104,
72836         T105,
72837         T106,
72838         T107,
72839         T108,
72840         T109,
72841         T110,
72842         T111,
72843         T112,
72844         T113,
72845         T114,
72846         T115,
72847         T116,
72848         T117,
72849         T118,
72850         T119,
72851         T120,
72852         T121,
72853         T122,
72854         T123,
72855         T124)> type_;
72856 
72857     Event operator()(const EnqueueArgs& enqueueArgs,
72858         T0 arg0,
72859         T1 arg1,
72860         T2 arg2,
72861         T3 arg3,
72862         T4 arg4,
72863         T5 arg5,
72864         T6 arg6,
72865         T7 arg7,
72866         T8 arg8,
72867         T9 arg9,
72868         T10 arg10,
72869         T11 arg11,
72870         T12 arg12,
72871         T13 arg13,
72872         T14 arg14,
72873         T15 arg15,
72874         T16 arg16,
72875         T17 arg17,
72876         T18 arg18,
72877         T19 arg19,
72878         T20 arg20,
72879         T21 arg21,
72880         T22 arg22,
72881         T23 arg23,
72882         T24 arg24,
72883         T25 arg25,
72884         T26 arg26,
72885         T27 arg27,
72886         T28 arg28,
72887         T29 arg29,
72888         T30 arg30,
72889         T31 arg31,
72890         T32 arg32,
72891         T33 arg33,
72892         T34 arg34,
72893         T35 arg35,
72894         T36 arg36,
72895         T37 arg37,
72896         T38 arg38,
72897         T39 arg39,
72898         T40 arg40,
72899         T41 arg41,
72900         T42 arg42,
72901         T43 arg43,
72902         T44 arg44,
72903         T45 arg45,
72904         T46 arg46,
72905         T47 arg47,
72906         T48 arg48,
72907         T49 arg49,
72908         T50 arg50,
72909         T51 arg51,
72910         T52 arg52,
72911         T53 arg53,
72912         T54 arg54,
72913         T55 arg55,
72914         T56 arg56,
72915         T57 arg57,
72916         T58 arg58,
72917         T59 arg59,
72918         T60 arg60,
72919         T61 arg61,
72920         T62 arg62,
72921         T63 arg63,
72922         T64 arg64,
72923         T65 arg65,
72924         T66 arg66,
72925         T67 arg67,
72926         T68 arg68,
72927         T69 arg69,
72928         T70 arg70,
72929         T71 arg71,
72930         T72 arg72,
72931         T73 arg73,
72932         T74 arg74,
72933         T75 arg75,
72934         T76 arg76,
72935         T77 arg77,
72936         T78 arg78,
72937         T79 arg79,
72938         T80 arg80,
72939         T81 arg81,
72940         T82 arg82,
72941         T83 arg83,
72942         T84 arg84,
72943         T85 arg85,
72944         T86 arg86,
72945         T87 arg87,
72946         T88 arg88,
72947         T89 arg89,
72948         T90 arg90,
72949         T91 arg91,
72950         T92 arg92,
72951         T93 arg93,
72952         T94 arg94,
72953         T95 arg95,
72954         T96 arg96,
72955         T97 arg97,
72956         T98 arg98,
72957         T99 arg99,
72958         T100 arg100,
72959         T101 arg101,
72960         T102 arg102,
72961         T103 arg103,
72962         T104 arg104,
72963         T105 arg105,
72964         T106 arg106,
72965         T107 arg107,
72966         T108 arg108,
72967         T109 arg109,
72968         T110 arg110,
72969         T111 arg111,
72970         T112 arg112,
72971         T113 arg113,
72972         T114 arg114,
72973         T115 arg115,
72974         T116 arg116,
72975         T117 arg117,
72976         T118 arg118,
72977         T119 arg119,
72978         T120 arg120,
72979         T121 arg121,
72980         T122 arg122,
72981         T123 arg123,
72982         T124 arg124)
72983     {
72984         return functor_(
72985             enqueueArgs,
72986             arg0,
72987             arg1,
72988             arg2,
72989             arg3,
72990             arg4,
72991             arg5,
72992             arg6,
72993             arg7,
72994             arg8,
72995             arg9,
72996             arg10,
72997             arg11,
72998             arg12,
72999             arg13,
73000             arg14,
73001             arg15,
73002             arg16,
73003             arg17,
73004             arg18,
73005             arg19,
73006             arg20,
73007             arg21,
73008             arg22,
73009             arg23,
73010             arg24,
73011             arg25,
73012             arg26,
73013             arg27,
73014             arg28,
73015             arg29,
73016             arg30,
73017             arg31,
73018             arg32,
73019             arg33,
73020             arg34,
73021             arg35,
73022             arg36,
73023             arg37,
73024             arg38,
73025             arg39,
73026             arg40,
73027             arg41,
73028             arg42,
73029             arg43,
73030             arg44,
73031             arg45,
73032             arg46,
73033             arg47,
73034             arg48,
73035             arg49,
73036             arg50,
73037             arg51,
73038             arg52,
73039             arg53,
73040             arg54,
73041             arg55,
73042             arg56,
73043             arg57,
73044             arg58,
73045             arg59,
73046             arg60,
73047             arg61,
73048             arg62,
73049             arg63,
73050             arg64,
73051             arg65,
73052             arg66,
73053             arg67,
73054             arg68,
73055             arg69,
73056             arg70,
73057             arg71,
73058             arg72,
73059             arg73,
73060             arg74,
73061             arg75,
73062             arg76,
73063             arg77,
73064             arg78,
73065             arg79,
73066             arg80,
73067             arg81,
73068             arg82,
73069             arg83,
73070             arg84,
73071             arg85,
73072             arg86,
73073             arg87,
73074             arg88,
73075             arg89,
73076             arg90,
73077             arg91,
73078             arg92,
73079             arg93,
73080             arg94,
73081             arg95,
73082             arg96,
73083             arg97,
73084             arg98,
73085             arg99,
73086             arg100,
73087             arg101,
73088             arg102,
73089             arg103,
73090             arg104,
73091             arg105,
73092             arg106,
73093             arg107,
73094             arg108,
73095             arg109,
73096             arg110,
73097             arg111,
73098             arg112,
73099             arg113,
73100             arg114,
73101             arg115,
73102             arg116,
73103             arg117,
73104             arg118,
73105             arg119,
73106             arg120,
73107             arg121,
73108             arg122,
73109             arg123,
73110             arg124);
73111     }
73112 
73113     operator type_ ()    
73114     {
73115         return type_(*this);
73116     }
73117 
73118 };
73119 
73120 template<
73121     typename T0,
73122     typename T1,
73123     typename T2,
73124     typename T3,
73125     typename T4,
73126     typename T5,
73127     typename T6,
73128     typename T7,
73129     typename T8,
73130     typename T9,
73131     typename T10,
73132     typename T11,
73133     typename T12,
73134     typename T13,
73135     typename T14,
73136     typename T15,
73137     typename T16,
73138     typename T17,
73139     typename T18,
73140     typename T19,
73141     typename T20,
73142     typename T21,
73143     typename T22,
73144     typename T23,
73145     typename T24,
73146     typename T25,
73147     typename T26,
73148     typename T27,
73149     typename T28,
73150     typename T29,
73151     typename T30,
73152     typename T31,
73153     typename T32,
73154     typename T33,
73155     typename T34,
73156     typename T35,
73157     typename T36,
73158     typename T37,
73159     typename T38,
73160     typename T39,
73161     typename T40,
73162     typename T41,
73163     typename T42,
73164     typename T43,
73165     typename T44,
73166     typename T45,
73167     typename T46,
73168     typename T47,
73169     typename T48,
73170     typename T49,
73171     typename T50,
73172     typename T51,
73173     typename T52,
73174     typename T53,
73175     typename T54,
73176     typename T55,
73177     typename T56,
73178     typename T57,
73179     typename T58,
73180     typename T59,
73181     typename T60,
73182     typename T61,
73183     typename T62,
73184     typename T63,
73185     typename T64,
73186     typename T65,
73187     typename T66,
73188     typename T67,
73189     typename T68,
73190     typename T69,
73191     typename T70,
73192     typename T71,
73193     typename T72,
73194     typename T73,
73195     typename T74,
73196     typename T75,
73197     typename T76,
73198     typename T77,
73199     typename T78,
73200     typename T79,
73201     typename T80,
73202     typename T81,
73203     typename T82,
73204     typename T83,
73205     typename T84,
73206     typename T85,
73207     typename T86,
73208     typename T87,
73209     typename T88,
73210     typename T89,
73211     typename T90,
73212     typename T91,
73213     typename T92,
73214     typename T93,
73215     typename T94,
73216     typename T95,
73217     typename T96,
73218     typename T97,
73219     typename T98,
73220     typename T99,
73221     typename T100,
73222     typename T101,
73223     typename T102,
73224     typename T103,
73225     typename T104,
73226     typename T105,
73227     typename T106,
73228     typename T107,
73229     typename T108,
73230     typename T109,
73231     typename T110,
73232     typename T111,
73233     typename T112,
73234     typename T113,
73235     typename T114,
73236     typename T115,
73237     typename T116,
73238     typename T117,
73239     typename T118,
73240     typename T119,
73241     typename T120,
73242     typename T121,
73243     typename T122,
73244     typename T123,
73245     typename T124,
73246     typename T125>
73247 struct functionImplementation_<
73248     T0,
73249     T1,
73250     T2,
73251     T3,
73252     T4,
73253     T5,
73254     T6,
73255     T7,
73256     T8,
73257     T9,
73258     T10,
73259     T11,
73260     T12,
73261     T13,
73262     T14,
73263     T15,
73264     T16,
73265     T17,
73266     T18,
73267     T19,
73268     T20,
73269     T21,
73270     T22,
73271     T23,
73272     T24,
73273     T25,
73274     T26,
73275     T27,
73276     T28,
73277     T29,
73278     T30,
73279     T31,
73280     T32,
73281     T33,
73282     T34,
73283     T35,
73284     T36,
73285     T37,
73286     T38,
73287     T39,
73288     T40,
73289     T41,
73290     T42,
73291     T43,
73292     T44,
73293     T45,
73294     T46,
73295     T47,
73296     T48,
73297     T49,
73298     T50,
73299     T51,
73300     T52,
73301     T53,
73302     T54,
73303     T55,
73304     T56,
73305     T57,
73306     T58,
73307     T59,
73308     T60,
73309     T61,
73310     T62,
73311     T63,
73312     T64,
73313     T65,
73314     T66,
73315     T67,
73316     T68,
73317     T69,
73318     T70,
73319     T71,
73320     T72,
73321     T73,
73322     T74,
73323     T75,
73324     T76,
73325     T77,
73326     T78,
73327     T79,
73328     T80,
73329     T81,
73330     T82,
73331     T83,
73332     T84,
73333     T85,
73334     T86,
73335     T87,
73336     T88,
73337     T89,
73338     T90,
73339     T91,
73340     T92,
73341     T93,
73342     T94,
73343     T95,
73344     T96,
73345     T97,
73346     T98,
73347     T99,
73348     T100,
73349     T101,
73350     T102,
73351     T103,
73352     T104,
73353     T105,
73354     T106,
73355     T107,
73356     T108,
73357     T109,
73358     T110,
73359     T111,
73360     T112,
73361     T113,
73362     T114,
73363     T115,
73364     T116,
73365     T117,
73366     T118,
73367     T119,
73368     T120,
73369     T121,
73370     T122,
73371     T123,
73372     T124,
73373     T125,
73374     NullType,
73375     NullType>
73376 {
73377     typedef detail::KernelFunctorGlobal<
73378         T0,
73379         T1,
73380         T2,
73381         T3,
73382         T4,
73383         T5,
73384         T6,
73385         T7,
73386         T8,
73387         T9,
73388         T10,
73389         T11,
73390         T12,
73391         T13,
73392         T14,
73393         T15,
73394         T16,
73395         T17,
73396         T18,
73397         T19,
73398         T20,
73399         T21,
73400         T22,
73401         T23,
73402         T24,
73403         T25,
73404         T26,
73405         T27,
73406         T28,
73407         T29,
73408         T30,
73409         T31,
73410         T32,
73411         T33,
73412         T34,
73413         T35,
73414         T36,
73415         T37,
73416         T38,
73417         T39,
73418         T40,
73419         T41,
73420         T42,
73421         T43,
73422         T44,
73423         T45,
73424         T46,
73425         T47,
73426         T48,
73427         T49,
73428         T50,
73429         T51,
73430         T52,
73431         T53,
73432         T54,
73433         T55,
73434         T56,
73435         T57,
73436         T58,
73437         T59,
73438         T60,
73439         T61,
73440         T62,
73441         T63,
73442         T64,
73443         T65,
73444         T66,
73445         T67,
73446         T68,
73447         T69,
73448         T70,
73449         T71,
73450         T72,
73451         T73,
73452         T74,
73453         T75,
73454         T76,
73455         T77,
73456         T78,
73457         T79,
73458         T80,
73459         T81,
73460         T82,
73461         T83,
73462         T84,
73463         T85,
73464         T86,
73465         T87,
73466         T88,
73467         T89,
73468         T90,
73469         T91,
73470         T92,
73471         T93,
73472         T94,
73473         T95,
73474         T96,
73475         T97,
73476         T98,
73477         T99,
73478         T100,
73479         T101,
73480         T102,
73481         T103,
73482         T104,
73483         T105,
73484         T106,
73485         T107,
73486         T108,
73487         T109,
73488         T110,
73489         T111,
73490         T112,
73491         T113,
73492         T114,
73493         T115,
73494         T116,
73495         T117,
73496         T118,
73497         T119,
73498         T120,
73499         T121,
73500         T122,
73501         T123,
73502         T124,
73503         T125,
73504         NullType,
73505         NullType> FunctorType;
73506 
73507     FunctorType functor_;
73508 
73509     functionImplementation_(const FunctorType &functor) :
73510         functor_(functor)
73511     {
73512     }
73513         
73514     typedef std::tr1::function<Event (
73515         const EnqueueArgs&,
73516         T0,
73517         T1,
73518         T2,
73519         T3,
73520         T4,
73521         T5,
73522         T6,
73523         T7,
73524         T8,
73525         T9,
73526         T10,
73527         T11,
73528         T12,
73529         T13,
73530         T14,
73531         T15,
73532         T16,
73533         T17,
73534         T18,
73535         T19,
73536         T20,
73537         T21,
73538         T22,
73539         T23,
73540         T24,
73541         T25,
73542         T26,
73543         T27,
73544         T28,
73545         T29,
73546         T30,
73547         T31,
73548         T32,
73549         T33,
73550         T34,
73551         T35,
73552         T36,
73553         T37,
73554         T38,
73555         T39,
73556         T40,
73557         T41,
73558         T42,
73559         T43,
73560         T44,
73561         T45,
73562         T46,
73563         T47,
73564         T48,
73565         T49,
73566         T50,
73567         T51,
73568         T52,
73569         T53,
73570         T54,
73571         T55,
73572         T56,
73573         T57,
73574         T58,
73575         T59,
73576         T60,
73577         T61,
73578         T62,
73579         T63,
73580         T64,
73581         T65,
73582         T66,
73583         T67,
73584         T68,
73585         T69,
73586         T70,
73587         T71,
73588         T72,
73589         T73,
73590         T74,
73591         T75,
73592         T76,
73593         T77,
73594         T78,
73595         T79,
73596         T80,
73597         T81,
73598         T82,
73599         T83,
73600         T84,
73601         T85,
73602         T86,
73603         T87,
73604         T88,
73605         T89,
73606         T90,
73607         T91,
73608         T92,
73609         T93,
73610         T94,
73611         T95,
73612         T96,
73613         T97,
73614         T98,
73615         T99,
73616         T100,
73617         T101,
73618         T102,
73619         T103,
73620         T104,
73621         T105,
73622         T106,
73623         T107,
73624         T108,
73625         T109,
73626         T110,
73627         T111,
73628         T112,
73629         T113,
73630         T114,
73631         T115,
73632         T116,
73633         T117,
73634         T118,
73635         T119,
73636         T120,
73637         T121,
73638         T122,
73639         T123,
73640         T124,
73641         T125)> type_;
73642 
73643     Event operator()(const EnqueueArgs& enqueueArgs,
73644         T0 arg0,
73645         T1 arg1,
73646         T2 arg2,
73647         T3 arg3,
73648         T4 arg4,
73649         T5 arg5,
73650         T6 arg6,
73651         T7 arg7,
73652         T8 arg8,
73653         T9 arg9,
73654         T10 arg10,
73655         T11 arg11,
73656         T12 arg12,
73657         T13 arg13,
73658         T14 arg14,
73659         T15 arg15,
73660         T16 arg16,
73661         T17 arg17,
73662         T18 arg18,
73663         T19 arg19,
73664         T20 arg20,
73665         T21 arg21,
73666         T22 arg22,
73667         T23 arg23,
73668         T24 arg24,
73669         T25 arg25,
73670         T26 arg26,
73671         T27 arg27,
73672         T28 arg28,
73673         T29 arg29,
73674         T30 arg30,
73675         T31 arg31,
73676         T32 arg32,
73677         T33 arg33,
73678         T34 arg34,
73679         T35 arg35,
73680         T36 arg36,
73681         T37 arg37,
73682         T38 arg38,
73683         T39 arg39,
73684         T40 arg40,
73685         T41 arg41,
73686         T42 arg42,
73687         T43 arg43,
73688         T44 arg44,
73689         T45 arg45,
73690         T46 arg46,
73691         T47 arg47,
73692         T48 arg48,
73693         T49 arg49,
73694         T50 arg50,
73695         T51 arg51,
73696         T52 arg52,
73697         T53 arg53,
73698         T54 arg54,
73699         T55 arg55,
73700         T56 arg56,
73701         T57 arg57,
73702         T58 arg58,
73703         T59 arg59,
73704         T60 arg60,
73705         T61 arg61,
73706         T62 arg62,
73707         T63 arg63,
73708         T64 arg64,
73709         T65 arg65,
73710         T66 arg66,
73711         T67 arg67,
73712         T68 arg68,
73713         T69 arg69,
73714         T70 arg70,
73715         T71 arg71,
73716         T72 arg72,
73717         T73 arg73,
73718         T74 arg74,
73719         T75 arg75,
73720         T76 arg76,
73721         T77 arg77,
73722         T78 arg78,
73723         T79 arg79,
73724         T80 arg80,
73725         T81 arg81,
73726         T82 arg82,
73727         T83 arg83,
73728         T84 arg84,
73729         T85 arg85,
73730         T86 arg86,
73731         T87 arg87,
73732         T88 arg88,
73733         T89 arg89,
73734         T90 arg90,
73735         T91 arg91,
73736         T92 arg92,
73737         T93 arg93,
73738         T94 arg94,
73739         T95 arg95,
73740         T96 arg96,
73741         T97 arg97,
73742         T98 arg98,
73743         T99 arg99,
73744         T100 arg100,
73745         T101 arg101,
73746         T102 arg102,
73747         T103 arg103,
73748         T104 arg104,
73749         T105 arg105,
73750         T106 arg106,
73751         T107 arg107,
73752         T108 arg108,
73753         T109 arg109,
73754         T110 arg110,
73755         T111 arg111,
73756         T112 arg112,
73757         T113 arg113,
73758         T114 arg114,
73759         T115 arg115,
73760         T116 arg116,
73761         T117 arg117,
73762         T118 arg118,
73763         T119 arg119,
73764         T120 arg120,
73765         T121 arg121,
73766         T122 arg122,
73767         T123 arg123,
73768         T124 arg124,
73769         T125 arg125)
73770     {
73771         return functor_(
73772             enqueueArgs,
73773             arg0,
73774             arg1,
73775             arg2,
73776             arg3,
73777             arg4,
73778             arg5,
73779             arg6,
73780             arg7,
73781             arg8,
73782             arg9,
73783             arg10,
73784             arg11,
73785             arg12,
73786             arg13,
73787             arg14,
73788             arg15,
73789             arg16,
73790             arg17,
73791             arg18,
73792             arg19,
73793             arg20,
73794             arg21,
73795             arg22,
73796             arg23,
73797             arg24,
73798             arg25,
73799             arg26,
73800             arg27,
73801             arg28,
73802             arg29,
73803             arg30,
73804             arg31,
73805             arg32,
73806             arg33,
73807             arg34,
73808             arg35,
73809             arg36,
73810             arg37,
73811             arg38,
73812             arg39,
73813             arg40,
73814             arg41,
73815             arg42,
73816             arg43,
73817             arg44,
73818             arg45,
73819             arg46,
73820             arg47,
73821             arg48,
73822             arg49,
73823             arg50,
73824             arg51,
73825             arg52,
73826             arg53,
73827             arg54,
73828             arg55,
73829             arg56,
73830             arg57,
73831             arg58,
73832             arg59,
73833             arg60,
73834             arg61,
73835             arg62,
73836             arg63,
73837             arg64,
73838             arg65,
73839             arg66,
73840             arg67,
73841             arg68,
73842             arg69,
73843             arg70,
73844             arg71,
73845             arg72,
73846             arg73,
73847             arg74,
73848             arg75,
73849             arg76,
73850             arg77,
73851             arg78,
73852             arg79,
73853             arg80,
73854             arg81,
73855             arg82,
73856             arg83,
73857             arg84,
73858             arg85,
73859             arg86,
73860             arg87,
73861             arg88,
73862             arg89,
73863             arg90,
73864             arg91,
73865             arg92,
73866             arg93,
73867             arg94,
73868             arg95,
73869             arg96,
73870             arg97,
73871             arg98,
73872             arg99,
73873             arg100,
73874             arg101,
73875             arg102,
73876             arg103,
73877             arg104,
73878             arg105,
73879             arg106,
73880             arg107,
73881             arg108,
73882             arg109,
73883             arg110,
73884             arg111,
73885             arg112,
73886             arg113,
73887             arg114,
73888             arg115,
73889             arg116,
73890             arg117,
73891             arg118,
73892             arg119,
73893             arg120,
73894             arg121,
73895             arg122,
73896             arg123,
73897             arg124,
73898             arg125);
73899     }
73900 
73901     operator type_ ()    
73902     {
73903         return type_(*this);
73904     }
73905 
73906 };
73907 
73908 template<
73909     typename T0,
73910     typename T1,
73911     typename T2,
73912     typename T3,
73913     typename T4,
73914     typename T5,
73915     typename T6,
73916     typename T7,
73917     typename T8,
73918     typename T9,
73919     typename T10,
73920     typename T11,
73921     typename T12,
73922     typename T13,
73923     typename T14,
73924     typename T15,
73925     typename T16,
73926     typename T17,
73927     typename T18,
73928     typename T19,
73929     typename T20,
73930     typename T21,
73931     typename T22,
73932     typename T23,
73933     typename T24,
73934     typename T25,
73935     typename T26,
73936     typename T27,
73937     typename T28,
73938     typename T29,
73939     typename T30,
73940     typename T31,
73941     typename T32,
73942     typename T33,
73943     typename T34,
73944     typename T35,
73945     typename T36,
73946     typename T37,
73947     typename T38,
73948     typename T39,
73949     typename T40,
73950     typename T41,
73951     typename T42,
73952     typename T43,
73953     typename T44,
73954     typename T45,
73955     typename T46,
73956     typename T47,
73957     typename T48,
73958     typename T49,
73959     typename T50,
73960     typename T51,
73961     typename T52,
73962     typename T53,
73963     typename T54,
73964     typename T55,
73965     typename T56,
73966     typename T57,
73967     typename T58,
73968     typename T59,
73969     typename T60,
73970     typename T61,
73971     typename T62,
73972     typename T63,
73973     typename T64,
73974     typename T65,
73975     typename T66,
73976     typename T67,
73977     typename T68,
73978     typename T69,
73979     typename T70,
73980     typename T71,
73981     typename T72,
73982     typename T73,
73983     typename T74,
73984     typename T75,
73985     typename T76,
73986     typename T77,
73987     typename T78,
73988     typename T79,
73989     typename T80,
73990     typename T81,
73991     typename T82,
73992     typename T83,
73993     typename T84,
73994     typename T85,
73995     typename T86,
73996     typename T87,
73997     typename T88,
73998     typename T89,
73999     typename T90,
74000     typename T91,
74001     typename T92,
74002     typename T93,
74003     typename T94,
74004     typename T95,
74005     typename T96,
74006     typename T97,
74007     typename T98,
74008     typename T99,
74009     typename T100,
74010     typename T101,
74011     typename T102,
74012     typename T103,
74013     typename T104,
74014     typename T105,
74015     typename T106,
74016     typename T107,
74017     typename T108,
74018     typename T109,
74019     typename T110,
74020     typename T111,
74021     typename T112,
74022     typename T113,
74023     typename T114,
74024     typename T115,
74025     typename T116,
74026     typename T117,
74027     typename T118,
74028     typename T119,
74029     typename T120,
74030     typename T121,
74031     typename T122,
74032     typename T123,
74033     typename T124,
74034     typename T125,
74035     typename T126>
74036 struct functionImplementation_<
74037     T0,
74038     T1,
74039     T2,
74040     T3,
74041     T4,
74042     T5,
74043     T6,
74044     T7,
74045     T8,
74046     T9,
74047     T10,
74048     T11,
74049     T12,
74050     T13,
74051     T14,
74052     T15,
74053     T16,
74054     T17,
74055     T18,
74056     T19,
74057     T20,
74058     T21,
74059     T22,
74060     T23,
74061     T24,
74062     T25,
74063     T26,
74064     T27,
74065     T28,
74066     T29,
74067     T30,
74068     T31,
74069     T32,
74070     T33,
74071     T34,
74072     T35,
74073     T36,
74074     T37,
74075     T38,
74076     T39,
74077     T40,
74078     T41,
74079     T42,
74080     T43,
74081     T44,
74082     T45,
74083     T46,
74084     T47,
74085     T48,
74086     T49,
74087     T50,
74088     T51,
74089     T52,
74090     T53,
74091     T54,
74092     T55,
74093     T56,
74094     T57,
74095     T58,
74096     T59,
74097     T60,
74098     T61,
74099     T62,
74100     T63,
74101     T64,
74102     T65,
74103     T66,
74104     T67,
74105     T68,
74106     T69,
74107     T70,
74108     T71,
74109     T72,
74110     T73,
74111     T74,
74112     T75,
74113     T76,
74114     T77,
74115     T78,
74116     T79,
74117     T80,
74118     T81,
74119     T82,
74120     T83,
74121     T84,
74122     T85,
74123     T86,
74124     T87,
74125     T88,
74126     T89,
74127     T90,
74128     T91,
74129     T92,
74130     T93,
74131     T94,
74132     T95,
74133     T96,
74134     T97,
74135     T98,
74136     T99,
74137     T100,
74138     T101,
74139     T102,
74140     T103,
74141     T104,
74142     T105,
74143     T106,
74144     T107,
74145     T108,
74146     T109,
74147     T110,
74148     T111,
74149     T112,
74150     T113,
74151     T114,
74152     T115,
74153     T116,
74154     T117,
74155     T118,
74156     T119,
74157     T120,
74158     T121,
74159     T122,
74160     T123,
74161     T124,
74162     T125,
74163     T126,
74164     NullType>
74165 {
74166     typedef detail::KernelFunctorGlobal<
74167         T0,
74168         T1,
74169         T2,
74170         T3,
74171         T4,
74172         T5,
74173         T6,
74174         T7,
74175         T8,
74176         T9,
74177         T10,
74178         T11,
74179         T12,
74180         T13,
74181         T14,
74182         T15,
74183         T16,
74184         T17,
74185         T18,
74186         T19,
74187         T20,
74188         T21,
74189         T22,
74190         T23,
74191         T24,
74192         T25,
74193         T26,
74194         T27,
74195         T28,
74196         T29,
74197         T30,
74198         T31,
74199         T32,
74200         T33,
74201         T34,
74202         T35,
74203         T36,
74204         T37,
74205         T38,
74206         T39,
74207         T40,
74208         T41,
74209         T42,
74210         T43,
74211         T44,
74212         T45,
74213         T46,
74214         T47,
74215         T48,
74216         T49,
74217         T50,
74218         T51,
74219         T52,
74220         T53,
74221         T54,
74222         T55,
74223         T56,
74224         T57,
74225         T58,
74226         T59,
74227         T60,
74228         T61,
74229         T62,
74230         T63,
74231         T64,
74232         T65,
74233         T66,
74234         T67,
74235         T68,
74236         T69,
74237         T70,
74238         T71,
74239         T72,
74240         T73,
74241         T74,
74242         T75,
74243         T76,
74244         T77,
74245         T78,
74246         T79,
74247         T80,
74248         T81,
74249         T82,
74250         T83,
74251         T84,
74252         T85,
74253         T86,
74254         T87,
74255         T88,
74256         T89,
74257         T90,
74258         T91,
74259         T92,
74260         T93,
74261         T94,
74262         T95,
74263         T96,
74264         T97,
74265         T98,
74266         T99,
74267         T100,
74268         T101,
74269         T102,
74270         T103,
74271         T104,
74272         T105,
74273         T106,
74274         T107,
74275         T108,
74276         T109,
74277         T110,
74278         T111,
74279         T112,
74280         T113,
74281         T114,
74282         T115,
74283         T116,
74284         T117,
74285         T118,
74286         T119,
74287         T120,
74288         T121,
74289         T122,
74290         T123,
74291         T124,
74292         T125,
74293         T126,
74294         NullType> FunctorType;
74295 
74296     FunctorType functor_;
74297 
74298     functionImplementation_(const FunctorType &functor) :
74299         functor_(functor)
74300     {
74301     }
74302         
74303     typedef std::tr1::function<Event (
74304         const EnqueueArgs&,
74305         T0,
74306         T1,
74307         T2,
74308         T3,
74309         T4,
74310         T5,
74311         T6,
74312         T7,
74313         T8,
74314         T9,
74315         T10,
74316         T11,
74317         T12,
74318         T13,
74319         T14,
74320         T15,
74321         T16,
74322         T17,
74323         T18,
74324         T19,
74325         T20,
74326         T21,
74327         T22,
74328         T23,
74329         T24,
74330         T25,
74331         T26,
74332         T27,
74333         T28,
74334         T29,
74335         T30,
74336         T31,
74337         T32,
74338         T33,
74339         T34,
74340         T35,
74341         T36,
74342         T37,
74343         T38,
74344         T39,
74345         T40,
74346         T41,
74347         T42,
74348         T43,
74349         T44,
74350         T45,
74351         T46,
74352         T47,
74353         T48,
74354         T49,
74355         T50,
74356         T51,
74357         T52,
74358         T53,
74359         T54,
74360         T55,
74361         T56,
74362         T57,
74363         T58,
74364         T59,
74365         T60,
74366         T61,
74367         T62,
74368         T63,
74369         T64,
74370         T65,
74371         T66,
74372         T67,
74373         T68,
74374         T69,
74375         T70,
74376         T71,
74377         T72,
74378         T73,
74379         T74,
74380         T75,
74381         T76,
74382         T77,
74383         T78,
74384         T79,
74385         T80,
74386         T81,
74387         T82,
74388         T83,
74389         T84,
74390         T85,
74391         T86,
74392         T87,
74393         T88,
74394         T89,
74395         T90,
74396         T91,
74397         T92,
74398         T93,
74399         T94,
74400         T95,
74401         T96,
74402         T97,
74403         T98,
74404         T99,
74405         T100,
74406         T101,
74407         T102,
74408         T103,
74409         T104,
74410         T105,
74411         T106,
74412         T107,
74413         T108,
74414         T109,
74415         T110,
74416         T111,
74417         T112,
74418         T113,
74419         T114,
74420         T115,
74421         T116,
74422         T117,
74423         T118,
74424         T119,
74425         T120,
74426         T121,
74427         T122,
74428         T123,
74429         T124,
74430         T125,
74431         T126)> type_;
74432 
74433     Event operator()(const EnqueueArgs& enqueueArgs,
74434         T0 arg0,
74435         T1 arg1,
74436         T2 arg2,
74437         T3 arg3,
74438         T4 arg4,
74439         T5 arg5,
74440         T6 arg6,
74441         T7 arg7,
74442         T8 arg8,
74443         T9 arg9,
74444         T10 arg10,
74445         T11 arg11,
74446         T12 arg12,
74447         T13 arg13,
74448         T14 arg14,
74449         T15 arg15,
74450         T16 arg16,
74451         T17 arg17,
74452         T18 arg18,
74453         T19 arg19,
74454         T20 arg20,
74455         T21 arg21,
74456         T22 arg22,
74457         T23 arg23,
74458         T24 arg24,
74459         T25 arg25,
74460         T26 arg26,
74461         T27 arg27,
74462         T28 arg28,
74463         T29 arg29,
74464         T30 arg30,
74465         T31 arg31,
74466         T32 arg32,
74467         T33 arg33,
74468         T34 arg34,
74469         T35 arg35,
74470         T36 arg36,
74471         T37 arg37,
74472         T38 arg38,
74473         T39 arg39,
74474         T40 arg40,
74475         T41 arg41,
74476         T42 arg42,
74477         T43 arg43,
74478         T44 arg44,
74479         T45 arg45,
74480         T46 arg46,
74481         T47 arg47,
74482         T48 arg48,
74483         T49 arg49,
74484         T50 arg50,
74485         T51 arg51,
74486         T52 arg52,
74487         T53 arg53,
74488         T54 arg54,
74489         T55 arg55,
74490         T56 arg56,
74491         T57 arg57,
74492         T58 arg58,
74493         T59 arg59,
74494         T60 arg60,
74495         T61 arg61,
74496         T62 arg62,
74497         T63 arg63,
74498         T64 arg64,
74499         T65 arg65,
74500         T66 arg66,
74501         T67 arg67,
74502         T68 arg68,
74503         T69 arg69,
74504         T70 arg70,
74505         T71 arg71,
74506         T72 arg72,
74507         T73 arg73,
74508         T74 arg74,
74509         T75 arg75,
74510         T76 arg76,
74511         T77 arg77,
74512         T78 arg78,
74513         T79 arg79,
74514         T80 arg80,
74515         T81 arg81,
74516         T82 arg82,
74517         T83 arg83,
74518         T84 arg84,
74519         T85 arg85,
74520         T86 arg86,
74521         T87 arg87,
74522         T88 arg88,
74523         T89 arg89,
74524         T90 arg90,
74525         T91 arg91,
74526         T92 arg92,
74527         T93 arg93,
74528         T94 arg94,
74529         T95 arg95,
74530         T96 arg96,
74531         T97 arg97,
74532         T98 arg98,
74533         T99 arg99,
74534         T100 arg100,
74535         T101 arg101,
74536         T102 arg102,
74537         T103 arg103,
74538         T104 arg104,
74539         T105 arg105,
74540         T106 arg106,
74541         T107 arg107,
74542         T108 arg108,
74543         T109 arg109,
74544         T110 arg110,
74545         T111 arg111,
74546         T112 arg112,
74547         T113 arg113,
74548         T114 arg114,
74549         T115 arg115,
74550         T116 arg116,
74551         T117 arg117,
74552         T118 arg118,
74553         T119 arg119,
74554         T120 arg120,
74555         T121 arg121,
74556         T122 arg122,
74557         T123 arg123,
74558         T124 arg124,
74559         T125 arg125,
74560         T126 arg126)
74561     {
74562         return functor_(
74563             enqueueArgs,
74564             arg0,
74565             arg1,
74566             arg2,
74567             arg3,
74568             arg4,
74569             arg5,
74570             arg6,
74571             arg7,
74572             arg8,
74573             arg9,
74574             arg10,
74575             arg11,
74576             arg12,
74577             arg13,
74578             arg14,
74579             arg15,
74580             arg16,
74581             arg17,
74582             arg18,
74583             arg19,
74584             arg20,
74585             arg21,
74586             arg22,
74587             arg23,
74588             arg24,
74589             arg25,
74590             arg26,
74591             arg27,
74592             arg28,
74593             arg29,
74594             arg30,
74595             arg31,
74596             arg32,
74597             arg33,
74598             arg34,
74599             arg35,
74600             arg36,
74601             arg37,
74602             arg38,
74603             arg39,
74604             arg40,
74605             arg41,
74606             arg42,
74607             arg43,
74608             arg44,
74609             arg45,
74610             arg46,
74611             arg47,
74612             arg48,
74613             arg49,
74614             arg50,
74615             arg51,
74616             arg52,
74617             arg53,
74618             arg54,
74619             arg55,
74620             arg56,
74621             arg57,
74622             arg58,
74623             arg59,
74624             arg60,
74625             arg61,
74626             arg62,
74627             arg63,
74628             arg64,
74629             arg65,
74630             arg66,
74631             arg67,
74632             arg68,
74633             arg69,
74634             arg70,
74635             arg71,
74636             arg72,
74637             arg73,
74638             arg74,
74639             arg75,
74640             arg76,
74641             arg77,
74642             arg78,
74643             arg79,
74644             arg80,
74645             arg81,
74646             arg82,
74647             arg83,
74648             arg84,
74649             arg85,
74650             arg86,
74651             arg87,
74652             arg88,
74653             arg89,
74654             arg90,
74655             arg91,
74656             arg92,
74657             arg93,
74658             arg94,
74659             arg95,
74660             arg96,
74661             arg97,
74662             arg98,
74663             arg99,
74664             arg100,
74665             arg101,
74666             arg102,
74667             arg103,
74668             arg104,
74669             arg105,
74670             arg106,
74671             arg107,
74672             arg108,
74673             arg109,
74674             arg110,
74675             arg111,
74676             arg112,
74677             arg113,
74678             arg114,
74679             arg115,
74680             arg116,
74681             arg117,
74682             arg118,
74683             arg119,
74684             arg120,
74685             arg121,
74686             arg122,
74687             arg123,
74688             arg124,
74689             arg125,
74690             arg126);
74691     }
74692 
74693     operator type_ ()    
74694     {
74695         return type_(*this);
74696     }
74697 
74698 };
74699 
74700 
74701 
74702 
74703 
74704 } // namespace detail
74705 
74706 //----------------------------------------------------------------------------------------------
74707 
74708 template <
74709    typename T0,   typename T1 = detail::NullType,   typename T2 = detail::NullType,
74710    typename T3 = detail::NullType,   typename T4 = detail::NullType,
74711    typename T5 = detail::NullType,   typename T6 = detail::NullType,
74712    typename T7 = detail::NullType,   typename T8 = detail::NullType,
74713    typename T9 = detail::NullType,   typename T10 = detail::NullType,
74714    typename T11 = detail::NullType,   typename T12 = detail::NullType,
74715    typename T13 = detail::NullType,   typename T14 = detail::NullType,
74716    typename T15 = detail::NullType,   typename T16 = detail::NullType,
74717    typename T17 = detail::NullType,   typename T18 = detail::NullType,
74718    typename T19 = detail::NullType,   typename T20 = detail::NullType,
74719    typename T21 = detail::NullType,   typename T22 = detail::NullType,
74720    typename T23 = detail::NullType,   typename T24 = detail::NullType,
74721    typename T25 = detail::NullType,   typename T26 = detail::NullType,
74722    typename T27 = detail::NullType,   typename T28 = detail::NullType,
74723    typename T29 = detail::NullType,   typename T30 = detail::NullType,
74724    typename T31 = detail::NullType,   typename T32 = detail::NullType,
74725    typename T33 = detail::NullType,   typename T34 = detail::NullType,
74726    typename T35 = detail::NullType,   typename T36 = detail::NullType,
74727    typename T37 = detail::NullType,   typename T38 = detail::NullType,
74728    typename T39 = detail::NullType,   typename T40 = detail::NullType,
74729    typename T41 = detail::NullType,   typename T42 = detail::NullType,
74730    typename T43 = detail::NullType,   typename T44 = detail::NullType,
74731    typename T45 = detail::NullType,   typename T46 = detail::NullType,
74732    typename T47 = detail::NullType,   typename T48 = detail::NullType,
74733    typename T49 = detail::NullType,   typename T50 = detail::NullType,
74734    typename T51 = detail::NullType,   typename T52 = detail::NullType,
74735    typename T53 = detail::NullType,   typename T54 = detail::NullType,
74736    typename T55 = detail::NullType,   typename T56 = detail::NullType,
74737    typename T57 = detail::NullType,   typename T58 = detail::NullType,
74738    typename T59 = detail::NullType,   typename T60 = detail::NullType,
74739    typename T61 = detail::NullType,   typename T62 = detail::NullType,
74740    typename T63 = detail::NullType,   typename T64 = detail::NullType,
74741    typename T65 = detail::NullType,   typename T66 = detail::NullType,
74742    typename T67 = detail::NullType,   typename T68 = detail::NullType,
74743    typename T69 = detail::NullType,   typename T70 = detail::NullType,
74744    typename T71 = detail::NullType,   typename T72 = detail::NullType,
74745    typename T73 = detail::NullType,   typename T74 = detail::NullType,
74746    typename T75 = detail::NullType,   typename T76 = detail::NullType,
74747    typename T77 = detail::NullType,   typename T78 = detail::NullType,
74748    typename T79 = detail::NullType,   typename T80 = detail::NullType,
74749    typename T81 = detail::NullType,   typename T82 = detail::NullType,
74750    typename T83 = detail::NullType,   typename T84 = detail::NullType,
74751    typename T85 = detail::NullType,   typename T86 = detail::NullType,
74752    typename T87 = detail::NullType,   typename T88 = detail::NullType,
74753    typename T89 = detail::NullType,   typename T90 = detail::NullType,
74754    typename T91 = detail::NullType,   typename T92 = detail::NullType,
74755    typename T93 = detail::NullType,   typename T94 = detail::NullType,
74756    typename T95 = detail::NullType,   typename T96 = detail::NullType,
74757    typename T97 = detail::NullType,   typename T98 = detail::NullType,
74758    typename T99 = detail::NullType,   typename T100 = detail::NullType,
74759    typename T101 = detail::NullType,   typename T102 = detail::NullType,
74760    typename T103 = detail::NullType,   typename T104 = detail::NullType,
74761    typename T105 = detail::NullType,   typename T106 = detail::NullType,
74762    typename T107 = detail::NullType,   typename T108 = detail::NullType,
74763    typename T109 = detail::NullType,   typename T110 = detail::NullType,
74764    typename T111 = detail::NullType,   typename T112 = detail::NullType,
74765    typename T113 = detail::NullType,   typename T114 = detail::NullType,
74766    typename T115 = detail::NullType,   typename T116 = detail::NullType,
74767    typename T117 = detail::NullType,   typename T118 = detail::NullType,
74768    typename T119 = detail::NullType,   typename T120 = detail::NullType,
74769    typename T121 = detail::NullType,   typename T122 = detail::NullType,
74770    typename T123 = detail::NullType,   typename T124 = detail::NullType,
74771    typename T125 = detail::NullType,   typename T126 = detail::NullType,
74772    typename T127 = detail::NullType>
74773 struct make_kernel :
74774     public detail::functionImplementation_<
74775                T0,   T1,   T2,   T3,
74776                T4,   T5,   T6,   T7,
74777                T8,   T9,   T10,   T11,
74778                T12,   T13,   T14,   T15,
74779                T16,   T17,   T18,   T19,
74780                T20,   T21,   T22,   T23,
74781                T24,   T25,   T26,   T27,
74782                T28,   T29,   T30,   T31,
74783                T32,   T33,   T34,   T35,
74784                T36,   T37,   T38,   T39,
74785                T40,   T41,   T42,   T43,
74786                T44,   T45,   T46,   T47,
74787                T48,   T49,   T50,   T51,
74788                T52,   T53,   T54,   T55,
74789                T56,   T57,   T58,   T59,
74790                T60,   T61,   T62,   T63,
74791                T64,   T65,   T66,   T67,
74792                T68,   T69,   T70,   T71,
74793                T72,   T73,   T74,   T75,
74794                T76,   T77,   T78,   T79,
74795                T80,   T81,   T82,   T83,
74796                T84,   T85,   T86,   T87,
74797                T88,   T89,   T90,   T91,
74798                T92,   T93,   T94,   T95,
74799                T96,   T97,   T98,   T99,
74800                T100,   T101,   T102,   T103,
74801                T104,   T105,   T106,   T107,
74802                T108,   T109,   T110,   T111,
74803                T112,   T113,   T114,   T115,
74804                T116,   T117,   T118,   T119,
74805                T120,   T121,   T122,   T123,
74806                T124,   T125,   T126,   T127>
74807 {
74808 public:
74809     typedef detail::KernelFunctorGlobal<             
74810                T0,   T1,   T2,   T3,
74811                T4,   T5,   T6,   T7,
74812                T8,   T9,   T10,   T11,
74813                T12,   T13,   T14,   T15,
74814                T16,   T17,   T18,   T19,
74815                T20,   T21,   T22,   T23,
74816                T24,   T25,   T26,   T27,
74817                T28,   T29,   T30,   T31,
74818                T32,   T33,   T34,   T35,
74819                T36,   T37,   T38,   T39,
74820                T40,   T41,   T42,   T43,
74821                T44,   T45,   T46,   T47,
74822                T48,   T49,   T50,   T51,
74823                T52,   T53,   T54,   T55,
74824                T56,   T57,   T58,   T59,
74825                T60,   T61,   T62,   T63,
74826                T64,   T65,   T66,   T67,
74827                T68,   T69,   T70,   T71,
74828                T72,   T73,   T74,   T75,
74829                T76,   T77,   T78,   T79,
74830                T80,   T81,   T82,   T83,
74831                T84,   T85,   T86,   T87,
74832                T88,   T89,   T90,   T91,
74833                T92,   T93,   T94,   T95,
74834                T96,   T97,   T98,   T99,
74835                T100,   T101,   T102,   T103,
74836                T104,   T105,   T106,   T107,
74837                T108,   T109,   T110,   T111,
74838                T112,   T113,   T114,   T115,
74839                T116,   T117,   T118,   T119,
74840                T120,   T121,   T122,   T123,
74841                T124,   T125,   T126,   T127> FunctorType;
74842 
74843     make_kernel(
74844         const Program& program,
74845         const STRING_CLASS name,
74846         cl_int * err = NULL) :
74847            detail::functionImplementation_<
74848                     T0,   T1,   T2,   T3,
74849                        T4,   T5,   T6,   T7,
74850                        T8,   T9,   T10,   T11,
74851                        T12,   T13,   T14,   T15,
74852                        T16,   T17,   T18,   T19,
74853                        T20,   T21,   T22,   T23,
74854                        T24,   T25,   T26,   T27,
74855                        T28,   T29,   T30,   T31,
74856                        T32,   T33,   T34,   T35,
74857                        T36,   T37,   T38,   T39,
74858                        T40,   T41,   T42,   T43,
74859                        T44,   T45,   T46,   T47,
74860                        T48,   T49,   T50,   T51,
74861                        T52,   T53,   T54,   T55,
74862                        T56,   T57,   T58,   T59,
74863                        T60,   T61,   T62,   T63,
74864                        T64,   T65,   T66,   T67,
74865                        T68,   T69,   T70,   T71,
74866                        T72,   T73,   T74,   T75,
74867                        T76,   T77,   T78,   T79,
74868                        T80,   T81,   T82,   T83,
74869                        T84,   T85,   T86,   T87,
74870                        T88,   T89,   T90,   T91,
74871                        T92,   T93,   T94,   T95,
74872                        T96,   T97,   T98,   T99,
74873                        T100,   T101,   T102,   T103,
74874                        T104,   T105,   T106,   T107,
74875                        T108,   T109,   T110,   T111,
74876                        T112,   T113,   T114,   T115,
74877                        T116,   T117,   T118,   T119,
74878                        T120,   T121,   T122,   T123,
74879                        T124,   T125,   T126,   T127>(
74880             FunctorType(program, name, err)) 
74881     {}
74882 
74883     make_kernel(
74884         const Kernel kernel,
74885         cl_int * err = NULL) :
74886            detail::functionImplementation_<
74887                     T0,   T1,   T2,   T3,
74888                        T4,   T5,   T6,   T7,
74889                        T8,   T9,   T10,   T11,
74890                        T12,   T13,   T14,   T15,
74891                        T16,   T17,   T18,   T19,
74892                        T20,   T21,   T22,   T23,
74893                        T24,   T25,   T26,   T27,
74894                        T28,   T29,   T30,   T31,
74895                        T32,   T33,   T34,   T35,
74896                        T36,   T37,   T38,   T39,
74897                        T40,   T41,   T42,   T43,
74898                        T44,   T45,   T46,   T47,
74899                        T48,   T49,   T50,   T51,
74900                        T52,   T53,   T54,   T55,
74901                        T56,   T57,   T58,   T59,
74902                        T60,   T61,   T62,   T63,
74903                        T64,   T65,   T66,   T67,
74904                        T68,   T69,   T70,   T71,
74905                        T72,   T73,   T74,   T75,
74906                        T76,   T77,   T78,   T79,
74907                        T80,   T81,   T82,   T83,
74908                        T84,   T85,   T86,   T87,
74909                        T88,   T89,   T90,   T91,
74910                        T92,   T93,   T94,   T95,
74911                        T96,   T97,   T98,   T99,
74912                        T100,   T101,   T102,   T103,
74913                        T104,   T105,   T106,   T107,
74914                        T108,   T109,   T110,   T111,
74915                        T112,   T113,   T114,   T115,
74916                        T116,   T117,   T118,   T119,
74917                        T120,   T121,   T122,   T123,
74918                        T124,   T125,   T126,   T127>(
74919             FunctorType(kernel, err)) 
74920     {}    
74921 };
74922 
74923 #endif
74924 
74925 //----------------------------------------------------------------------------------------------------------------------
74926 
74927 #undef __ERR_STR
74928 #if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
74929 #undef __GET_DEVICE_INFO_ERR
74930 #undef __GET_PLATFORM_INFO_ERR
74931 #undef __GET_DEVICE_IDS_ERR
74932 #undef __GET_CONTEXT_INFO_ERR
74933 #undef __GET_EVENT_INFO_ERR
74934 #undef __GET_EVENT_PROFILE_INFO_ERR
74935 #undef __GET_MEM_OBJECT_INFO_ERR
74936 #undef __GET_IMAGE_INFO_ERR
74937 #undef __GET_SAMPLER_INFO_ERR
74938 #undef __GET_KERNEL_INFO_ERR
74939 #undef __GET_KERNEL_WORK_GROUP_INFO_ERR
74940 #undef __GET_PROGRAM_INFO_ERR
74941 #undef __GET_PROGRAM_BUILD_INFO_ERR
74942 #undef __GET_COMMAND_QUEUE_INFO_ERR
74943 
74944 #undef __CREATE_CONTEXT_ERR
74945 #undef __CREATE_CONTEXT_FROM_TYPE_ERR
74946 #undef __GET_SUPPORTED_IMAGE_FORMATS_ERR
74947 
74948 #undef __CREATE_BUFFER_ERR
74949 #undef __CREATE_SUBBUFFER_ERR
74950 #undef __CREATE_IMAGE2D_ERR
74951 #undef __CREATE_IMAGE3D_ERR
74952 #undef __CREATE_SAMPLER_ERR
74953 #undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR
74954 
74955 #undef __CREATE_USER_EVENT_ERR
74956 #undef __SET_USER_EVENT_STATUS_ERR
74957 #undef __SET_EVENT_CALLBACK_ERR
74958 
74959 #undef __WAIT_FOR_EVENTS_ERR
74960 
74961 #undef __CREATE_KERNEL_ERR
74962 #undef __SET_KERNEL_ARGS_ERR
74963 #undef __CREATE_PROGRAM_WITH_SOURCE_ERR
74964 #undef __CREATE_PROGRAM_WITH_BINARY_ERR
74965 #undef __BUILD_PROGRAM_ERR
74966 #undef __CREATE_KERNELS_IN_PROGRAM_ERR
74967 
74968 #undef __CREATE_COMMAND_QUEUE_ERR
74969 #undef __SET_COMMAND_QUEUE_PROPERTY_ERR
74970 #undef __ENQUEUE_READ_BUFFER_ERR
74971 #undef __ENQUEUE_WRITE_BUFFER_ERR
74972 #undef __ENQUEUE_READ_BUFFER_RECT_ERR
74973 #undef __ENQUEUE_WRITE_BUFFER_RECT_ERR
74974 #undef __ENQEUE_COPY_BUFFER_ERR
74975 #undef __ENQEUE_COPY_BUFFER_RECT_ERR
74976 #undef __ENQUEUE_READ_IMAGE_ERR
74977 #undef __ENQUEUE_WRITE_IMAGE_ERR
74978 #undef __ENQUEUE_COPY_IMAGE_ERR
74979 #undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR
74980 #undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR
74981 #undef __ENQUEUE_MAP_BUFFER_ERR
74982 #undef __ENQUEUE_MAP_IMAGE_ERR
74983 #undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR
74984 #undef __ENQUEUE_NDRANGE_KERNEL_ERR
74985 #undef __ENQUEUE_TASK_ERR
74986 #undef __ENQUEUE_NATIVE_KERNEL
74987 
74988 #undef __UNLOAD_COMPILER_ERR
74989 #endif //__CL_USER_OVERRIDE_ERROR_STRINGS
74990 
74991 #undef __GET_INFO_HELPER_WITH_RETAIN
74992 
74993 // Extensions
74994 #undef __INIT_CL_EXT_FCN_PTR
74995 #undef __CREATE_SUB_DEVICES
74996 
74997 #if defined(USE_CL_DEVICE_FISSION)
74998 #undef __PARAM_NAME_DEVICE_FISSION
74999 #endif // USE_CL_DEVICE_FISSION
75000 
75001 #undef __DEFAULT_NOT_INITIALIZED 
75002 #undef __DEFAULT_BEING_INITIALIZED 
75003 #undef __DEFAULT_INITIALIZED
75004 
75005 } // namespace cl
75006 
75007 #ifdef _WIN32
75008 #pragma pop_macro("max")
75009 #endif // _WIN32
75010 
75011 #endif // CL_HPP_
 All Classes Namespaces Files Functions Variables Typedefs Defines