added begin/and with Thrust iterators for Device classes
authorAnatoly Baksheev <no@email>
Thu, 2 Jun 2011 12:38:50 +0000 (12:38 +0000)
committerAnatoly Baksheev <no@email>
Thu, 2 Jun 2011 12:38:50 +0000 (12:38 +0000)
modules/gpu/include/opencv2/gpu/devmem2d.hpp

index 7341e2f..b811371 100644 (file)
 #ifndef __OPENCV_GPU_DEVMEM2D_HPP__\r
 #define __OPENCV_GPU_DEVMEM2D_HPP__\r
 \r
+#if defined(__DEVCLASES_ADD_THRUST_BEGIN_END__)\r
+    #include "thrust/device_ptr.h"\r
+#endif\r
+\r
+\r
 namespace cv\r
 {    \r
     namespace gpu\r
@@ -55,6 +60,7 @@ namespace cv
 #else\r
     #define __CV_GPU_HOST_DEVICE__\r
 #endif\r
+\r
         template <bool expr> struct StaticAssert;\r
         template <> struct StaticAssert<true> {static __CV_GPU_HOST_DEVICE__ void check(){}};        \r
         \r
@@ -80,6 +86,11 @@ namespace cv
             __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; }\r
             __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return (T*)( (char*)data + y * step ); }\r
             __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)data + y * step ); }            \r
+\r
+#if defined(__DEVCLASES_ADD_THRUST_BEGIN_END__)    \r
+            thrust::device_ptr<T> begin() const { return thrust::device_ptr<T>(data); }\r
+            thrust::device_ptr<T> end() const { return thrust::device_ptr<T>(data) + cols * rows; }\r
+#endif\r
         };\r
  \r
         template<typename T> struct PtrStep_\r
@@ -96,10 +107,12 @@ namespace cv
             __CV_GPU_HOST_DEVICE__ size_t elemSize() const { return elem_size; }\r
             __CV_GPU_HOST_DEVICE__ T* ptr(int y = 0) { return (T*)( (char*)data + y * step); }\r
             __CV_GPU_HOST_DEVICE__ const T* ptr(int y = 0) const { return (const T*)( (const char*)data + y * step); }\r
-        };\r
 \r
-        \r
-       \r
+#if defined(__DEVCLASES_ADD_THRUST_BEGIN_END__)    \r
+            thrust::device_ptr<T> begin() const { return thrust::device_ptr<T>(data); }\r
+#endif\r
+        };\r
+               \r
         template<typename T> struct PtrElemStep_ : public PtrStep_<T>\r
         {                   \r
             PtrElemStep_(const DevMem2D_<T>& mem) : PtrStep_<T>(mem) \r