Handles distinction of no-route vs invalid-route in mld alternatives
The viaroute plugin always expects a route to be there potentially with invalid edge weight to represent no-route-found. By switching to the many-route-result for the mld alternatives algorithm we might return an empty many-route-result invalidating the post-condition.
This commit is contained in:
parent
58811d8f5c
commit
f7c8bac3fd
@ -120,9 +120,12 @@ Status ViaRoutePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithm
|
|||||||
routes = algorithms.ShortestPathSearch(start_end_nodes, route_parameters.continue_straight);
|
routes = algorithms.ShortestPathSearch(start_end_nodes, route_parameters.continue_straight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The post condition for all path searches is we have at least one route in our result.
|
||||||
|
// This route might be invalid by means of INVALID_EDGE_WEIGHT as shortest path weight.
|
||||||
|
BOOST_ASSERT(!routes.routes.empty());
|
||||||
|
|
||||||
// we can only know this after the fact, different SCC ids still
|
// we can only know this after the fact, different SCC ids still
|
||||||
// allow for connection in one direction.
|
// allow for connection in one direction.
|
||||||
BOOST_ASSERT(!routes.routes.empty());
|
|
||||||
|
|
||||||
if (routes.routes[0].is_valid())
|
if (routes.routes[0].is_valid())
|
||||||
{
|
{
|
||||||
|
@ -792,8 +792,15 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData<Algorithm> &sear
|
|||||||
shortest_path_via_it->node != SPECIAL_NODEID &&
|
shortest_path_via_it->node != SPECIAL_NODEID &&
|
||||||
shortest_path_via_it->weight != INVALID_EDGE_WEIGHT;
|
shortest_path_via_it->weight != INVALID_EDGE_WEIGHT;
|
||||||
|
|
||||||
|
// Care needs to be taken to meet the call sites post condition.
|
||||||
|
// We must return at least one route, even if it's an invalid one.
|
||||||
if (!has_shortest_path)
|
if (!has_shortest_path)
|
||||||
return InternalManyRoutesResult{};
|
{
|
||||||
|
InternalRouteResult invalid;
|
||||||
|
invalid.shortest_path_weight = INVALID_EDGE_WEIGHT;
|
||||||
|
invalid.segment_end_coordinates = {phantom_node_pair};
|
||||||
|
return invalid;
|
||||||
|
}
|
||||||
|
|
||||||
NodeID shortest_path_via = shortest_path_via_it->node;
|
NodeID shortest_path_via = shortest_path_via_it->node;
|
||||||
EdgeWeight shortest_path_weight = shortest_path_via_it->weight;
|
EdgeWeight shortest_path_weight = shortest_path_via_it->weight;
|
||||||
|
Loading…
Reference in New Issue
Block a user