Skip to content

Commit

Permalink
Fix unpacking for self-loop nodes not in core. Fixes #1999
Browse files Browse the repository at this point in the history
  • Loading branch information
TheMarex committed Feb 21, 2016
1 parent d0644ba commit 69bc8a8
Showing 1 changed file with 22 additions and 11 deletions.
33 changes: 22 additions & 11 deletions include/engine/routing_algorithms/routing_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -679,18 +679,18 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
BOOST_ASSERT_MSG((SPECIAL_NODEID != middle && INVALID_EDGE_WEIGHT != distance),
"no path found");

if (distance != forward_core_heap.GetKey(middle) + reverse_core_heap.GetKey(middle))
// we need to unpack sub path from core heaps
if (facade->IsCoreNode(middle))
{
// self loop
BOOST_ASSERT(forward_core_heap.GetData(middle).parent == middle &&
reverse_core_heap.GetData(middle).parent == middle);
packed_leg.push_back(middle);
packed_leg.push_back(middle);
}
else
{
// we need to unpack sub path from core heaps
if (facade->IsCoreNode(middle))
if (distance != forward_core_heap.GetKey(middle) + reverse_core_heap.GetKey(middle))
{
// self loop
BOOST_ASSERT(forward_core_heap.GetData(middle).parent == middle &&
reverse_core_heap.GetData(middle).parent == middle);
packed_leg.push_back(middle);
packed_leg.push_back(middle);
}
else
{
std::vector<NodeID> packed_core_leg;
RetrievePackedPathFromHeap(forward_core_heap, reverse_core_heap, middle,
Expand All @@ -701,6 +701,17 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
packed_leg.insert(packed_leg.end(), packed_core_leg.begin(), packed_core_leg.end());
RetrievePackedPathFromSingleHeap(reverse_heap, packed_core_leg.back(), packed_leg);
}
}
else
{
if (distance != forward_heap.GetKey(middle) + reverse_heap.GetKey(middle))
{
// self loop
BOOST_ASSERT(forward_heap.GetData(middle).parent == middle &&
reverse_heap.GetData(middle).parent == middle);
packed_leg.push_back(middle);
packed_leg.push_back(middle);
}
else
{
RetrievePackedPathFromHeap(forward_heap, reverse_heap, middle, packed_leg);
Expand Down

0 comments on commit 69bc8a8

Please sign in to comment.