Merge pull request #2756 from gojuno/turn_annotation_bugfix

JSON instruction serialization fix.
This commit is contained in:
Patrick Niklaus 2016-08-12 19:14:47 +02:00 committed by GitHub
commit 41b22916f3
4 changed files with 29 additions and 10 deletions

View File

@ -17,9 +17,10 @@ namespace guidance
enum class WaypointType : std::uint8_t enum class WaypointType : std::uint8_t
{ {
None, None = 0,
Arrive, Arrive = 1,
Depart, Depart = 2,
MaxWaypointType = 3
}; };
struct StepManeuver struct StepManeuver

View File

@ -16,12 +16,6 @@ namespace extractor
namespace guidance namespace guidance
{ {
namespace detail
{
// inclusive bounds for turn modifiers
const constexpr uint8_t num_direction_modifiers = 8;
} // detail
// direction modifiers based on angle // direction modifiers based on angle
namespace DirectionModifier namespace DirectionModifier
{ {
@ -34,6 +28,7 @@ const constexpr Enum Straight = 4;
const constexpr Enum SlightLeft = 5; const constexpr Enum SlightLeft = 5;
const constexpr Enum Left = 6; const constexpr Enum Left = 6;
const constexpr Enum SharpLeft = 7; const constexpr Enum SharpLeft = 7;
const constexpr Enum MaxDirectionModifier = 8;
} }
namespace TurnType namespace TurnType
@ -70,6 +65,7 @@ const constexpr Enum ExitRoundaboutIntersection = 24; // Exiting a small Roundab
const constexpr Enum StayOnRoundabout = 25; // Continue on Either a small or a large Roundabout const constexpr Enum StayOnRoundabout = 25; // Continue on Either a small or a large Roundabout
const constexpr Enum Sliproad = const constexpr Enum Sliproad =
26; // Something that looks like a ramp, but is actually just a small sliproad 26; // Something that looks like a ramp, but is actually just a small sliproad
const constexpr Enum MaxTurnType = 27; // Special value for static asserts
} }
// turn angle in 1.40625 degree -> 128 == 180 degree // turn angle in 1.40625 degree -> 128 == 180 degree

View File

@ -50,7 +50,7 @@ const constexpr char *turn_type_names[] = {
"roundabout", "roundabout", "rotary", "rotary", "roundabout turn", "roundabout", "roundabout", "rotary", "rotary", "roundabout turn",
"roundabout turn", "use lane", "invalid", "invalid", "invalid", "roundabout turn", "use lane", "invalid", "invalid", "invalid",
"invalid", "invalid", "invalid", "invalid", "invalid", "invalid", "invalid", "invalid", "invalid", "invalid",
"invalid"}; "invalid", "invalid"};
const constexpr char *waypoint_type_names[] = {"invalid", "arrive", "depart"}; const constexpr char *waypoint_type_names[] = {"invalid", "arrive", "depart"};
@ -68,6 +68,8 @@ inline bool hasValidLanes(const guidance::Intersection &intersection)
std::string instructionTypeToString(const TurnType::Enum type) std::string instructionTypeToString(const TurnType::Enum type)
{ {
static_assert(sizeof(turn_type_names)/sizeof(turn_type_names[0]) >= TurnType::MaxTurnType,
"Some turn types has not string representation.");
return turn_type_names[static_cast<std::size_t>(type)]; return turn_type_names[static_cast<std::size_t>(type)];
} }
@ -97,11 +99,15 @@ util::json::Array lanesFromIntersection(const guidance::Intersection &intersecti
std::string instructionModifierToString(const DirectionModifier::Enum modifier) std::string instructionModifierToString(const DirectionModifier::Enum modifier)
{ {
static_assert(sizeof(modifier_names)/sizeof(modifier_names[0]) >= DirectionModifier::MaxDirectionModifier,
"Some direction modifiers has not string representation.");
return modifier_names[static_cast<std::size_t>(modifier)]; return modifier_names[static_cast<std::size_t>(modifier)];
} }
std::string waypointTypeToString(const guidance::WaypointType waypoint_type) std::string waypointTypeToString(const guidance::WaypointType waypoint_type)
{ {
static_assert(sizeof(waypoint_type_names)/sizeof(waypoint_type_names[0]) >= static_cast<size_t>(guidance::WaypointType::MaxWaypointType),
"Some waypoint types has not string representation.");
return waypoint_type_names[static_cast<std::size_t>(waypoint_type)]; return waypoint_type_names[static_cast<std::size_t>(waypoint_type)];
} }

View File

@ -0,0 +1,16 @@
#include "engine/api/json_factory.hpp"
#include <boost/test/test_case_template.hpp>
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_SUITE(json_factory)
BOOST_AUTO_TEST_CASE(instructionTypeToString_test_size)
{
using namespace osrm::engine::api::json::detail;
using namespace osrm::extractor::guidance;
BOOST_CHECK_EQUAL(instructionTypeToString(TurnType::Sliproad), "invalid");
}
BOOST_AUTO_TEST_SUITE_END()