Fix unpacking for self-loop nodes not in core. Fixes #1999
This commit is contained in:
parent
d0644bace9
commit
69bc8a8b22
@ -679,18 +679,18 @@ template <class DataFacadeT, class Derived> class BasicRoutingInterface
|
|||||||
BOOST_ASSERT_MSG((SPECIAL_NODEID != middle && INVALID_EDGE_WEIGHT != distance),
|
BOOST_ASSERT_MSG((SPECIAL_NODEID != middle && INVALID_EDGE_WEIGHT != distance),
|
||||||
"no path found");
|
"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
|
if (distance != forward_core_heap.GetKey(middle) + reverse_core_heap.GetKey(middle))
|
||||||
BOOST_ASSERT(forward_core_heap.GetData(middle).parent == middle &&
|
{
|
||||||
reverse_core_heap.GetData(middle).parent == middle);
|
// self loop
|
||||||
packed_leg.push_back(middle);
|
BOOST_ASSERT(forward_core_heap.GetData(middle).parent == middle &&
|
||||||
packed_leg.push_back(middle);
|
reverse_core_heap.GetData(middle).parent == middle);
|
||||||
}
|
packed_leg.push_back(middle);
|
||||||
else
|
packed_leg.push_back(middle);
|
||||||
{
|
}
|
||||||
// we need to unpack sub path from core heaps
|
else
|
||||||
if (facade->IsCoreNode(middle))
|
|
||||||
{
|
{
|
||||||
std::vector<NodeID> packed_core_leg;
|
std::vector<NodeID> packed_core_leg;
|
||||||
RetrievePackedPathFromHeap(forward_core_heap, reverse_core_heap, middle,
|
RetrievePackedPathFromHeap(forward_core_heap, reverse_core_heap, middle,
|
||||||
@ -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());
|
packed_leg.insert(packed_leg.end(), packed_core_leg.begin(), packed_core_leg.end());
|
||||||
RetrievePackedPathFromSingleHeap(reverse_heap, packed_core_leg.back(), packed_leg);
|
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
|
else
|
||||||
{
|
{
|
||||||
RetrievePackedPathFromHeap(forward_heap, reverse_heap, middle, packed_leg);
|
RetrievePackedPathFromHeap(forward_heap, reverse_heap, middle, packed_leg);
|
||||||
|
Loading…
Reference in New Issue
Block a user