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,
|
const std::vector<InternalRouteResult> &sub_routes,
|
||||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||||
{
|
{
|
||||||
fbresult::FBResultBuilder response(fb_result);
|
auto response = MakeFBResponse(sub_routes, fb_result, [this, &fb_result, &sub_matchings]() { return MakeTracepoints(fb_result, sub_matchings); });
|
||||||
|
|
||||||
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)));
|
|
||||||
|
|
||||||
fb_result.Finish(response.Finish());
|
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
|
MakeTracepoints(flatbuffers::FlatBufferBuilder &fb_result, const std::vector<map_matching::SubMatching> &sub_matchings) const
|
||||||
{
|
{
|
||||||
std::vector<flatbuffers::Offset<fbresult::Waypoint>> waypoints;
|
std::vector<flatbuffers::Offset<fbresult::Waypoint>> waypoints;
|
||||||
@ -156,7 +143,7 @@ class MatchAPI final : public RouteAPI
|
|||||||
waypoints.push_back(waypoint.Finish());
|
waypoints.push_back(waypoint.Finish());
|
||||||
}
|
}
|
||||||
|
|
||||||
return waypoints;
|
return fb_result.CreateVector(waypoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
util::json::Array
|
util::json::Array
|
||||||
|
@ -42,7 +42,7 @@ public:
|
|||||||
: BaseAPI(facade_, parameters_), parameters(parameters_) {
|
: BaseAPI(facade_, parameters_), parameters(parameters_) {
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void
|
void
|
||||||
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
||||||
const std::vector<PhantomNodes>
|
const std::vector<PhantomNodes>
|
||||||
&all_start_end_points, // all used coordinates, ignoring waypoints= parameter
|
&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
|
&all_start_end_points, // all used coordinates, ignoring waypoints= parameter
|
||||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
flatbuffers::FlatBufferBuilder &fb_result) const
|
||||||
{
|
{
|
||||||
|
auto response = MakeFBResponse(raw_routes, fb_result, [this, &all_start_end_points, &fb_result]() {
|
||||||
fbresult::FBResultBuilder response(fb_result);
|
return BaseAPI::MakeWaypoints(fb_result, all_start_end_points);
|
||||||
|
});
|
||||||
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 data_timestamp = facade.GetTimestamp();
|
auto data_timestamp = facade.GetTimestamp();
|
||||||
if (!data_timestamp.empty())
|
if (!data_timestamp.empty())
|
||||||
@ -93,6 +77,7 @@ public:
|
|||||||
|
|
||||||
fb_result.Finish(response.Finish());
|
fb_result.Finish(response.Finish());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
MakeResponse(const InternalManyRoutesResult &raw_routes,
|
||||||
const std::vector<PhantomNodes>
|
const std::vector<PhantomNodes>
|
||||||
@ -123,6 +108,35 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
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>
|
template <typename BuilderType, typename ForwardIter>
|
||||||
void MakeGeometry(BuilderType builder, ForwardIter begin, ForwardIter end) const
|
void MakeGeometry(BuilderType builder, ForwardIter begin, ForwardIter end) const
|
||||||
{
|
{
|
||||||
|
@ -45,20 +45,8 @@ class TripAPI final : public RouteAPI
|
|||||||
const std::vector<PhantomNode> &phantoms,
|
const std::vector<PhantomNode> &phantoms,
|
||||||
flatbuffers::FlatBufferBuilder &fb_result) const
|
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());
|
fb_result.Finish(response.Finish());
|
||||||
}
|
}
|
||||||
void MakeResponse(const std::vector<std::vector<NodeID>> &sub_trips,
|
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<std::vector<NodeID>> &sub_trips,
|
||||||
const std::vector<PhantomNode> &phantoms) const
|
const std::vector<PhantomNode> &phantoms) const
|
||||||
{
|
{
|
||||||
@ -122,7 +110,7 @@ class TripAPI final : public RouteAPI
|
|||||||
waypoints.push_back(waypoint.Finish());
|
waypoints.push_back(waypoint.Finish());
|
||||||
}
|
}
|
||||||
|
|
||||||
return waypoints;
|
return fb_result.CreateVector(waypoints);
|
||||||
}
|
}
|
||||||
|
|
||||||
util::json::Array MakeWaypoints(const std::vector<std::vector<NodeID>> &sub_trips,
|
util::json::Array MakeWaypoints(const std::vector<std::vector<NodeID>> &sub_trips,
|
||||||
|
Loading…
Reference in New Issue
Block a user