|
| void | freeIndex (Derived &obj) |
| NANOFLANN_NODISCARD Size | size (const Derived &obj) const noexcept |
| NANOFLANN_NODISCARD Size | veclen (const Derived &obj) const noexcept |
|
ElementType | dataset_get (const Derived &obj, IndexType element, Dimension component) const |
| | Helper accessor to the dataset points:
|
| NANOFLANN_NODISCARD Size | usedMemory (const Derived &obj) const |
| void | computeMinMax (const Derived &obj, Offset ind, Size count, Dimension element, ElementType &min_elem, ElementType &max_elem) const |
| NANOFLANN_NODISCARD bool | isActive (IndexType) const |
| void | computeBoundingBox (BoundingBox &bbox) |
| template<class RESULTSET> |
| bool | searchLevel (RESULTSET &result_set, const ElementType *vec, const NodePtr node, DistanceType mindist, distance_vector_t &dists, const DistanceType epsError) const |
| bool | makeNode (Derived &obj, NodePtr node, const Offset left, const Offset right, BoundingBox &bbox, Offset &idx, Dimension &cutfeat, DistanceType &cutval) |
| void | finalizeSplitNode (Derived &obj, NodePtr node, const Dimension cutfeat, const BoundingBox &left_bbox, const BoundingBox &right_bbox, BoundingBox &bbox) |
|
NodePtr | divideTree (Derived &obj, const Offset left, const Offset right, BoundingBox &bbox) |
| NodePtr | divideTreeConcurrent (Derived &obj, const Offset left, const Offset right, BoundingBox &bbox, std::atomic< unsigned int > &thread_count, std::mutex &mutex) |
|
void | middleSplit_ (const Derived &obj, const Offset ind, const Size count, Offset &index, Dimension &cutfeat, DistanceType &cutval, const BoundingBox &bbox) |
| void | planeSplit (const Derived &obj, const Offset ind, const Size count, const Dimension cutfeat, const DistanceType &cutval, Offset &lim1, Offset &lim2) |
|
DistanceType | computeInitialDistances (const Derived &obj, const ElementType *vec, distance_vector_t &dists) const |
| void | saveIndex (const Derived &obj, std::ostream &stream) const |
| void | loadIndex (Derived &obj, std::istream &stream) |
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
class nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >
kd-tree base-class
Contains the member functions common to the classes KDTreeSingleIndexAdaptor and KDTreeSingleIndexDynamicAdaptor_.
- Template Parameters
-
| Derived | The name of the class which inherits this class. |
| DatasetAdaptor | The user-provided adaptor, which must be ensured to have a lifetime equal or longer than the instance of this class. |
| Distance | The distance metric to use, these are all classes derived from nanoflann::Metric |
| DIM | Dimensionality of data points (e.g. 3 for 3D points) |
| IndexType | Type of the arguments with which the data can be accessed (e.g. float, double, int64_t, T*) |
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
| void nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >::loadIndex |
( |
Derived & | obj, |
|
|
std::istream & | stream ) |
|
inline |
Loads an index previously saved with saveIndex() from a binary stream.
The index object must be constructed associated to the same dataset that was used when building the saved index. See: examples/saveload_example.cpp
- Exceptions
-
| std::runtime_error | if the stream does not start with the expected magic number (wrong file or corrupt data), if the nanoflann version in the file differs from the current library version, if the saved type sizes (size_t, IndexType, ElementType, DistanceType) do not match the current template instantiation, or if a read error occurs. |
- Note
- See saveIndex() for portability limitations.
- See also
- saveIndex
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
| void nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >::planeSplit |
( |
const Derived & | obj, |
|
|
const Offset | ind, |
|
|
const Size | count, |
|
|
const Dimension | cutfeat, |
|
|
const DistanceType & | cutval, |
|
|
Offset & | lim1, |
|
|
Offset & | lim2 ) |
|
inline |
Subdivide the list of points by a plane perpendicular on the axis corresponding to the 'cutfeat' dimension at 'cutval' position.
On return: dataset[ind[0..lim1-1]][cutfeat] < cutval dataset[ind[lim1..lim2-1]][cutfeat] == cutval dataset[ind[lim2..count]][cutfeat] > cutval
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
| void nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >::saveIndex |
( |
const Derived & | obj, |
|
|
std::ostream & | stream ) const |
|
inline |
Stores the index in a binary stream.
The set of data points is NOT stored; when reloading, the index object must be constructed with the same dataset. See: examples/saveload_example.cpp
- Note
- Portability limitations (by design – fixing them would require a breaking format change):
- Files are NOT portable across different endianness (e.g. x86 little-endian vs. big-endian SPARC/PowerPC). No byte-swapping is performed.
- Files are NOT portable across 32-bit vs. 64-bit platforms (sizeof(size_t) differs).
- Files are NOT portable across different nanoflann versions; loadIndex() throws if the version in the file does not match the library.
- Files are NOT portable across different template instantiations (e.g. float vs. double IndexType/ElementType); loadIndex() throws on mismatch.
- See also
- loadIndex
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
template<class RESULTSET>
| bool nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >::searchLevel |
( |
RESULTSET & | result_set, |
|
|
const ElementType * | vec, |
|
|
const NodePtr | node, |
|
|
DistanceType | mindist, |
|
|
distance_vector_t & | dists, |
|
|
const DistanceType | epsError ) const |
|
inline |
Performs an exact search in the tree starting from a node. Uses the CRTP-dispatched isActive() hook to skip removed points (no-op in the static adaptor, checks treeIndex_ in the dynamic adaptor).
- Template Parameters
-
| RESULTSET | Should be any ResultSet<DistanceType> |
- Returns
- true if the search should be continued, false if the results are sufficient
template<class Derived, typename Distance, class DatasetAdaptor, int32_t DIM = -1, typename index_t = uint32_t>
| NANOFLANN_NODISCARD Size nanoflann::KDTreeBaseClass< Derived, Distance, DatasetAdaptor, DIM, index_t >::veclen |
( |
const Derived & | obj | ) |
const |
|
inlinenoexcept |
Returns the length of each point in the dataset. For a fixed-size tree (DIM > 0) this is a compile-time constant; under C++17 the if constexpr lets the compiler drop the runtime read of dim_ entirely. The C++11 path keeps the equivalent ternary.