1 #ifndef FLANN_UTIL_CUDA_HEAP_H
2 #define FLANN_UTIL_CUDA_HEAP_H
36 __device__ __host__
void swap( T& x, T& y )
48 template <
class GreaterThan,
class RandomAccessIterator>
49 __host__ __device__
void
53 while( 2*begin+1 <
length ) {
54 size_t left = 2*begin+1;
55 size_t right = 2*begin+2;
57 if((left <
length)&& c(array[left], array[largest]) ) largest=left;
59 if((right <
length)&& c(array[right], array[largest]) ) largest=right;
61 if( largest != begin ) {
71 template <
class GreaterThan,
class RandomAccessIterator>
72 __host__ __device__
void
85 template <
class GreaterThan,
class RandomAccessIterator>
86 __host__ __device__
bool
89 for(
unsigned i=0; i<
length; i++ ) {
90 if((2*i+1 <
length)&& c(begin[2*i+1],begin[i]) )
return false;
91 if((2*i+2 <
length)&& c(begin[2*i+2],begin[i]) )
return false;
99 template <
class GreaterThan,
class RandomAccessIterator,
class RandomAccessIterator2>
100 __host__ __device__
void
104 while( 2*begin+1 <
length ) {
105 size_t left = 2*begin+1;
106 size_t right = 2*begin+2;
107 size_t largest=begin;
108 if((left <
length)&& c(key[left], key[largest]) ) largest=left;
110 if((right <
length)&& c(key[right], key[largest]) ) largest=right;
112 if( largest != begin ) {
123 template <
class GreaterThan,
class RandomAccessIterator,
class RandomAccessIterator2>
124 __host__ __device__
void
__host__ __device__ float length(float2 v)
__host__ __device__ void sift_down(RandomAccessIterator array, size_t begin, size_t length, GreaterThan c=GreaterThan())
__host__ __device__ void make_heap(RandomAccessIterator begin, size_t length, GreaterThan c=GreaterThan())
__host__ __device__ bool is_heap(RandomAccessIterator begin, size_t length, GreaterThan c=GreaterThan())
__device__ __host__ void swap(T &x, T &y)