Skip to content

Commit d193a66

Browse files
committed
Added static asserts and documentation.
1 parent 261a912 commit d193a66

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

src/pico_tree/kd_tree.hpp

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,12 @@ class SearchNn {
6868
template <typename RandomAccessIterator>
6969
class SearchKnn {
7070
private:
71-
static_assert(std::is_same<
72-
typename std::iterator_traits<
73-
RandomAccessIterator>::iterator_category,
74-
std::random_access_iterator_tag>::value);
71+
static_assert(
72+
std::is_same<
73+
typename std::iterator_traits<
74+
RandomAccessIterator>::iterator_category,
75+
std::random_access_iterator_tag>::value,
76+
"SEARCH_KNN_EXPECTED_RANDOM_ACCESS_ITERATOR");
7577

7678
using Pair = typename std::iterator_traits<RandomAccessIterator>::value_type;
7779
using Index = typename Pair::first_type;
@@ -154,10 +156,12 @@ class SearchRadius {
154156
template <typename RandomAccessIterator>
155157
class SearchAknn {
156158
private:
157-
static_assert(std::is_same<
158-
typename std::iterator_traits<
159-
RandomAccessIterator>::iterator_category,
160-
std::random_access_iterator_tag>::value);
159+
static_assert(
160+
std::is_same<
161+
typename std::iterator_traits<
162+
RandomAccessIterator>::iterator_category,
163+
std::random_access_iterator_tag>::value,
164+
"SEARCH_AKNN_EXPECTED_RANDOM_ACCESS_ITERATOR");
161165

162166
using Pair = typename std::iterator_traits<RandomAccessIterator>::value_type;
163167
using Index = typename Pair::first_type;
@@ -304,12 +308,15 @@ class SplitterLongestMedian {
304308
using Sequence = typename internal::Sequence<Scalar, Dim>;
305309

306310
public:
311+
//! \brief Buffer type used with this splitter.
307312
template <typename T>
308313
using MemoryBuffer = internal::StaticBuffer<T>;
309314

315+
//! \private
310316
SplitterLongestMedian(Points const& points, std::vector<Index>* p_indices)
311317
: points_{points}, indices_{*p_indices} {}
312318

319+
//! \brief This function splits a node.
313320
inline void operator()(
314321
Index const, // depth
315322
Index const offset,
@@ -363,12 +370,15 @@ class SplitterSlidingMidpoint {
363370
using Sequence = typename internal::Sequence<Scalar, Dim>;
364371

365372
public:
373+
//! \brief Buffer type used with this splitter.
366374
template <typename T>
367375
using MemoryBuffer = internal::DynamicBuffer<T>;
368376

377+
//! \private
369378
SplitterSlidingMidpoint(Points const& points, std::vector<Index>* p_indices)
370379
: points_{points}, indices_{*p_indices} {}
371380

381+
//! \brief This function splits a node.
372382
inline void operator()(
373383
Index const, // depth
374384
Index const offset,
@@ -452,12 +462,15 @@ class KdTree {
452462
struct Branch {
453463
//! \brief Split coordinate / index of the KdTree spatial dimension.
454464
int split_dim;
465+
//! \brief Coordinate value used for splitting the children of a node.
455466
Scalar split_val;
456467
};
457468

458469
//! \brief Tree leaf.
459470
struct Leaf {
471+
//! \private
460472
Index begin_idx;
473+
//! \private
461474
Index end_idx;
462475
};
463476

@@ -616,6 +629,12 @@ class KdTree {
616629
RandomAccessIterator begin,
617630
RandomAccessIterator end,
618631
bool const sort = false) const {
632+
static_assert(
633+
std::is_same<
634+
typename std::iterator_traits<RandomAccessIterator>::value_type,
635+
std::pair<Index, Scalar>>::value,
636+
"SEARCH_ITERATOR_VALUE_TYPE_DOES_NOT_EQUAL_PAIR_INDEX_SCALAR");
637+
619638
internal::SearchKnn<RandomAccessIterator> v(begin, end);
620639
SearchNn(root_, p, &v);
621640

@@ -629,7 +648,7 @@ class KdTree {
629648
//! results.
630649
//! \tparam P Point type.
631650
//! \see template <typename P, typename RandomAccessIterator> void SearchKnn(P
632-
//! const&, RandomAccessIterator, RandomAccessIterator, bool const sort) const
651+
//! const&, RandomAccessIterator, RandomAccessIterator, bool const) const
633652
template <typename P>
634653
inline void SearchKnn(
635654
P const& p,
@@ -714,6 +733,12 @@ class KdTree {
714733
RandomAccessIterator begin,
715734
RandomAccessIterator end,
716735
bool const sort = false) const {
736+
static_assert(
737+
std::is_same<
738+
typename std::iterator_traits<RandomAccessIterator>::value_type,
739+
std::pair<Index, Scalar>>::value,
740+
"SEARCH_ITERATOR_VALUE_TYPE_DOES_NOT_EQUAL_PAIR_INDEX_SCALAR");
741+
717742
internal::SearchAknn<RandomAccessIterator> v(e, begin, end);
718743
SearchNn(root_, p, &v);
719744

@@ -728,7 +753,7 @@ class KdTree {
728753
//! \tparam P Point type.
729754
//! \see template <typename P, typename RandomAccessIterator> void
730755
//! SearchAknn(P const&, RandomAccessIterator, RandomAccessIterator, bool
731-
//! const sort) const
756+
//! const) const
732757
template <typename P>
733758
inline void SearchAknn(
734759
P const& p,

0 commit comments

Comments
 (0)