Only save TreeNode index in search tree x3 speedup
This commit is contained in:
parent
4f6eef3d16
commit
e644424508
@ -93,7 +93,7 @@ class StaticRTree
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
using QueryNodeType = mapbox::util::variant<TreeNode, CandidateSegment>;
|
using QueryNodeType = mapbox::util::variant<std::uint32_t, CandidateSegment>;
|
||||||
struct QueryCandidate
|
struct QueryCandidate
|
||||||
{
|
{
|
||||||
inline bool operator<(const QueryCandidate &other) const
|
inline bool operator<(const QueryCandidate &other) const
|
||||||
@ -415,17 +415,17 @@ class StaticRTree
|
|||||||
|
|
||||||
// initialize queue with root element
|
// initialize queue with root element
|
||||||
std::priority_queue<QueryCandidate> traversal_queue;
|
std::priority_queue<QueryCandidate> traversal_queue;
|
||||||
traversal_queue.push(QueryCandidate{0, m_search_tree[0]});
|
traversal_queue.push(QueryCandidate{0, 0});
|
||||||
|
|
||||||
while (!traversal_queue.empty())
|
while (!traversal_queue.empty())
|
||||||
{
|
{
|
||||||
QueryCandidate current_query_node = traversal_queue.top();
|
QueryCandidate current_query_node = traversal_queue.top();
|
||||||
traversal_queue.pop();
|
traversal_queue.pop();
|
||||||
|
|
||||||
if (current_query_node.node.template is<TreeNode>())
|
if (current_query_node.node.template is<std::uint32_t>())
|
||||||
{ // current object is a tree node
|
{ // current object is a tree node
|
||||||
const TreeNode ¤t_tree_node =
|
const TreeNode ¤t_tree_node =
|
||||||
current_query_node.node.template get<TreeNode>();
|
m_search_tree[current_query_node.node.template get<std::uint32_t>()];
|
||||||
if (current_tree_node.child_is_on_disk)
|
if (current_tree_node.child_is_on_disk)
|
||||||
{
|
{
|
||||||
ExploreLeafNode(current_tree_node.children[0], fixed_projected_coordinate,
|
ExploreLeafNode(current_tree_node.children[0], fixed_projected_coordinate,
|
||||||
@ -510,7 +510,7 @@ class StaticRTree
|
|||||||
const auto squared_lower_bound_to_element =
|
const auto squared_lower_bound_to_element =
|
||||||
child_rectangle.GetMinSquaredDist(fixed_projected_input_coordinate);
|
child_rectangle.GetMinSquaredDist(fixed_projected_input_coordinate);
|
||||||
traversal_queue.push(
|
traversal_queue.push(
|
||||||
QueryCandidate{squared_lower_bound_to_element, m_search_tree[child_id]});
|
QueryCandidate{squared_lower_bound_to_element, child_id});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user