Only save TreeNode index in search tree x3 speedup

This commit is contained in:
Patrick Niklaus 2016-04-30 03:38:21 +02:00
parent 4f6eef3d16
commit e644424508
No known key found for this signature in database
GPG Key ID: E426891B5F978B1B

View File

@ -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 &current_tree_node = const TreeNode &current_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});
} }
} }