| 322 | // and minimal |turnsDir| is - single ReachedYourDestination with m_index == 5. |
| 323 | |
| 324 | void DirectionsEngine::MakeTurnAnnotation(IndexRoadGraph::EdgeVector const & routeEdges, |
| 325 | vector<RouteSegment> & routeSegments) |
| 326 | { |
| 327 | CHECK_GREATER_OR_EQUAL(routeEdges.size(), 2, ()); |
| 328 | |
| 329 | RoutingEngineResult result(routeEdges, m_adjacentEdges, m_pathSegments); |
| 330 | |
| 331 | routeSegments.reserve(routeEdges.size()); |
| 332 | |
| 333 | RoutingSettings const vehicleSettings = GetRoutingSettings(m_vehicleType); |
| 334 | |
| 335 | auto const & loadedSegments = result.GetSegments(); // the same as m_pathSegments |
| 336 | |
| 337 | // First point of first loadedSegment is ignored. This is the reason for: |
| 338 | // ASSERT_EQUAL(loadedSegments.front().m_path.back(), loadedSegments.front().m_path.front(), ()); |
| 339 | |
| 340 | size_t skipTurnSegments = 0; |
| 341 | for (size_t idxLoadedSegment = 0; idxLoadedSegment < loadedSegments.size(); ++idxLoadedSegment) |
| 342 | { |
| 343 | auto const & loadedSegment = loadedSegments[idxLoadedSegment]; |
| 344 | |
| 345 | CHECK(loadedSegment.IsValid(), ()); |
| 346 | CHECK_GREATER_OR_EQUAL(loadedSegment.m_segments.size(), 1, ()); |
| 347 | CHECK_EQUAL(loadedSegment.m_segments.size() + 1, loadedSegment.m_path.size(), ()); |
| 348 | |
| 349 | auto rni = loadedSegment.m_roadNameInfo; |
| 350 | |
| 351 | for (size_t i = 0; i < loadedSegment.m_segments.size() - 1; ++i) |
| 352 | { |
| 353 | auto const & junction = loadedSegment.m_path[i + 1]; |
| 354 | routeSegments.emplace_back(loadedSegment.m_segments[i], TurnItem(), junction, rni); |
| 355 | if (i == 0) |
| 356 | rni = {"", "", "", "", "", loadedSegment.m_isLink}; |
| 357 | } |
| 358 | |
| 359 | // For the last segment of current loadedSegment put info about turn |
| 360 | // from current loadedSegment to the next one. |
| 361 | TurnItem turnItem; |
| 362 | if (skipTurnSegments == 0) |
| 363 | { |
| 364 | turnItem.m_index = base::asserted_cast<uint32_t>(routeSegments.size() + 1); |
| 365 | skipTurnSegments = GetTurnDirection(result, idxLoadedSegment + 1, *m_numMwmIds, vehicleSettings, turnItem); |
| 366 | } |
| 367 | else |
| 368 | --skipTurnSegments; |
| 369 | |
| 370 | routeSegments.emplace_back(loadedSegment.m_segments.back(), turnItem, loadedSegment.m_path.back(), rni); |
| 371 | } |
| 372 | |
| 373 | // ASSERT_EQUAL(routeSegments.front().GetJunction(), result.GetStartPoint(), ()); |
| 374 | // ASSERT_EQUAL(routeSegments.back().GetJunction(), result.GetEndPoint(), ()); |
| 375 | |
| 376 | FixupTurns(routeSegments); |
| 377 | } |
| 378 | |
| 379 | } // namespace routing |
nothing calls this directly
no test coverage detected