diff --git a/libs/cg/include/psemek/cg/kdtree.hpp b/libs/cg/include/psemek/cg/kdtree.hpp index d728f9f0..9f86ee6f 100644 --- a/libs/cg/include/psemek/cg/kdtree.hpp +++ b/libs/cg/include/psemek/cg/kdtree.hpp @@ -111,6 +111,7 @@ namespace psemek::cg { value_type value; node_id children[2] {null, null}; + std::uint32_t size = 0; }; std::vector nodes_; @@ -179,6 +180,7 @@ namespace psemek::cg auto result = static_cast(nodes_.size()); auto & node = nodes_.emplace_back(); node.value = std::move(*middle); + node.size = (end - begin); nodes_[result].children[0] = build_node_impl(begin, middle, next_axis(split_axis)); nodes_[result].children[1] = build_node_impl(std::next(middle), end, next_axis(split_axis)); @@ -193,6 +195,7 @@ namespace psemek::cg { auto & node = nodes_.emplace_back(); node.value = std::move(value); + node.size = 1; return true; } @@ -212,10 +215,18 @@ namespace psemek::cg auto & child_node = nodes_.emplace_back(); child_node.value = std::move(value); + child_node.size = 1; + nodes_[id].size += 1; return true; } - return insert_impl(std::move(value), node.children[child], next_axis(split_axis)); + if (insert_impl(std::move(value), node.children[child], next_axis(split_axis))) + { + nodes_[id].size += 1; + return true; + } + + return false; } template