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