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;
|
value_type value;
|
||||||
node_id children[2] {null, null};
|
node_id children[2] {null, null};
|
||||||
|
std::uint32_t size = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<node> nodes_;
|
std::vector<node> nodes_;
|
||||||
|
|
@ -179,6 +180,7 @@ namespace psemek::cg
|
||||||
auto result = static_cast<node_id>(nodes_.size());
|
auto result = static_cast<node_id>(nodes_.size());
|
||||||
auto & node = nodes_.emplace_back();
|
auto & node = nodes_.emplace_back();
|
||||||
node.value = std::move(*middle);
|
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[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));
|
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();
|
auto & node = nodes_.emplace_back();
|
||||||
node.value = std::move(value);
|
node.value = std::move(value);
|
||||||
|
node.size = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -212,10 +215,18 @@ namespace psemek::cg
|
||||||
|
|
||||||
auto & child_node = nodes_.emplace_back();
|
auto & child_node = nodes_.emplace_back();
|
||||||
child_node.value = std::move(value);
|
child_node.value = std::move(value);
|
||||||
|
child_node.size = 1;
|
||||||
|
nodes_[id].size += 1;
|
||||||
return true;
|
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>
|
template <typename T, std::size_t N, typename Data>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue