Track the size of kd-tree nodes
This commit is contained in:
parent
132a521b6a
commit
2f75df3c91
1 changed files with 12 additions and 1 deletions
|
|
@ -111,6 +111,7 @@ namespace psemek::cg
|
|||
{
|
||||
value_type value;
|
||||
node_id children[2] {null, null};
|
||||
std::uint32_t size = 0;
|
||||
};
|
||||
|
||||
std::vector<node> nodes_;
|
||||
|
|
@ -179,6 +180,7 @@ namespace psemek::cg
|
|||
auto result = static_cast<node_id>(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 <typename T, std::size_t N, typename Data>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue