diff --git a/contractor/edge_based_graph_factory.cpp b/contractor/edge_based_graph_factory.cpp index dbd73a73c..e76f7be52 100644 --- a/contractor/edge_based_graph_factory.cpp +++ b/contractor/edge_based_graph_factory.cpp @@ -128,6 +128,11 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, // TODO: move to lambda function with C++11 int temp_sum = 0; + // u-----------------------------------v + // 0 1 i-1 i n-1 + // x --> x --> ... --> x --> x ... --> x + // |-------------------| + // forward_dist_prefix_sum[i] for (const auto i : osrm::irange(0u, geometry_size)) { forward_dist_prefix_sum[i] = temp_sum; @@ -135,14 +140,22 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, BOOST_ASSERT(forward_data.distance >= temp_sum); } + BOOST_ASSERT(forward_dist_prefix_sum.back() + forward_geometry.back().second == forward_data.distance); + // v-----------------------------------u + // 0 1 i-1 i n-1 + // x --> x --> ... --> x --> x ... --> x + // |-------------------| + // reverse_dist_prefix_sum[i] temp_sum = 0; for (const auto i : osrm::irange(0u, geometry_size)) { - temp_sum += reverse_geometry[reverse_geometry.size() - 1 - i].second; - reverse_dist_prefix_sum[i] = reverse_data.distance - temp_sum; - // BOOST_ASSERT(reverse_data.distance >= temp_sum); + reverse_dist_prefix_sum[i] = temp_sum; + temp_sum += reverse_geometry[i].second; + + BOOST_ASSERT(reverse_data.distance >= temp_sum); } + BOOST_ASSERT(reverse_dist_prefix_sum.back() + reverse_geometry.back().second == reverse_data.distance); NodeID current_edge_source_coordinate_id = node_u; @@ -168,8 +181,10 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, forward_data.edgeBasedNodeID, reverse_data.edgeBasedNodeID, current_edge_source_coordinate_id, current_edge_target_coordinate_id, forward_data.nameID, forward_geometry[i].second, - reverse_geometry[geometry_size - 1 - i].second, forward_dist_prefix_sum[i], - reverse_dist_prefix_sum[i], m_geometry_compressor.GetPositionForID(edge_id_1), + reverse_geometry[geometry_size - 1 - i].second, + forward_dist_prefix_sum[i], + reverse_dist_prefix_sum[geometry_size - 1 - i], + m_geometry_compressor.GetPositionForID(edge_id_1), component_id, i, forward_data.travel_mode, reverse_data.travel_mode); current_edge_source_coordinate_id = current_edge_target_coordinate_id;