Merge pull request #1481 from Project-OSRM/fix/no-big-cc-pruning
Only activate pruning for big cc after one was found
This commit is contained in:
commit
8b8188710e
@ -651,6 +651,9 @@ class StaticRTree
|
|||||||
unsigned inspected_elements = 0;
|
unsigned inspected_elements = 0;
|
||||||
unsigned number_of_elements_from_big_cc = 0;
|
unsigned number_of_elements_from_big_cc = 0;
|
||||||
unsigned number_of_elements_from_tiny_cc = 0;
|
unsigned number_of_elements_from_tiny_cc = 0;
|
||||||
|
// is true if a big cc was added to the queue to we also have a lower bound
|
||||||
|
// for them. it actives pruning for big components
|
||||||
|
bool has_big_cc = false;
|
||||||
|
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
unsigned pruned_elements = 0;
|
unsigned pruned_elements = 0;
|
||||||
@ -697,10 +700,11 @@ class StaticRTree
|
|||||||
BOOST_ASSERT(0.f <= current_perpendicular_distance);
|
BOOST_ASSERT(0.f <= current_perpendicular_distance);
|
||||||
|
|
||||||
if (pruning_bound.get() >= current_perpendicular_distance ||
|
if (pruning_bound.get() >= current_perpendicular_distance ||
|
||||||
current_edge.is_in_tiny_cc())
|
(!has_big_cc && !current_edge.is_in_tiny_cc()))
|
||||||
{
|
{
|
||||||
pruning_bound.insert(current_perpendicular_distance);
|
pruning_bound.insert(current_perpendicular_distance);
|
||||||
traversal_queue.emplace(current_perpendicular_distance, current_edge);
|
traversal_queue.emplace(current_perpendicular_distance, current_edge);
|
||||||
|
has_big_cc = has_big_cc || !current_edge.is_in_tiny_cc();
|
||||||
}
|
}
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
else
|
else
|
||||||
@ -812,6 +816,10 @@ class StaticRTree
|
|||||||
unsigned number_of_elements_from_big_cc = 0;
|
unsigned number_of_elements_from_big_cc = 0;
|
||||||
unsigned number_of_elements_from_tiny_cc = 0;
|
unsigned number_of_elements_from_tiny_cc = 0;
|
||||||
|
|
||||||
|
// is true if a big cc was added to the queue to we also have a lower bound
|
||||||
|
// for them. it actives pruning for big components
|
||||||
|
bool has_big_cc = false;
|
||||||
|
|
||||||
unsigned pruned_elements = 0;
|
unsigned pruned_elements = 0;
|
||||||
|
|
||||||
std::pair<double, double> projected_coordinate = {
|
std::pair<double, double> projected_coordinate = {
|
||||||
@ -852,10 +860,11 @@ class StaticRTree
|
|||||||
BOOST_ASSERT(0.f <= current_perpendicular_distance);
|
BOOST_ASSERT(0.f <= current_perpendicular_distance);
|
||||||
|
|
||||||
if (pruning_bound.get() >= current_perpendicular_distance ||
|
if (pruning_bound.get() >= current_perpendicular_distance ||
|
||||||
current_edge.is_in_tiny_cc())
|
(!has_big_cc && !current_edge.is_in_tiny_cc()))
|
||||||
{
|
{
|
||||||
pruning_bound.insert(current_perpendicular_distance);
|
pruning_bound.insert(current_perpendicular_distance);
|
||||||
traversal_queue.emplace(current_perpendicular_distance, current_edge);
|
traversal_queue.emplace(current_perpendicular_distance, current_edge);
|
||||||
|
has_big_cc = has_big_cc || !current_edge.is_in_tiny_cc();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user