From f65dd632107b0abc5500e88818d320379bfe3095 Mon Sep 17 00:00:00 2001 From: "Daniel J. Hofmann" Date: Fri, 8 Jan 2016 22:37:25 +0100 Subject: [PATCH] Make TurnInstructionsClass functions free standing functions --- include/engine/api_response_generator.hpp | 2 +- .../guidance/textual_route_annotation.hpp | 2 +- include/extractor/turn_instructions.hpp | 82 +++++++++---------- src/extractor/edge_based_graph_factory.cpp | 2 +- 4 files changed, 42 insertions(+), 46 deletions(-) diff --git a/include/engine/api_response_generator.hpp b/include/engine/api_response_generator.hpp index 3b8945b8e..cfdc5bdc1 100644 --- a/include/engine/api_response_generator.hpp +++ b/include/engine/api_response_generator.hpp @@ -254,7 +254,7 @@ ApiResponseGenerator::BuildRouteSegments(const Segments &segment_li for (const auto &segment : segment_list.Get()) { const auto current_turn = segment.turn_instruction; - if (extractor::TurnInstructionsClass::TurnIsNecessary(current_turn) && + if (extractor::isTurnNecessary(current_turn) && (extractor::TurnInstruction::EnterRoundAbout != current_turn)) { diff --git a/include/engine/guidance/textual_route_annotation.hpp b/include/engine/guidance/textual_route_annotation.hpp index da9a9d8bc..a66786724 100644 --- a/include/engine/guidance/textual_route_annotation.hpp +++ b/include/engine/guidance/textual_route_annotation.hpp @@ -47,7 +47,7 @@ inline util::json::Array AnnotateRoute(const std::vector &ro { util::json::Array json_instruction_row; extractor::TurnInstruction current_instruction = segment.turn_instruction; - if (extractor::TurnInstructionsClass::TurnIsNecessary(current_instruction)) + if (extractor::isTurnNecessary(current_instruction)) { if (extractor::TurnInstruction::EnterRoundAbout == current_instruction) { diff --git a/include/extractor/turn_instructions.hpp b/include/extractor/turn_instructions.hpp index f5f164f18..9a08c97da 100644 --- a/include/extractor/turn_instructions.hpp +++ b/include/extractor/turn_instructions.hpp @@ -31,54 +31,50 @@ enum class TurnInstruction : unsigned char AccessRestrictionPenalty = 129 }; -struct TurnInstructionsClass +// Translates between angles and their human-friendly directional representation +inline TurnInstruction getTurnDirection(const double angle) { - TurnInstructionsClass() = delete; - TurnInstructionsClass(const TurnInstructionsClass &) = delete; - - static inline TurnInstruction GetTurnDirectionOfInstruction(const double angle) + if (angle >= 23 && angle < 67) { - if (angle >= 23 && angle < 67) - { - return TurnInstruction::TurnSharpRight; - } - if (angle >= 67 && angle < 113) - { - return TurnInstruction::TurnRight; - } - if (angle >= 113 && angle < 158) - { - return TurnInstruction::TurnSlightRight; - } - if (angle >= 158 && angle < 202) - { - return TurnInstruction::GoStraight; - } - if (angle >= 202 && angle < 248) - { - return TurnInstruction::TurnSlightLeft; - } - if (angle >= 248 && angle < 292) - { - return TurnInstruction::TurnLeft; - } - if (angle >= 292 && angle < 336) - { - return TurnInstruction::TurnSharpLeft; - } - return TurnInstruction::UTurn; + return TurnInstruction::TurnSharpRight; } - - static inline bool TurnIsNecessary(const TurnInstruction turn_instruction) + if (angle >= 67 && angle < 113) { - if (TurnInstruction::NoTurn == turn_instruction || - TurnInstruction::StayOnRoundAbout == turn_instruction) - { - return false; - } - return true; + return TurnInstruction::TurnRight; } -}; + if (angle >= 113 && angle < 158) + { + return TurnInstruction::TurnSlightRight; + } + if (angle >= 158 && angle < 202) + { + return TurnInstruction::GoStraight; + } + if (angle >= 202 && angle < 248) + { + return TurnInstruction::TurnSlightLeft; + } + if (angle >= 248 && angle < 292) + { + return TurnInstruction::TurnLeft; + } + if (angle >= 292 && angle < 336) + { + return TurnInstruction::TurnSharpLeft; + } + return TurnInstruction::UTurn; +} + +// Decides if a turn is needed to be done for the current instruction +inline bool isTurnNecessary(const TurnInstruction turn_instruction) +{ + if (TurnInstruction::NoTurn == turn_instruction || + TurnInstruction::StayOnRoundAbout == turn_instruction) + { + return false; + } + return true; +} } } diff --git a/src/extractor/edge_based_graph_factory.cpp b/src/extractor/edge_based_graph_factory.cpp index 6c2bedcc1..b26f34fc8 100644 --- a/src/extractor/edge_based_graph_factory.cpp +++ b/src/extractor/edge_based_graph_factory.cpp @@ -683,7 +683,7 @@ TurnInstruction EdgeBasedGraphFactory::AnalyzeTurn(const NodeID node_u, } } - return TurnInstructionsClass::GetTurnDirectionOfInstruction(angle); + return getTurnDirection(angle); } } }