namespace cv::flann

namespace flann {

// structs

struct AutotunedIndexParams;
struct CompositeIndexParams;

template <>
struct CvType<short>;

template <>
struct CvType<unsigned char>;

template <>
struct CvType<float>;

template <>
struct CvType<unsigned short>;

template <>
struct CvType<char>;

template <typename T>
struct CvType;

template <>
struct CvType<double>;

struct HierarchicalClusteringIndexParams;
struct IndexParams;
struct KDTreeIndexParams;
struct KMeansIndexParams;
struct LinearIndexParams;
struct LshIndexParams;
struct SavedIndexParams;
struct SearchParams;

// classes

template <typename Distance>
class GenericIndex;

class Index;

template <typename T>
class Index_;

// global functions

template <typename Distance>
int
hierarchicalClustering(
    const Mat& features,
    Mat& centers,
    const ::cvflann::KMeansIndexParams& params,
    Distance d = Distance()
    );

template <
    typename ELEM_TYPE,
    typename DIST_TYPE
    >
int
hierarchicalClustering(
    const Mat& features,
    Mat& centers,
    const ::cvflann::KMeansIndexParams& params
    );

} // namespace flann