diff --git a/libs/cg/include/psemek/cg/kdtree.hpp b/libs/cg/include/psemek/cg/kdtree.hpp index 13373606..d728f9f0 100644 --- a/libs/cg/include/psemek/cg/kdtree.hpp +++ b/libs/cg/include/psemek/cg/kdtree.hpp @@ -77,6 +77,9 @@ namespace psemek::cg template kdtree(Iterator begin, Iterator end); + template + void assign(Iterator begin, Iterator end); + bool empty() const { return nodes_.empty(); } bool insert(value_type && value); @@ -84,11 +87,13 @@ namespace psemek::cg // TODO: implement bool remove(point_type const & point) const; + void clear(); + // TODO: implement // TODO: alternative non-const version that allows modifying value.data value_type const * find(point_type const & point) const; - value_type const & closest(point_type const & target); + value_type const & closest(point_type const & target) const; private: @@ -125,6 +130,14 @@ namespace psemek::cg build_node_impl(begin, end, 0); } + template + template + void kdtree::assign(Iterator begin, Iterator end) + { + clear(); + build_node_impl(begin, end, 0); + } + template bool kdtree::insert(value_type && value) { @@ -132,7 +145,13 @@ namespace psemek::cg } template - kdtree::value_type const & kdtree::closest(point_type const & target) + void kdtree::clear() + { + nodes_.clear(); + } + + template + kdtree::value_type const & kdtree::closest(point_type const & target) const { if (nodes_.empty()) throw util::exception("empty kdtree");