Generalized flatbuffers response generation in 'Route','Trip','Match' services.
This commit is contained in:
parent
533f1ffc6b
commit
306c047c14
@ -46,20 +46,7 @@ class MatchAPI final : public RouteAPI
|
||||
const std::vector<InternalRouteResult> &sub_routes,
|
||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||
{
|
||||
fbresult::FBResultBuilder response(fb_result);
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::RouteObject>> routes;
|
||||
routes.reserve(sub_matchings.size());
|
||||
for (auto index : util::irange<std::size_t>(0UL, sub_matchings.size()))
|
||||
{
|
||||
routes.push_back(MakeRoute(fb_result,
|
||||
sub_routes[index].segment_end_coordinates,
|
||||
sub_routes[index].unpacked_path_segments,
|
||||
sub_routes[index].source_traversed_in_reverse,
|
||||
sub_routes[index].target_traversed_in_reverse));
|
||||
}
|
||||
response.add_routes(fb_result.CreateVector(routes));
|
||||
response.add_waypoints(fb_result.CreateVector(MakeTracepoints(fb_result, sub_matchings)));
|
||||
auto response = MakeFBResponse(sub_routes, fb_result, [this, &fb_result, &sub_matchings]() { return MakeTracepoints(fb_result, sub_matchings); });
|
||||
|
||||
fb_result.Finish(response.Finish());
|
||||
}
|
||||
@ -106,7 +93,7 @@ class MatchAPI final : public RouteAPI
|
||||
}
|
||||
};
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::Waypoint>>
|
||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<fbresult::Waypoint>>>
|
||||
MakeTracepoints(flatbuffers::FlatBufferBuilder &fb_result, const std::vector<map_matching::SubMatching> &sub_matchings) const
|
||||
{
|
||||
std::vector<flatbuffers::Offset<fbresult::Waypoint>> waypoints;
|
||||
@ -156,7 +143,7 @@ class MatchAPI final : public RouteAPI
|
||||
waypoints.push_back(waypoint.Finish());
|
||||
}
|
||||
|
||||
return waypoints;
|
||||
return fb_result.CreateVector(waypoints);
|
||||
}
|
||||
|
||||
util::json::Array
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
: BaseAPI(facade_, parameters_), parameters(parameters_) {
|
||||
}
|
||||
|
||||
virtual void
|
||||
void
|
||||
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
||||
const std::vector<PhantomNodes>
|
||||
&all_start_end_points, // all used coordinates, ignoring waypoints= parameter
|
||||
@ -64,25 +64,9 @@ public:
|
||||
&all_start_end_points, // all used coordinates, ignoring waypoints= parameter
|
||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||
{
|
||||
|
||||
fbresult::FBResultBuilder response(fb_result);
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::RouteObject>> routes;
|
||||
for (const auto &raw_route : raw_routes.routes)
|
||||
{
|
||||
if (!raw_route.is_valid())
|
||||
continue;
|
||||
|
||||
routes.push_back(MakeRoute(fb_result,
|
||||
raw_route.segment_end_coordinates,
|
||||
raw_route.unpacked_path_segments,
|
||||
raw_route.source_traversed_in_reverse,
|
||||
raw_route.target_traversed_in_reverse));
|
||||
}
|
||||
|
||||
auto routes_vector = fb_result.CreateVector(routes);
|
||||
response.add_routes(routes_vector);
|
||||
response.add_waypoints(BaseAPI::MakeWaypoints(fb_result, all_start_end_points));
|
||||
auto response = MakeFBResponse(raw_routes, fb_result, [this, &all_start_end_points, &fb_result]() {
|
||||
return BaseAPI::MakeWaypoints(fb_result, all_start_end_points);
|
||||
});
|
||||
|
||||
auto data_timestamp = facade.GetTimestamp();
|
||||
if (!data_timestamp.empty())
|
||||
@ -93,6 +77,7 @@ public:
|
||||
|
||||
fb_result.Finish(response.Finish());
|
||||
}
|
||||
|
||||
void
|
||||
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
||||
const std::vector<PhantomNodes>
|
||||
@ -123,6 +108,35 @@ public:
|
||||
}
|
||||
|
||||
protected:
|
||||
template <typename GetWptsFn>
|
||||
fbresult::FBResultBuilder
|
||||
MakeFBResponse(const InternalManyRoutesResult &raw_routes,
|
||||
flatbuffers::FlatBufferBuilder &fb_result,
|
||||
GetWptsFn getWaypoints) const
|
||||
{
|
||||
|
||||
fbresult::FBResultBuilder response(fb_result);
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::RouteObject>> routes;
|
||||
for (const auto &raw_route : raw_routes.routes)
|
||||
{
|
||||
if (!raw_route.is_valid())
|
||||
continue;
|
||||
|
||||
routes.push_back(MakeRoute(fb_result,
|
||||
raw_route.segment_end_coordinates,
|
||||
raw_route.unpacked_path_segments,
|
||||
raw_route.source_traversed_in_reverse,
|
||||
raw_route.target_traversed_in_reverse));
|
||||
}
|
||||
|
||||
auto routes_vector = fb_result.CreateVector(routes);
|
||||
response.add_routes(routes_vector);
|
||||
response.add_waypoints(getWaypoints());
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
template <typename BuilderType, typename ForwardIter>
|
||||
void MakeGeometry(BuilderType builder, ForwardIter begin, ForwardIter end) const
|
||||
{
|
||||
|
@ -45,20 +45,8 @@ class TripAPI final : public RouteAPI
|
||||
const std::vector<PhantomNode> &phantoms,
|
||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||
{
|
||||
fbresult::FBResultBuilder response(fb_result);
|
||||
auto response = MakeFBResponse(sub_routes, fb_result, [this, &fb_result, &sub_trips, &phantoms]() { return MakeWaypoints(fb_result, sub_trips, phantoms); });
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::RouteObject>> routes;
|
||||
routes.reserve(sub_trips.size());
|
||||
for (auto index : util::irange<std::size_t>(0UL, sub_trips.size()))
|
||||
{
|
||||
routes.push_back(MakeRoute(fb_result,
|
||||
sub_routes[index].segment_end_coordinates,
|
||||
sub_routes[index].unpacked_path_segments,
|
||||
sub_routes[index].source_traversed_in_reverse,
|
||||
sub_routes[index].target_traversed_in_reverse));
|
||||
}
|
||||
response.add_routes(fb_result.CreateVector(routes));
|
||||
response.add_waypoints(fb_result.CreateVector(MakeWaypoints(fb_result, sub_trips, phantoms)));
|
||||
fb_result.Finish(response.Finish());
|
||||
}
|
||||
void MakeResponse(const std::vector<std::vector<NodeID>> &sub_trips,
|
||||
@ -102,7 +90,7 @@ class TripAPI final : public RouteAPI
|
||||
}
|
||||
};
|
||||
|
||||
std::vector<flatbuffers::Offset<fbresult::Waypoint>> MakeWaypoints(flatbuffers::FlatBufferBuilder &fb_result,
|
||||
flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<fbresult::Waypoint>>> MakeWaypoints(flatbuffers::FlatBufferBuilder &fb_result,
|
||||
const std::vector<std::vector<NodeID>> &sub_trips,
|
||||
const std::vector<PhantomNode> &phantoms) const
|
||||
{
|
||||
@ -122,7 +110,7 @@ class TripAPI final : public RouteAPI
|
||||
waypoints.push_back(waypoint.Finish());
|
||||
}
|
||||
|
||||
return waypoints;
|
||||
return fb_result.CreateVector(waypoints);
|
||||
}
|
||||
|
||||
util::json::Array MakeWaypoints(const std::vector<std::vector<NodeID>> &sub_trips,
|
||||
|
Loading…
Reference in New Issue
Block a user