| 282 | } |
| 283 | |
| 284 | util::json::Array makeRouteLegs(std::vector<guidance::RouteLeg> legs, |
| 285 | std::vector<util::json::Value> leg_geometries, |
| 286 | std::vector<util::json::Value> step_geometries, |
| 287 | std::vector<util::json::Object> annotations) |
| 288 | { |
| 289 | util::json::Array json_legs; |
| 290 | auto step_geometry_iter = step_geometries.begin(); |
| 291 | for (const auto idx : util::irange<std::size_t>(0UL, legs.size())) |
| 292 | { |
| 293 | auto leg = std::move(legs[idx]); |
| 294 | util::json::Array json_steps; |
| 295 | json_steps.values.reserve(leg.steps.size()); |
| 296 | std::transform(std::make_move_iterator(leg.steps.begin()), |
| 297 | std::make_move_iterator(leg.steps.end()), |
| 298 | std::back_inserter(json_steps.values), |
| 299 | [&step_geometry_iter](guidance::RouteStep step) { |
| 300 | return makeRouteStep(std::move(step), std::move(*step_geometry_iter++)); |
| 301 | }); |
| 302 | std::optional<util::json::Object> annotation; |
| 303 | std::optional<util::json::Value> leg_geometry; |
| 304 | if (leg_geometries.size() > 0) |
| 305 | { |
| 306 | leg_geometry = std::move(leg_geometries[idx]); |
| 307 | } |
| 308 | if (annotations.size() > 0) |
| 309 | { |
| 310 | annotation = std::move(annotations[idx]); |
| 311 | } |
| 312 | json_legs.values.push_back(makeRouteLeg( |
| 313 | std::move(leg), std::move(json_steps), std::move(leg_geometry), std::move(annotation))); |
| 314 | } |
| 315 | return json_legs; |
| 316 | } |
| 317 | } // namespace osrm::engine::api::json |
no test coverage detected