%module{Algorithm::KNN::XS};
// Associate a perl class with a C++ class
%name{Algorithm::KNN::XS::LibANNInterface} class LibANNInterface
{
// can be called in Perl as Algorithm::KNN::LibANNInterface->new( ... );
LibANNInterface(std::vector<std::vector<double>> points, std::string dump, bool use_bd_tree, int bucket_size, int split_rule, int shrink_rule);
%name{set_annMaxPtsVisit}
void set_annMaxPtsVisit(int max_points);
%name{annkSearch}
std::vector<std::vector<double>> annkSearch(std::vector<double> query_point, int limit_neighbours, double epsilon);
%name{annkPriSearch}
std::vector<std::vector<double>> annkPriSearch(std::vector<double> query_point, int limit_neighbours, double epsilon);
%name{annkFRSearch}
std::vector<std::vector<double>> annkFRSearch(std::vector<double> query_point, int limit_neighbours, double epsilon, double radius);
%name{annCntNeighbours}
int annCntNeighbours(std::vector<double> query_point, double epsilon, double radius);
%name{theDim}
int theDim();
%name{nPoints}
int nPoints();
%name{Print}
std::string Print(bool print_points);
%name{Dump}
std::string Dump(bool print_points);
%name{getStats}
std::vector<double> getStats();
~LibANNInterface();
};