00001 #ifndef VIENNACL_TRAITS_HANDLE_HPP_ 00002 #define VIENNACL_TRAITS_HANDLE_HPP_ 00003 00004 /* ========================================================================= 00005 Copyright (c) 2010-2011, Institute for Microelectronics, 00006 Institute for Analysis and Scientific Computing, 00007 TU Wien. 00008 00009 ----------------- 00010 ViennaCL - The Vienna Computing Library 00011 ----------------- 00012 00013 Project Head: Karl Rupp rupp@iue.tuwien.ac.at 00014 00015 (A list of authors and contributors can be found in the PDF manual) 00016 00017 License: MIT (X11), see file LICENSE in the base directory 00018 ============================================================================= */ 00019 00024 #include <string> 00025 #include <fstream> 00026 #include <sstream> 00027 #include "viennacl/forwards.h" 00028 00029 #ifdef __APPLE__ 00030 #include <OpenCL/cl.h> 00031 #else 00032 #include <CL/cl.h> 00033 #endif 00034 00035 namespace viennacl 00036 { 00037 namespace traits 00038 { 00039 00040 // Returns the OpenCL handle of a ViennaCL object 00041 template <typename T> 00042 viennacl::ocl::handle<cl_mem> handle(T & obj) 00043 { 00044 return obj.handle(); 00045 } 00046 00047 template <typename T> 00048 viennacl::ocl::handle<cl_mem> handle(viennacl::vector_range<T> & obj) 00049 { 00050 return handle(obj.get()); 00051 } 00052 00053 template <typename T> 00054 viennacl::ocl::handle<cl_mem> handle(viennacl::vector_range<T> const & obj) 00055 { 00056 return handle(obj.get()); 00057 } 00058 00059 template <typename T> 00060 viennacl::ocl::handle<cl_mem> handle(viennacl::matrix_range<T> & obj) 00061 { 00062 return handle(obj.get()); 00063 } 00064 00065 template <typename T> 00066 viennacl::ocl::handle<cl_mem> handle(viennacl::matrix_range<T> const & obj) 00067 { 00068 return handle(obj.get()); 00069 } 00070 00071 } //namespace traits 00072 } //namespace viennacl 00073 00074 00075 #endif