From 45140ca9f7f879415a37559e3a642f99fe7ec17e Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Wed, 16 Aug 2017 19:09:51 +0000 Subject: [PATCH] Fix off-by-one in avoid search --- .../routing_algorithms/routing_base_mld.hpp | 17 ++--------------- .../routing_algorithms/alternative_path_mld.cpp | 3 +++ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/include/engine/routing_algorithms/routing_base_mld.hpp b/include/engine/routing_algorithms/routing_base_mld.hpp index f313d0b43..a1b9a736a 100644 --- a/include/engine/routing_algorithms/routing_base_mld.hpp +++ b/include/engine/routing_algorithms/routing_base_mld.hpp @@ -184,11 +184,6 @@ void routingStep(const DataFacade &facade, BOOST_ASSERT(destination != cell.GetDestinationNodes().end()); const NodeID to = *destination; - if (facade.AvoidNode(to)) - { - continue; - } - if (shortcut_weight != INVALID_EDGE_WEIGHT && node != to) { const EdgeWeight to_weight = weight + shortcut_weight; @@ -216,11 +211,6 @@ void routingStep(const DataFacade &facade, BOOST_ASSERT(source != cell.GetSourceNodes().end()); const NodeID to = *source; - if (facade.AvoidNode(to)) - { - continue; - } - if (shortcut_weight != INVALID_EDGE_WEIGHT && node != to) { const EdgeWeight to_weight = weight + shortcut_weight; @@ -247,12 +237,9 @@ void routingStep(const DataFacade &facade, if (DIRECTION == FORWARD_DIRECTION ? edge_data.forward : edge_data.backward) { const NodeID to = facade.GetTarget(edge); - if (facade.AvoidNode(to)) - { - continue; - } - if (checkParentCellRestriction(partition.GetCell(level + 1, to), args...)) + if (!facade.AvoidNode(to) && + checkParentCellRestriction(partition.GetCell(level + 1, to), args...)) { BOOST_ASSERT_MSG(edge_data.weight > 0, "edge_weight invalid"); const EdgeWeight to_weight = weight + edge_data.weight; diff --git a/src/engine/routing_algorithms/alternative_path_mld.cpp b/src/engine/routing_algorithms/alternative_path_mld.cpp index f31cd315e..2811ba306 100644 --- a/src/engine/routing_algorithms/alternative_path_mld.cpp +++ b/src/engine/routing_algorithms/alternative_path_mld.cpp @@ -518,6 +518,9 @@ void unpackPackedPaths(InputIt first, forward_heap.Insert(source, 0, {source}); reverse_heap.Insert(target, 0, {target}); + BOOST_ASSERT(!facade.AvoidNode(source)); + BOOST_ASSERT(!facade.AvoidNode(target)); + // TODO: when structured bindings will be allowed change to // auto [subpath_weight, subpath_source, subpath_target, subpath] = ... EdgeWeight subpath_weight;