Fixes ownership semantics and forwarding references misplacements in the JSON factory
This commit is contained in:
		
							parent
							
								
									6380a6be05
								
							
						
					
					
						commit
						70fb12b10e
					
				| @ -4,6 +4,11 @@ | |||||||
| #include "extractor/turn_instructions.hpp" | #include "extractor/turn_instructions.hpp" | ||||||
| #include "extractor/travel_mode.hpp" | #include "extractor/travel_mode.hpp" | ||||||
| #include "engine/polyline_compressor.hpp" | #include "engine/polyline_compressor.hpp" | ||||||
|  | #include "engine/guidance/route_step.hpp" | ||||||
|  | #include "engine/guidance/step_maneuver.hpp" | ||||||
|  | #include "engine/guidance/route_leg.hpp" | ||||||
|  | #include "engine/guidance/route.hpp" | ||||||
|  | #include "engine/guidance/leg_geometry.hpp" | ||||||
| #include "util/coordinate.hpp" | #include "util/coordinate.hpp" | ||||||
| #include "util/json_container.hpp" | #include "util/json_container.hpp" | ||||||
| 
 | 
 | ||||||
| @ -20,15 +25,6 @@ namespace engine | |||||||
| 
 | 
 | ||||||
| struct Hint; | struct Hint; | ||||||
| 
 | 
 | ||||||
| namespace guidance |  | ||||||
| { |  | ||||||
| class RouteLeg; |  | ||||||
| class RouteStep; |  | ||||||
| class StepManeuver; |  | ||||||
| class Route; |  | ||||||
| class LegGeometry; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| namespace api | namespace api | ||||||
| { | { | ||||||
| namespace json | namespace json | ||||||
| @ -62,19 +58,19 @@ util::json::Object makeGeoJSONLineString(ForwardIter begin, ForwardIter end) | |||||||
| 
 | 
 | ||||||
| util::json::Object makeStepManeuver(const guidance::StepManeuver &maneuver); | util::json::Object makeStepManeuver(const guidance::StepManeuver &maneuver); | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRouteStep(guidance::RouteStep &&step, | util::json::Object makeRouteStep(guidance::RouteStep step, | ||||||
|                                  boost::optional<util::json::Value> geometry); |                                  boost::optional<util::json::Value> geometry); | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRoute(const guidance::Route &route, | util::json::Object makeRoute(const guidance::Route &route, | ||||||
|                              util::json::Array &&legs, |                              util::json::Array legs, | ||||||
|                              boost::optional<util::json::Value> geometry); |                              boost::optional<util::json::Value> geometry); | ||||||
| 
 | 
 | ||||||
| util::json::Object | util::json::Object | ||||||
| makeWaypoint(const util::Coordinate location, std::string &&name, const Hint &hint); | makeWaypoint(const util::Coordinate location, std::string name, const Hint &hint); | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRouteLeg(guidance::RouteLeg &&leg, util::json::Array &&steps); | util::json::Object makeRouteLeg(guidance::RouteLeg leg, util::json::Array steps); | ||||||
| 
 | 
 | ||||||
| util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs, | util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> legs, | ||||||
|                                 std::vector<util::json::Value> step_geometries); |                                 std::vector<util::json::Value> step_geometries); | ||||||
| } | } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,10 +1,5 @@ | |||||||
| #include "engine/api/json_factory.hpp" | #include "engine/api/json_factory.hpp" | ||||||
| 
 | 
 | ||||||
| #include "engine/guidance/route_step.hpp" |  | ||||||
| #include "engine/guidance/step_maneuver.hpp" |  | ||||||
| #include "engine/guidance/route_leg.hpp" |  | ||||||
| #include "engine/guidance/route.hpp" |  | ||||||
| #include "engine/guidance/leg_geometry.hpp" |  | ||||||
| #include "engine/polyline_compressor.hpp" | #include "engine/polyline_compressor.hpp" | ||||||
| #include "engine/hint.hpp" | #include "engine/hint.hpp" | ||||||
| 
 | 
 | ||||||
| @ -171,20 +166,20 @@ util::json::Object makeStepManeuver(const guidance::StepManeuver &maneuver) | |||||||
|     return step_maneuver; |     return step_maneuver; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRouteStep(guidance::RouteStep &&step, util::json::Value geometry) | util::json::Object makeRouteStep(guidance::RouteStep step, util::json::Value geometry) | ||||||
| { | { | ||||||
|     util::json::Object route_step; |     util::json::Object route_step; | ||||||
|     route_step.values["distance"] = step.distance; |     route_step.values["distance"] = std::move(step.distance); | ||||||
|     route_step.values["duration"] = step.duration; |     route_step.values["duration"] = std::move(step.duration); | ||||||
|     route_step.values["name"] = std::move(step.name); |     route_step.values["name"] = std::move(step.name); | ||||||
|     route_step.values["mode"] = detail::modeToString(step.mode); |     route_step.values["mode"] = detail::modeToString(std::move(step.mode)); | ||||||
|     route_step.values["maneuver"] = makeStepManeuver(step.maneuver); |     route_step.values["maneuver"] = makeStepManeuver(std::move(step.maneuver)); | ||||||
|     route_step.values["geometry"] = std::move(geometry); |     route_step.values["geometry"] = std::move(geometry); | ||||||
|     return route_step; |     return route_step; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRoute(const guidance::Route &route, | util::json::Object makeRoute(const guidance::Route &route, | ||||||
|                              util::json::Array &&legs, |                              util::json::Array legs, | ||||||
|                              boost::optional<util::json::Value> geometry) |                              boost::optional<util::json::Value> geometry) | ||||||
| { | { | ||||||
|     util::json::Object json_route; |     util::json::Object json_route; | ||||||
| @ -193,13 +188,12 @@ util::json::Object makeRoute(const guidance::Route &route, | |||||||
|     json_route.values["legs"] = std::move(legs); |     json_route.values["legs"] = std::move(legs); | ||||||
|     if (geometry) |     if (geometry) | ||||||
|     { |     { | ||||||
|         json_route.values["geometry"] = std::move(*geometry); |         json_route.values["geometry"] = *std::move(geometry); | ||||||
|     } |     } | ||||||
|     return json_route; |     return json_route; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| util::json::Object | util::json::Object makeWaypoint(const util::Coordinate location, std::string name, const Hint &hint) | ||||||
| makeWaypoint(const util::Coordinate location, std::string &&name, const Hint &hint) |  | ||||||
| { | { | ||||||
|     util::json::Object waypoint; |     util::json::Object waypoint; | ||||||
|     waypoint.values["location"] = detail::coordinateToLonLat(location); |     waypoint.values["location"] = detail::coordinateToLonLat(location); | ||||||
| @ -208,29 +202,29 @@ makeWaypoint(const util::Coordinate location, std::string &&name, const Hint &hi | |||||||
|     return waypoint; |     return waypoint; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| util::json::Object makeRouteLeg(guidance::RouteLeg &&leg, util::json::Array &&steps) | util::json::Object makeRouteLeg(guidance::RouteLeg leg, util::json::Array steps) | ||||||
| { | { | ||||||
|     util::json::Object route_leg; |     util::json::Object route_leg; | ||||||
|     route_leg.values["distance"] = leg.distance; |     route_leg.values["distance"] = std::move(leg.distance); | ||||||
|     route_leg.values["duration"] = leg.duration; |     route_leg.values["duration"] = std::move(leg.duration); | ||||||
|     route_leg.values["summary"] = std::move(leg.summary); |     route_leg.values["summary"] = std::move(leg.summary); | ||||||
|     route_leg.values["steps"] = std::move(steps); |     route_leg.values["steps"] = std::move(steps); | ||||||
|     return route_leg; |     return route_leg; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> &&legs, | util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> legs, | ||||||
|                                 std::vector<util::json::Value> step_geometries) |                                 std::vector<util::json::Value> step_geometries) | ||||||
| { | { | ||||||
|     util::json::Array json_legs; |     util::json::Array json_legs; | ||||||
|     auto step_geometry_iter = step_geometries.begin(); |     auto step_geometry_iter = step_geometries.begin(); | ||||||
|     for (const auto idx : boost::irange(0UL, legs.size())) |     for (const auto idx : boost::irange(0UL, legs.size())) | ||||||
|     { |     { | ||||||
|         auto &&leg = std::move(legs[idx]); |         auto leg = std::move(legs[idx]); | ||||||
|         util::json::Array json_steps; |         util::json::Array json_steps; | ||||||
|         json_steps.values.reserve(leg.steps.size()); |         json_steps.values.reserve(leg.steps.size()); | ||||||
|         std::transform( |         std::transform( | ||||||
|             std::make_move_iterator(leg.steps.begin()), std::make_move_iterator(leg.steps.end()), |             std::make_move_iterator(leg.steps.begin()), std::make_move_iterator(leg.steps.end()), | ||||||
|             std::back_inserter(json_steps.values), [&step_geometry_iter](guidance::RouteStep &&step) |             std::back_inserter(json_steps.values), [&step_geometry_iter](guidance::RouteStep step) | ||||||
|             { |             { | ||||||
|                 return makeRouteStep(std::move(step), std::move(*step_geometry_iter++)); |                 return makeRouteStep(std::move(step), std::move(*step_geometry_iter++)); | ||||||
|             }); |             }); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user