From 2a1593fe0521404e46a6ac8b9c804c5edc9082c7 Mon Sep 17 00:00:00 2001 From: Denis Chaplygin Date: Mon, 12 Aug 2019 15:55:36 +0300 Subject: [PATCH] Flatbuffers now uses floats instead of double. We do not use that precision anyway and it make output much smaller. --- docs/http.md | 4 +- .../api/flatbuffers/fbresult_generated.h | 188 +++++++++--------- include/engine/api/flatbuffers/position.fbs | 4 +- include/engine/api/flatbuffers/route.fbs | 16 +- include/engine/api/flatbuffers/waypoint.fbs | 2 +- include/engine/api/route_api.hpp | 16 +- 6 files changed, 115 insertions(+), 115 deletions(-) diff --git a/docs/http.md b/docs/http.md index 0beabf6bb..4052f1eac 100644 --- a/docs/http.md +++ b/docs/http.md @@ -1095,8 +1095,8 @@ Exactly same as `json` annotation object. A point on Earth. ***Properties*** -- `longitute`: `double` Point's longitude -- `latitude`: `double` Point's latitude +- `longitute`: `float` Point's longitude +- `latitude`: `float` Point's latitude ### Uint64Pair diff --git a/include/engine/api/flatbuffers/fbresult_generated.h b/include/engine/api/flatbuffers/fbresult_generated.h index 8c2737bee..ac81424de 100644 --- a/include/engine/api/flatbuffers/fbresult_generated.h +++ b/include/engine/api/flatbuffers/fbresult_generated.h @@ -174,27 +174,27 @@ inline const char *EnumNameTurn(Turn e) { return EnumNamesTurn()[index]; } -FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Position FLATBUFFERS_FINAL_CLASS { +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Position FLATBUFFERS_FINAL_CLASS { private: - double longitute_; - double latitude_; + float longitute_; + float latitude_; public: Position() { memset(static_cast(this), 0, sizeof(Position)); } - Position(double _longitute, double _latitude) + Position(float _longitute, float _latitude) : longitute_(flatbuffers::EndianScalar(_longitute)), latitude_(flatbuffers::EndianScalar(_latitude)) { } - double longitute() const { + float longitute() const { return flatbuffers::EndianScalar(longitute_); } - double latitude() const { + float latitude() const { return flatbuffers::EndianScalar(latitude_); } }; -FLATBUFFERS_STRUCT_END(Position, 16); +FLATBUFFERS_STRUCT_END(Position, 8); FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Uint64Pair FLATBUFFERS_FINAL_CLASS { private: @@ -221,7 +221,7 @@ FLATBUFFERS_STRUCT_END(Uint64Pair, 16); struct WaypointT : public flatbuffers::NativeTable { typedef Waypoint TableType; std::string hint; - double distance; + float distance; std::string name; std::unique_ptr location; std::unique_ptr nodes; @@ -230,7 +230,7 @@ struct WaypointT : public flatbuffers::NativeTable { uint32_t alternatives_count; uint32_t trips_index; WaypointT() - : distance(0.0), + : distance(0.0f), matchings_index(0), waypoint_index(0), alternatives_count(0), @@ -254,8 +254,8 @@ struct Waypoint FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { const flatbuffers::String *hint() const { return GetPointer(VT_HINT); } - double distance() const { - return GetField(VT_DISTANCE, 0.0); + float distance() const { + return GetField(VT_DISTANCE, 0.0f); } const flatbuffers::String *name() const { return GetPointer(VT_NAME); @@ -282,7 +282,7 @@ struct Waypoint FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { return VerifyTableStart(verifier) && VerifyOffset(verifier, VT_HINT) && verifier.VerifyString(hint()) && - VerifyField(verifier, VT_DISTANCE) && + VerifyField(verifier, VT_DISTANCE) && VerifyOffset(verifier, VT_NAME) && verifier.VerifyString(name()) && VerifyField(verifier, VT_LOCATION) && @@ -304,8 +304,8 @@ struct WaypointBuilder { void add_hint(flatbuffers::Offset hint) { fbb_.AddOffset(Waypoint::VT_HINT, hint); } - void add_distance(double distance) { - fbb_.AddElement(Waypoint::VT_DISTANCE, distance, 0.0); + void add_distance(float distance) { + fbb_.AddElement(Waypoint::VT_DISTANCE, distance, 0.0f); } void add_name(flatbuffers::Offset name) { fbb_.AddOffset(Waypoint::VT_NAME, name); @@ -343,7 +343,7 @@ struct WaypointBuilder { inline flatbuffers::Offset CreateWaypoint( flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset hint = 0, - double distance = 0.0, + float distance = 0.0f, flatbuffers::Offset name = 0, const osrm::engine::api::fbresult::Position *location = 0, const osrm::engine::api::fbresult::Uint64Pair *nodes = 0, @@ -352,7 +352,6 @@ inline flatbuffers::Offset CreateWaypoint( uint32_t alternatives_count = 0, uint32_t trips_index = 0) { WaypointBuilder builder_(_fbb); - builder_.add_distance(distance); builder_.add_trips_index(trips_index); builder_.add_alternatives_count(alternatives_count); builder_.add_waypoint_index(waypoint_index); @@ -360,6 +359,7 @@ inline flatbuffers::Offset CreateWaypoint( builder_.add_nodes(nodes); builder_.add_location(location); builder_.add_name(name); + builder_.add_distance(distance); builder_.add_hint(hint); return builder_.Finish(); } @@ -367,7 +367,7 @@ inline flatbuffers::Offset CreateWaypoint( inline flatbuffers::Offset CreateWaypointDirect( flatbuffers::FlatBufferBuilder &_fbb, const char *hint = nullptr, - double distance = 0.0, + float distance = 0.0f, const char *name = nullptr, const osrm::engine::api::fbresult::Position *location = 0, const osrm::engine::api::fbresult::Uint64Pair *nodes = 0, @@ -463,7 +463,7 @@ struct AnnotationT : public flatbuffers::NativeTable { std::vector datasources; std::vector nodes; std::vector weight; - std::vector speed; + std::vector speed; std::unique_ptr metadata; AnnotationT() { } @@ -495,8 +495,8 @@ struct Annotation FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { const flatbuffers::Vector *weight() const { return GetPointer *>(VT_WEIGHT); } - const flatbuffers::Vector *speed() const { - return GetPointer *>(VT_SPEED); + const flatbuffers::Vector *speed() const { + return GetPointer *>(VT_SPEED); } const osrm::engine::api::fbresult::Metadata *metadata() const { return GetPointer(VT_METADATA); @@ -542,7 +542,7 @@ struct AnnotationBuilder { void add_weight(flatbuffers::Offset> weight) { fbb_.AddOffset(Annotation::VT_WEIGHT, weight); } - void add_speed(flatbuffers::Offset> speed) { + void add_speed(flatbuffers::Offset> speed) { fbb_.AddOffset(Annotation::VT_SPEED, speed); } void add_metadata(flatbuffers::Offset metadata) { @@ -567,7 +567,7 @@ inline flatbuffers::Offset CreateAnnotation( flatbuffers::Offset> datasources = 0, flatbuffers::Offset> nodes = 0, flatbuffers::Offset> weight = 0, - flatbuffers::Offset> speed = 0, + flatbuffers::Offset> speed = 0, flatbuffers::Offset metadata = 0) { AnnotationBuilder builder_(_fbb); builder_.add_metadata(metadata); @@ -587,14 +587,14 @@ inline flatbuffers::Offset CreateAnnotationDirect( const std::vector *datasources = nullptr, const std::vector *nodes = nullptr, const std::vector *weight = nullptr, - const std::vector *speed = nullptr, + const std::vector *speed = nullptr, flatbuffers::Offset metadata = 0) { auto distance__ = distance ? _fbb.CreateVector(*distance) : 0; auto duration__ = duration ? _fbb.CreateVector(*duration) : 0; auto datasources__ = datasources ? _fbb.CreateVector(*datasources) : 0; auto nodes__ = nodes ? _fbb.CreateVector(*nodes) : 0; auto weight__ = weight ? _fbb.CreateVector(*weight) : 0; - auto speed__ = speed ? _fbb.CreateVector(*speed) : 0; + auto speed__ = speed ? _fbb.CreateVector(*speed) : 0; return osrm::engine::api::fbresult::CreateAnnotation( _fbb, distance__, @@ -951,11 +951,11 @@ flatbuffers::Offset CreateIntersection(flatbuffers::FlatBufferBuil struct StepT : public flatbuffers::NativeTable { typedef Step TableType; - double distance; - double duration; + float distance; + float duration; std::string polyline; std::vector coordinates; - double weight; + float weight; std::string name; std::string ref; std::string pronunciation; @@ -968,9 +968,9 @@ struct StepT : public flatbuffers::NativeTable { std::string rotary_pronunciation; bool driving_side; StepT() - : distance(0.0), - duration(0.0), - weight(0.0), + : distance(0.0f), + duration(0.0f), + weight(0.0f), driving_side(false) { } }; @@ -995,11 +995,11 @@ struct Step FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT_ROTARY_PRONUNCIATION = 32, VT_DRIVING_SIDE = 34 }; - double distance() const { - return GetField(VT_DISTANCE, 0.0); + float distance() const { + return GetField(VT_DISTANCE, 0.0f); } - double duration() const { - return GetField(VT_DURATION, 0.0); + float duration() const { + return GetField(VT_DURATION, 0.0f); } const flatbuffers::String *polyline() const { return GetPointer(VT_POLYLINE); @@ -1007,8 +1007,8 @@ struct Step FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { const flatbuffers::Vector *coordinates() const { return GetPointer *>(VT_COORDINATES); } - double weight() const { - return GetField(VT_WEIGHT, 0.0); + float weight() const { + return GetField(VT_WEIGHT, 0.0f); } const flatbuffers::String *name() const { return GetPointer(VT_NAME); @@ -1045,13 +1045,13 @@ struct Step FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && - VerifyField(verifier, VT_DISTANCE) && - VerifyField(verifier, VT_DURATION) && + VerifyField(verifier, VT_DISTANCE) && + VerifyField(verifier, VT_DURATION) && VerifyOffset(verifier, VT_POLYLINE) && verifier.VerifyString(polyline()) && VerifyOffset(verifier, VT_COORDINATES) && verifier.VerifyVector(coordinates()) && - VerifyField(verifier, VT_WEIGHT) && + VerifyField(verifier, VT_WEIGHT) && VerifyOffset(verifier, VT_NAME) && verifier.VerifyString(name()) && VerifyOffset(verifier, VT_REF) && @@ -1084,11 +1084,11 @@ struct Step FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { struct StepBuilder { flatbuffers::FlatBufferBuilder &fbb_; flatbuffers::uoffset_t start_; - void add_distance(double distance) { - fbb_.AddElement(Step::VT_DISTANCE, distance, 0.0); + void add_distance(float distance) { + fbb_.AddElement(Step::VT_DISTANCE, distance, 0.0f); } - void add_duration(double duration) { - fbb_.AddElement(Step::VT_DURATION, duration, 0.0); + void add_duration(float duration) { + fbb_.AddElement(Step::VT_DURATION, duration, 0.0f); } void add_polyline(flatbuffers::Offset polyline) { fbb_.AddOffset(Step::VT_POLYLINE, polyline); @@ -1096,8 +1096,8 @@ struct StepBuilder { void add_coordinates(flatbuffers::Offset> coordinates) { fbb_.AddOffset(Step::VT_COORDINATES, coordinates); } - void add_weight(double weight) { - fbb_.AddElement(Step::VT_WEIGHT, weight, 0.0); + void add_weight(float weight) { + fbb_.AddElement(Step::VT_WEIGHT, weight, 0.0f); } void add_name(flatbuffers::Offset name) { fbb_.AddOffset(Step::VT_NAME, name); @@ -1146,11 +1146,11 @@ struct StepBuilder { inline flatbuffers::Offset CreateStep( flatbuffers::FlatBufferBuilder &_fbb, - double distance = 0.0, - double duration = 0.0, + float distance = 0.0f, + float duration = 0.0f, flatbuffers::Offset polyline = 0, flatbuffers::Offset> coordinates = 0, - double weight = 0.0, + float weight = 0.0f, flatbuffers::Offset name = 0, flatbuffers::Offset ref = 0, flatbuffers::Offset pronunciation = 0, @@ -1163,9 +1163,6 @@ inline flatbuffers::Offset CreateStep( flatbuffers::Offset rotary_pronunciation = 0, bool driving_side = false) { StepBuilder builder_(_fbb); - builder_.add_weight(weight); - builder_.add_duration(duration); - builder_.add_distance(distance); builder_.add_rotary_pronunciation(rotary_pronunciation); builder_.add_rotary_name(rotary_name); builder_.add_intersections(intersections); @@ -1176,19 +1173,22 @@ inline flatbuffers::Offset CreateStep( builder_.add_pronunciation(pronunciation); builder_.add_ref(ref); builder_.add_name(name); + builder_.add_weight(weight); builder_.add_coordinates(coordinates); builder_.add_polyline(polyline); + builder_.add_duration(duration); + builder_.add_distance(distance); builder_.add_driving_side(driving_side); return builder_.Finish(); } inline flatbuffers::Offset CreateStepDirect( flatbuffers::FlatBufferBuilder &_fbb, - double distance = 0.0, - double duration = 0.0, + float distance = 0.0f, + float duration = 0.0f, const char *polyline = nullptr, const std::vector *coordinates = nullptr, - double weight = 0.0, + float weight = 0.0f, const char *name = nullptr, const char *ref = nullptr, const char *pronunciation = nullptr, @@ -1370,19 +1370,19 @@ flatbuffers::Offset CreateLeg(flatbuffers::FlatBufferBuilder &_fbb, const L struct RouteObjectT : public flatbuffers::NativeTable { typedef RouteObject TableType; - double distance; - double duration; - double weight; + float distance; + float duration; + float weight; std::string weight_name; - double confidence; + float confidence; std::string polyline; std::vector coordinates; std::vector> legs; RouteObjectT() - : distance(0.0), - duration(0.0), - weight(0.0), - confidence(0.0) { + : distance(0.0f), + duration(0.0f), + weight(0.0f), + confidence(0.0f) { } }; @@ -1398,20 +1398,20 @@ struct RouteObject FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT_COORDINATES = 16, VT_LEGS = 18 }; - double distance() const { - return GetField(VT_DISTANCE, 0.0); + float distance() const { + return GetField(VT_DISTANCE, 0.0f); } - double duration() const { - return GetField(VT_DURATION, 0.0); + float duration() const { + return GetField(VT_DURATION, 0.0f); } - double weight() const { - return GetField(VT_WEIGHT, 0.0); + float weight() const { + return GetField(VT_WEIGHT, 0.0f); } const flatbuffers::String *weight_name() const { return GetPointer(VT_WEIGHT_NAME); } - double confidence() const { - return GetField(VT_CONFIDENCE, 0.0); + float confidence() const { + return GetField(VT_CONFIDENCE, 0.0f); } const flatbuffers::String *polyline() const { return GetPointer(VT_POLYLINE); @@ -1424,12 +1424,12 @@ struct RouteObject FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && - VerifyField(verifier, VT_DISTANCE) && - VerifyField(verifier, VT_DURATION) && - VerifyField(verifier, VT_WEIGHT) && + VerifyField(verifier, VT_DISTANCE) && + VerifyField(verifier, VT_DURATION) && + VerifyField(verifier, VT_WEIGHT) && VerifyOffset(verifier, VT_WEIGHT_NAME) && verifier.VerifyString(weight_name()) && - VerifyField(verifier, VT_CONFIDENCE) && + VerifyField(verifier, VT_CONFIDENCE) && VerifyOffset(verifier, VT_POLYLINE) && verifier.VerifyString(polyline()) && VerifyOffset(verifier, VT_COORDINATES) && @@ -1447,20 +1447,20 @@ struct RouteObject FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { struct RouteObjectBuilder { flatbuffers::FlatBufferBuilder &fbb_; flatbuffers::uoffset_t start_; - void add_distance(double distance) { - fbb_.AddElement(RouteObject::VT_DISTANCE, distance, 0.0); + void add_distance(float distance) { + fbb_.AddElement(RouteObject::VT_DISTANCE, distance, 0.0f); } - void add_duration(double duration) { - fbb_.AddElement(RouteObject::VT_DURATION, duration, 0.0); + void add_duration(float duration) { + fbb_.AddElement(RouteObject::VT_DURATION, duration, 0.0f); } - void add_weight(double weight) { - fbb_.AddElement(RouteObject::VT_WEIGHT, weight, 0.0); + void add_weight(float weight) { + fbb_.AddElement(RouteObject::VT_WEIGHT, weight, 0.0f); } void add_weight_name(flatbuffers::Offset weight_name) { fbb_.AddOffset(RouteObject::VT_WEIGHT_NAME, weight_name); } - void add_confidence(double confidence) { - fbb_.AddElement(RouteObject::VT_CONFIDENCE, confidence, 0.0); + void add_confidence(float confidence) { + fbb_.AddElement(RouteObject::VT_CONFIDENCE, confidence, 0.0f); } void add_polyline(flatbuffers::Offset polyline) { fbb_.AddOffset(RouteObject::VT_POLYLINE, polyline); @@ -1485,33 +1485,33 @@ struct RouteObjectBuilder { inline flatbuffers::Offset CreateRouteObject( flatbuffers::FlatBufferBuilder &_fbb, - double distance = 0.0, - double duration = 0.0, - double weight = 0.0, + float distance = 0.0f, + float duration = 0.0f, + float weight = 0.0f, flatbuffers::Offset weight_name = 0, - double confidence = 0.0, + float confidence = 0.0f, flatbuffers::Offset polyline = 0, flatbuffers::Offset> coordinates = 0, flatbuffers::Offset>> legs = 0) { RouteObjectBuilder builder_(_fbb); - builder_.add_confidence(confidence); - builder_.add_weight(weight); - builder_.add_duration(duration); - builder_.add_distance(distance); builder_.add_legs(legs); builder_.add_coordinates(coordinates); builder_.add_polyline(polyline); + builder_.add_confidence(confidence); builder_.add_weight_name(weight_name); + builder_.add_weight(weight); + builder_.add_duration(duration); + builder_.add_distance(distance); return builder_.Finish(); } inline flatbuffers::Offset CreateRouteObjectDirect( flatbuffers::FlatBufferBuilder &_fbb, - double distance = 0.0, - double duration = 0.0, - double weight = 0.0, + float distance = 0.0f, + float duration = 0.0f, + float weight = 0.0f, const char *weight_name = nullptr, - double confidence = 0.0, + float confidence = 0.0f, const char *polyline = nullptr, const std::vector *coordinates = nullptr, const std::vector> *legs = nullptr) { diff --git a/include/engine/api/flatbuffers/position.fbs b/include/engine/api/flatbuffers/position.fbs index f1576c5b8..ec41d9839 100644 --- a/include/engine/api/flatbuffers/position.fbs +++ b/include/engine/api/flatbuffers/position.fbs @@ -1,6 +1,6 @@ namespace osrm.engine.api.fbresult; struct Position { - longitute: double; - latitude: double; + longitute: float; + latitude: float; } \ No newline at end of file diff --git a/include/engine/api/flatbuffers/route.fbs b/include/engine/api/flatbuffers/route.fbs index 41e11e5b4..679fc2992 100644 --- a/include/engine/api/flatbuffers/route.fbs +++ b/include/engine/api/flatbuffers/route.fbs @@ -11,7 +11,7 @@ table Annotation { datasources: [uint]; nodes: [uint]; weight: [uint]; - speed: [double]; + speed: [float]; metadata: Metadata; } @@ -71,11 +71,11 @@ table Intersection { } table Step { - distance: double; - duration: double; + distance: float; + duration: float; polyline: string; coordinates: [Position]; - weight: double; + weight: float; name: string; ref: string; pronunciation: string; @@ -99,11 +99,11 @@ table Leg { } table RouteObject { - distance: double; - duration: double; - weight: double; + distance: float; + duration: float; + weight: float; weight_name: string; - confidence: double; //Used only by 'Match' service + confidence: float; //Used only by 'Match' service polyline: string; coordinates: [Position]; legs: [Leg]; diff --git a/include/engine/api/flatbuffers/waypoint.fbs b/include/engine/api/flatbuffers/waypoint.fbs index 65b757aab..4991f72e6 100644 --- a/include/engine/api/flatbuffers/waypoint.fbs +++ b/include/engine/api/flatbuffers/waypoint.fbs @@ -8,7 +8,7 @@ struct Uint64Pair { table Waypoint { hint: string; - distance: double; + distance: float; name: string; location: Position; nodes: Uint64Pair; //Used only by 'Nearest' service diff --git a/include/engine/api/route_api.hpp b/include/engine/api/route_api.hpp index 3cd230627..ca766f110 100644 --- a/include/engine/api/route_api.hpp +++ b/include/engine/api/route_api.hpp @@ -150,8 +150,8 @@ public: std::vector coordinates; coordinates.resize(std::distance(begin, end)); std::transform(begin, end, coordinates.begin(), [](const Coordinate &c) { - return fbresult::Position{static_cast(util::toFloating(c.lon)), - static_cast(util::toFloating(c.lat))}; + return fbresult::Position{static_cast(util::toFloating(c.lon).__value), + static_cast(util::toFloating(c.lat).__value)}; }); auto coordinates_vector = builder.fbb_.CreateVectorOfStructs(coordinates); builder.add_coordinates(coordinates_vector); @@ -367,8 +367,8 @@ public: MakeGeometry(stepBuilder, leg_geometry.locations.begin() + step.geometry_begin, leg_geometry.locations.begin() + step.geometry_end); //Maneuver fbresult::StepManeuverBuilder maneuver(fb_result); - fbresult::Position maneuverPosition{static_cast(util::toFloating(step.maneuver.location.lon)), - static_cast(util::toFloating(step.maneuver.location.lat))}; + fbresult::Position maneuverPosition{static_cast(util::toFloating(step.maneuver.location.lon).__value), + static_cast(util::toFloating(step.maneuver.location.lat).__value)}; maneuver.add_location(&maneuverPosition); maneuver.add_bearing_before(step.maneuver.bearing_before); maneuver.add_bearing_after(step.maneuver.bearing_after); @@ -388,8 +388,8 @@ public: intersections.resize(step.intersections.size()); std::transform(step.intersections.begin(), step.intersections.end(), intersections.begin(), [&fb_result, this](const guidance::IntermediateIntersection& intersection) { fbresult::IntersectionBuilder intersectionBuilder(fb_result); - fbresult::Position maneuverPosition{static_cast(util::toFloating(intersection.location.lon)), - static_cast(util::toFloating(intersection.location.lat))}; + fbresult::Position maneuverPosition{static_cast(util::toFloating(intersection.location.lon).__value), + static_cast(util::toFloating(intersection.location.lat).__value)}; intersectionBuilder.add_location(&maneuverPosition); auto bearings_vector = fb_result.CreateVector(intersection.bearings); intersectionBuilder.add_bearings(bearings_vector); @@ -457,9 +457,9 @@ public: if (parameters.annotations_type & RouteParameters::AnnotationsType::Speed) { double prev_speed = 0; - auto speed = GetAnnotations( + auto speed = GetAnnotations( fb_result, leg_geometry, [&prev_speed](const guidance::LegGeometry::Annotation &anno) { - if (anno.duration < std::numeric_limits::min()) + if (anno.duration < std::numeric_limits::min()) { return prev_speed; }