From 67ce19cb14b8ec4703a447777e0370626312cfb0 Mon Sep 17 00:00:00 2001 From: Moritz Kobitzsch Date: Tue, 13 Dec 2016 11:48:21 +0100 Subject: [PATCH] fix problem at the source --- include/engine/guidance/assemble_steps.hpp | 6 +++--- src/engine/api/json_factory.cpp | 2 +- src/util/guidance/bearing_class.cpp | 2 +- src/util/guidance/turn_bearing.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/engine/guidance/assemble_steps.hpp b/include/engine/guidance/assemble_steps.hpp index 8596474f7..4ae1fd280 100644 --- a/include/engine/guidance/assemble_steps.hpp +++ b/include/engine/guidance/assemble_steps.hpp @@ -139,14 +139,14 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa intersection.out = bearing_class.findMatchingBearing(bearings.second); intersection.location = facade.GetCoordinateOfNode(path_point.turn_via_node); intersection.bearings.clear(); - intersection.bearings.reserve(bearing_class.getAvailableBearings().size()); + intersection.bearings.reserve(bearing_data.size()); intersection.lanes = path_point.lane_data.first; intersection.lane_description = path_point.lane_data.second != INVALID_LANE_DESCRIPTIONID ? facade.GetTurnDescription(path_point.lane_data.second) : extractor::guidance::TurnLaneDescription(); - std::copy(bearing_class.getAvailableBearings().begin(), - bearing_class.getAvailableBearings().end(), + std::copy(bearing_data.begin(), + bearing_data.end(), std::back_inserter(intersection.bearings)); intersection.entry.clear(); for (auto idx : util::irange(0, intersection.bearings.size())) diff --git a/src/engine/api/json_factory.cpp b/src/engine/api/json_factory.cpp index 50f6578af..55f09c293 100644 --- a/src/engine/api/json_factory.cpp +++ b/src/engine/api/json_factory.cpp @@ -211,7 +211,7 @@ util::json::Object makeIntersection(const guidance::Intersection &intersection) intersection.bearings.begin(), intersection.bearings.end(), std::back_inserter(bearings.values), - [](const double bearing) -> util::json::Value { return std::fmod(bearing, 360); }); + [](const double bearing) -> util::json::Value { BOOST_ASSERT(bearing != 360.0); return std::fmod(bearing, 360); }); entry.values.reserve(intersection.entry.size()); std::transform(intersection.entry.begin(), diff --git a/src/util/guidance/bearing_class.cpp b/src/util/guidance/bearing_class.cpp index 8030d0f07..c2bdffa4f 100644 --- a/src/util/guidance/bearing_class.cpp +++ b/src/util/guidance/bearing_class.cpp @@ -56,7 +56,7 @@ DiscreteBearing BearingClass::getDiscreteBearing(const double bearing) { BOOST_ASSERT(0. <= bearing && bearing <= 360.); auto shifted_bearing = (bearing + 0.5 * discrete_step_size); - if (shifted_bearing > 360.) + if (shifted_bearing >= 360.) shifted_bearing -= 360; return static_cast(shifted_bearing / discrete_step_size); } diff --git a/src/util/guidance/turn_bearing.cpp b/src/util/guidance/turn_bearing.cpp index a92748065..29a64ac0d 100644 --- a/src/util/guidance/turn_bearing.cpp +++ b/src/util/guidance/turn_bearing.cpp @@ -14,7 +14,7 @@ constexpr double bearing_scale = 360.0 / 256.0; // discretizes a bearing into distinct units of 1.4 degrees TurnBearing::TurnBearing(const double value) : bearing(value / bearing_scale) { - BOOST_ASSERT_MSG(value >= 0 && value <= 360.0, "Bearing value needs to be between 0 and 360"); + BOOST_ASSERT_MSG(value >= 0 && value < 360.0, "Bearing value needs to be between 0 and 360 (exclusive)"); } double TurnBearing::Get() const { return bearing * bearing_scale; }