namespace nanoflannΒΆ

namespace nanoflann {

// structs

struct IndexDist_Sorter;

template <class MatrixType, int DIM = -1, class Distance = nanoflann::metric_L2>
struct KDTreeEigenMatrixAdaptor;

struct KDTreeSingleIndexAdaptorParams;

template <class T, class DataSource, typename _DistanceType = T>
struct L1_Adaptor;

template <class T, class DataSource, typename _DistanceType = T>
struct L2_Adaptor;

template <class T, class DataSource, typename _DistanceType = T>
struct L2_Simple_Adaptor;

struct SearchParams;

template <typename T>
struct array_or_vector_selector<-1, T>;

template <int DIM, typename T>
struct array_or_vector_selector;

struct metric_L1;
struct metric_L2;
struct metric_L2_Simple;

// classes

template <typename T, std::size_t N>
class CArray;

template <
    typename Distance,
    class DatasetAdaptor,
    int DIM = -1,
    typename IndexType = size_t
    >
class KDTreeSingleIndexAdaptor;

template <
    typename DistanceType,
    typename IndexType = size_t,
    typename CountType = size_t
    >
class KNNResultSet;

class PooledAllocator;

template <typename DistanceType, typename IndexType = size_t>
class RadiusResultSet;

// global variables

const size_t WORDSIZE =16;
const size_t BLOCKSIZE =8192;

// global functions

template <typename T>
void save_value(
    FILE* stream,
    const T& value,
    size_t count = 1
    );

template <typename T>
void save_value(
    FILE* stream,
    const std::vector<T>& value
    );

template <typename T>
void load_value(
    FILE* stream,
    T& value,
    size_t count = 1
    );

template <typename T>
void load_value(
    FILE* stream,
    std::vector<T>& value
    );

template <typename T>
T* allocate(size_t count = 1);

} // namespace nanoflann