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> template <typename Iterator>
kdtree(Iterator begin, Iterator end); kdtree(Iterator begin, Iterator end);
template <typename Iterator>
void assign(Iterator begin, Iterator end);
bool empty() const { return nodes_.empty(); } bool empty() const { return nodes_.empty(); }
bool insert(value_type && value); bool insert(value_type && value);
@ -84,11 +87,13 @@ namespace psemek::cg
// TODO: implement // TODO: implement
bool remove(point_type const & point) const; bool remove(point_type const & point) const;
void clear();
// TODO: implement // TODO: implement
// TODO: alternative non-const version that allows modifying value.data // TODO: alternative non-const version that allows modifying value.data
value_type const * find(point_type const & point) const; 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: private:
@ -125,6 +130,14 @@ namespace psemek::cg
build_node_impl(begin, end, 0); 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> template <typename T, std::size_t N, typename Data>
bool kdtree<T, N, Data>::insert(value_type && value) 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> 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()) if (nodes_.empty())
throw util::exception("empty kdtree"); throw util::exception("empty kdtree");