30 #ifndef FLANN_ALL_INDICES_H_
31 #define FLANN_ALL_INDICES_H_
55 template<
bool,
typename T =
void>
struct enable_if{};
67 template <
typename T,
typename U>
79 #define HAS_MEMBER(member) \
80 template<typename T> \
84 template<typename C> static Yes test( typename C::member* ); \
85 template<typename C> static No test( ... ); \
86 enum { value = sizeof (test<T>(0))==sizeof(Yes) }; \
99 template <
typename Iterator1,
typename Iterator2>
105 template <
typename U,
typename V>
115 template<
template <
typename>
class Index,
typename Distance,
typename ElemType>
128 template <
template<
typename>
class Index,
typename Distance,
typename T>
135 template <
template<
typename>
class Index,
typename Distance,
typename T>
142 template<
typename Distance>
143 inline NNIndex<Distance>*
147 typedef typename Distance::ElementType ElementType;
151 switch (index_type) {
154 nnIndex = create_index_<LinearIndex,Distance,ElementType>(dataset,
params, distance);
157 nnIndex = create_index_<KDTreeSingleIndex,Distance,ElementType>(dataset,
params, distance);
160 nnIndex = create_index_<KDTreeIndex,Distance,ElementType>(dataset,
params, distance);
164 #ifdef FLANN_USE_CUDA
165 case FLANN_INDEX_KDTREE_CUDA:
166 nnIndex = create_index_<KDTreeCuda3dIndex,Distance,ElementType>(dataset,
params, distance);
171 nnIndex = create_index_<KMeansIndex,Distance,ElementType>(dataset,
params, distance);
174 nnIndex = create_index_<CompositeIndex,Distance,ElementType>(dataset,
params, distance);
177 nnIndex = create_index_<AutotunedIndex,Distance,ElementType>(dataset,
params, distance);
180 nnIndex = create_index_<HierarchicalClusteringIndex,Distance,ElementType>(dataset,
params, distance);
183 nnIndex = create_index_<LshIndex,Distance,ElementType>(dataset,
params, distance);
double Distance(const Point3D< Real > &p1, const Point3D< Real > &p2)
cmdLineReadable * params[]
#define HAS_MEMBER(member)
@ FLANN_INDEX_KDTREE_SINGLE
@ FLANN_INDEX_HIERARCHICAL
NNIndex< Distance > * create_index_by_type(const flann_algorithm_t index_type, const Matrix< typename Distance::ElementType > &dataset, const IndexParams ¶ms, const Distance &distance)
NNIndex< Distance > * create_index_(flann::Matrix< T > data, const flann::IndexParams ¶ms, const Distance &distance, typename enable_if< valid_combination< Index, Distance, T >::value, void >::type *=0)
std::map< std::string, any > IndexParams
ResultType accum_dist(const U &a, const V &b, int) const
ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType=-1) const