 		if (channel < N)
 			return val.val[channel] == value;
 		return false;
+	}
+
+	__host__ __device__ bool operator()( const thrust::tuple<T, T, T>& val)
+	{
+		if (channel == 0)
+			return thrust::get<0>(val) == value;
+		if (channel == 1)
+			return thrust::get<1>(val) == value;
+		if (channel == 2)
+			return thrust::get<2>(val) == value;
+	}
+};
+template<typename T> struct pred_greater
+{
+	T value;
+	__host__ __device__ pred_greater(T value_) : value(value_){}
+	__host__ __device__ bool operator()(const T& val) const
+	{
+		return val > value;
 	}
 };
 

		auto count = thrust::count(GpuMatBeginItr<int>(d_value), GpuMatEndItr<int>(d_value), 15);
		std::cout << count << std::endl;
	}

	


	return 0;
}

#include "Thrust_interop.hpp"
#include <opencv2/core/cuda_stream_accessor.hpp>

#include <thrust/transform.h>
#include <thrust/random.h>
#include <thrust/sort.h>
#include <thrust/system/cuda/execution_policy.h>
struct prg
{
	float a, b;

	__host__ __device__
		prg(float _a = 0.f, float _b = 1.f) : a(_a), b(_b) {};

