From 016c77a4deeb9b89bafb05b3cf8771a0cb12b9ed Mon Sep 17 00:00:00 2001 From: Denis Chaplygin Date: Mon, 30 Sep 2019 16:33:32 +0300 Subject: [PATCH] Flatbuffers is not a boost::optional friendly --- include/engine/api/base_api.hpp | 6 +++--- include/engine/api/match_api.hpp | 6 +++--- include/engine/api/route_api.hpp | 22 ++++++++++---------- include/engine/api/table_api.hpp | 35 +++++++++++++++++--------------- include/engine/api/trip_api.hpp | 6 +++--- 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 0b927b00c..702a7f15f 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -106,7 +106,7 @@ class BaseAPI auto name_string = builder->CreateString( facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id)).to_string()); - boost::optional> hint_string = boost::none; + flatbuffers::Offset hint_string; if (parameters.generate_hints) { hint_string = builder->CreateString(Hint{phantom, facade.GetCheckSum()}.ToBase64()); @@ -117,9 +117,9 @@ class BaseAPI waypoint->add_distance(util::coordinate_calculation::fccApproximateDistance( phantom.location, phantom.input_location)); waypoint->add_name(name_string); - if (hint_string) + if (parameters.generate_hints) { - waypoint->add_hint(*hint_string); + waypoint->add_hint(hint_string); } return waypoint; } diff --git a/include/engine/api/match_api.hpp b/include/engine/api/match_api.hpp index 3aa9ddb78..e1639794e 100644 --- a/include/engine/api/match_api.hpp +++ b/include/engine/api/match_api.hpp @@ -50,7 +50,7 @@ class MatchAPI final : public RouteAPI flatbuffers::FlatBufferBuilder &fb_result) const { auto data_timestamp = facade.GetTimestamp(); - boost::optional> data_version_string = boost::none; + flatbuffers::Offset data_version_string; if (!data_timestamp.empty()) { data_version_string = fb_result.CreateString(data_timestamp); @@ -60,9 +60,9 @@ class MatchAPI final : public RouteAPI return MakeTracepoints(fb_result, sub_matchings); }); - if (data_version_string) + if (!data_timestamp.empty()) { - response->add_data_version(*data_version_string); + response->add_data_version(data_version_string); } fb_result.Finish(response->Finish()); diff --git a/include/engine/api/route_api.hpp b/include/engine/api/route_api.hpp index 969c70121..1c8283fae 100644 --- a/include/engine/api/route_api.hpp +++ b/include/engine/api/route_api.hpp @@ -73,7 +73,7 @@ class RouteAPI : public BaseAPI { auto data_timestamp = facade.GetTimestamp(); - boost::optional> data_version_string = boost::none; + flatbuffers::Offset data_version_string; if (!data_timestamp.empty()) { data_version_string = fb_result.CreateString(data_timestamp); @@ -84,9 +84,9 @@ class RouteAPI : public BaseAPI return BaseAPI::MakeWaypoints(&fb_result, all_start_end_points); }); - if (data_version_string) + if (!data_timestamp.empty()) { - response->add_data_version(*data_version_string); + response->add_data_version(data_version_string); } fb_result.Finish(response->Finish()); } @@ -373,8 +373,7 @@ class RouteAPI : public BaseAPI requested_annotations = RouteParameters::AnnotationsType::All; } - boost::optional> annotation_buffer = - boost::none; + flatbuffers::Offset annotation_buffer; if (requested_annotations != RouteParameters::AnnotationsType::None) { annotation_buffer = @@ -397,9 +396,9 @@ class RouteAPI : public BaseAPI } legBuilder.add_steps(steps_vector); - if (annotation_buffer) + if (requested_annotations != RouteParameters::AnnotationsType::None) { - legBuilder.add_annotations(*annotation_buffer); + legBuilder.add_annotations(annotation_buffer); } routeLegs.emplace_back(legBuilder.Finish()); } @@ -506,8 +505,9 @@ class RouteAPI : public BaseAPI } auto nodes_vector = fb_result.CreateVector(nodes); // Add any supporting metadata, if needed - boost::optional> metadata_buffer = boost::none; - if (requested_annotations & RouteParameters::AnnotationsType::Datasources) + bool use_metadata = requested_annotations & RouteParameters::AnnotationsType::Datasources; + flatbuffers::Offset metadata_buffer; + if (use_metadata) { const auto MAX_DATASOURCE_ID = 255u; std::vector> names; @@ -529,9 +529,9 @@ class RouteAPI : public BaseAPI annotation.add_weight(weight); annotation.add_datasources(datasources); annotation.add_nodes(nodes_vector); - if (metadata_buffer) + if (use_metadata) { - annotation.add_metadata(*metadata_buffer); + annotation.add_metadata(metadata_buffer); } return annotation.Finish(); diff --git a/include/engine/api/table_api.hpp b/include/engine/api/table_api.hpp index c459a5ae1..d3efe15d9 100644 --- a/include/engine/api/table_api.hpp +++ b/include/engine/api/table_api.hpp @@ -74,7 +74,7 @@ class TableAPI final : public BaseAPI auto number_of_destinations = parameters.destinations.size(); auto data_timestamp = facade.GetTimestamp(); - boost::optional> data_version_string = boost::none; + flatbuffers::Offset data_version_string; if (!data_timestamp.empty()) { data_version_string = fb_result.CreateString(data_timestamp); @@ -116,21 +116,24 @@ class TableAPI final : public BaseAPI } } - boost::optional>> durations = boost::none; - if (parameters.annotations & TableParameters::AnnotationsType::Duration) + bool use_durations = parameters.annotations & TableParameters::AnnotationsType::Duration; + flatbuffers::Offset> durations; + if (use_durations) { durations = MakeDurationTable(fb_result, tables.first); } - boost::optional>> distances = boost::none; - if (parameters.annotations & TableParameters::AnnotationsType::Distance) + bool use_distances = parameters.annotations & TableParameters::AnnotationsType::Distance; + flatbuffers::Offset> distances; + if (use_distances) { distances = MakeDistanceTable(fb_result, tables.second); } - boost::optional>> speed_cells = - boost::none; - if (parameters.fallback_speed != INVALID_FALLBACK_SPEED && parameters.fallback_speed > 0) + bool have_speed_cells = + parameters.fallback_speed != INVALID_FALLBACK_SPEED && parameters.fallback_speed > 0; + flatbuffers::Offset> speed_cells; + if (have_speed_cells) { speed_cells = MakeEstimatesTable(fb_result, fallback_speed_cells); } @@ -139,24 +142,24 @@ class TableAPI final : public BaseAPI table.add_destinations(destinations); table.add_rows(number_of_sources); table.add_cols(number_of_destinations); - if (durations) + if (use_durations) { - table.add_durations(*durations); + table.add_durations(durations); } - if (distances) + if (use_distances) { - table.add_distances(*distances); + table.add_distances(distances); } - if (speed_cells) + if (have_speed_cells) { - table.add_fallback_speed_cells(*speed_cells); + table.add_fallback_speed_cells(speed_cells); } auto table_buffer = table.Finish(); fbresult::FBResultBuilder response(fb_result); - if (data_version_string) + if (!data_timestamp.empty()) { - response.add_data_version(*data_version_string); + response.add_data_version(data_version_string); } response.add_table(table_buffer); response.add_waypoints(sources); diff --git a/include/engine/api/trip_api.hpp b/include/engine/api/trip_api.hpp index f93701373..65f9381fc 100644 --- a/include/engine/api/trip_api.hpp +++ b/include/engine/api/trip_api.hpp @@ -48,7 +48,7 @@ class TripAPI final : public RouteAPI flatbuffers::FlatBufferBuilder &fb_result) const { auto data_timestamp = facade.GetTimestamp(); - boost::optional> data_version_string = boost::none; + flatbuffers::Offset data_version_string; if (!data_timestamp.empty()) { data_version_string = fb_result.CreateString(data_timestamp); @@ -59,9 +59,9 @@ class TripAPI final : public RouteAPI return MakeWaypoints(fb_result, sub_trips, phantoms); }); - if (data_version_string) + if (!data_timestamp.empty()) { - response->add_data_version(*data_version_string); + response->add_data_version(data_version_string); } fb_result.Finish(response->Finish()); }