Make cg::kdtree::closest const & add cg::kdtree::clear & assign

This commit is contained in:
Nikita Lisitsa 2025-02-21 19:20:54 +03:00
parent 97c9d79a5a
commit 28a4d9ccb0

View file

@ -77,6 +77,9 @@ namespace psemek::cg
template <typename Iterator>
kdtree(Iterator begin, Iterator end);
template <typename Iterator>
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 <typename T, std::size_t N, typename Data>
template <typename Iterator>
void kdtree<T, N, Data>::assign(Iterator begin, Iterator end)
{
clear();
build_node_impl(begin, end, 0);
}
template <typename T, std::size_t N, typename Data>
bool kdtree<T, N, Data>::insert(value_type && value)
{
@ -132,7 +145,13 @@ namespace psemek::cg
}
template <typename T, std::size_t N, typename Data>
kdtree<T, N, Data>::value_type const & kdtree<T, N, Data>::closest(point_type const & target)
void kdtree<T, N, Data>::clear()
{
nodes_.clear();
}
template <typename T, std::size_t N, typename Data>
kdtree<T, N, Data>::value_type const & kdtree<T, N, Data>::closest(point_type const & target) const
{
if (nodes_.empty())
throw util::exception("empty kdtree");