From 28a4d9ccb0fa4f2fe05ec499d5d3d1f616a51eb4 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 21 Feb 2025 19:20:54 +0300 Subject: [PATCH] Make cg::kdtree::closest const & add cg::kdtree::clear & assign --- libs/cg/include/psemek/cg/kdtree.hpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) 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");