diff --git a/pedestrian_routing_benchmarks/pedestrian_routing_benchmarks.cpp b/pedestrian_routing_benchmarks/pedestrian_routing_benchmarks.cpp index e1ad174394..be57f3089a 100644 --- a/pedestrian_routing_benchmarks/pedestrian_routing_benchmarks.cpp +++ b/pedestrian_routing_benchmarks/pedestrian_routing_benchmarks.cpp @@ -54,7 +54,7 @@ void TestTwoPoints(uint32_t featureIdStart, uint32_t segIdStart, uint32_t featur my::Timer timer; LOG(LINFO, ("Calculating routing...")); - routing::IRouter::ResultCode resultCode = router.CalculateRouteP2P(startPos, finalPos, route); + routing::IRouter::ResultCode resultCode = router.CalculateRoute(startPos, finalPos, route); CHECK_EQUAL(routing::IRouter::NoError, resultCode, ()); LOG(LINFO, ("Route length:", route.size())); LOG(LINFO, ("Elapsed:", timer.ElapsedSeconds(), "seconds")); diff --git a/routing/astar_router.cpp b/routing/astar_router.cpp index b580e219d3..10da8686ed 100644 --- a/routing/astar_router.cpp +++ b/routing/astar_router.cpp @@ -6,9 +6,8 @@ namespace routing { -IRouter::ResultCode AStarRouter::CalculateRouteP2P(RoadPos const & startPos, - RoadPos const & finalPos, - vector & route) +IRouter::ResultCode AStarRouter::CalculateRoute(RoadPos const & startPos, RoadPos const & finalPos, + vector & route) { RoadGraph graph(*m_roadGraph); m_algo.SetGraph(graph); diff --git a/routing/astar_router.hpp b/routing/astar_router.hpp index 4808c78f0b..2b80e2237b 100644 --- a/routing/astar_router.hpp +++ b/routing/astar_router.hpp @@ -19,8 +19,8 @@ public: void ClearState() override { Reset(); } // RoadGraphRouter overrides: - ResultCode CalculateRouteP2P(RoadPos const & startPos, RoadPos const & finalPos, - vector & route) override; + ResultCode CalculateRoute(RoadPos const & startPos, RoadPos const & finalPos, + vector & route) override; // my::Cancellable overrides: void Reset() override { m_algo.Reset(); } diff --git a/routing/features_road_graph.cpp b/routing/features_road_graph.cpp index 75bcbf51bb..a7b5992f46 100644 --- a/routing/features_road_graph.cpp +++ b/routing/features_road_graph.cpp @@ -17,6 +17,9 @@ namespace { uint32_t const FEATURE_CACHE_SIZE = 10; double const READ_CROSS_EPSILON = 1.0E-4; + +bool IsStart(RoadPos const & rp) { return rp.GetFeatureId() == RoadPos::kFakeStartFeatureId; } +bool IsFinal(RoadPos const & rp) { return rp.GetFeatureId() == RoadPos::kFakeFinalFeatureId; } } // namespace /// @todo Factor out vehicle model as a parameter for the features graph. @@ -113,12 +116,12 @@ void FeaturesRoadGraph::LoadFeature(uint32_t featureId, FeatureType & ft) void FeaturesRoadGraph::GetNearestTurns(RoadPos const & pos, vector & turns) { - if (pos.IsStart()) + if (IsStart(pos)) { turns.insert(turns.end(), m_startVicinityTurns.begin(), m_startVicinityTurns.end()); return; } - if (pos.IsFinal()) + if (IsFinal(pos)) { turns.insert(turns.end(), m_finalVicinityTurns.begin(), m_finalVicinityTurns.end()); return; diff --git a/routing/road_graph.hpp b/routing/road_graph.hpp index 314586788f..1a9f5118f3 100644 --- a/routing/road_graph.hpp +++ b/routing/road_graph.hpp @@ -19,10 +19,11 @@ public: // Our routers (such as a-star) use RoadPos as vertices and we receive PointD from the user. // Every time a route is calculated, we create a fake RoadPos with a fake featureId to // place the real starting point on it (and also do the same for the final point). - // The constant here is used as those fake features' ids. + // The constants here are used as those fake features' ids. /// @todo The constant value is taken to comply with an assert in the constructor /// that is terrible, wrong and to be rewritten in a separate CL. - static constexpr uint32_t FakeFeatureId = 1U << 29; + static constexpr uint32_t kFakeStartFeatureId = (1U << 30) - 1; + static constexpr uint32_t kFakeFinalFeatureId = (1U << 30) - 2; RoadPos() : m_featureId(0), m_segId(0), m_segEndpoint(0, 0) {} RoadPos(uint32_t featureId, bool forward, size_t segId, @@ -34,9 +35,6 @@ public: uint32_t GetSegStartPointId() const { return m_segId + (IsForward() ? 0 : 1); } uint32_t GetSegEndPointId() const { return m_segId + (IsForward() ? 1 : 0); } m2::PointD const & GetSegEndpoint() const { return m_segEndpoint; } - bool IsFake() const { return GetFeatureId() == FakeFeatureId; } - bool IsStart() const { return IsFake() && GetSegId() == 0; } - bool IsFinal() const { return IsFake() && GetSegId() == 1; } bool operator==(RoadPos const & r) const { diff --git a/routing/road_graph_router.cpp b/routing/road_graph_router.cpp index d5422e4fb9..a84c97280e 100644 --- a/routing/road_graph_router.cpp +++ b/routing/road_graph_router.cpp @@ -28,15 +28,15 @@ double TimeBetweenSec(m2::PointD const & v, m2::PointD const & w) return MercatorBounds::DistanceOnEarth(v, w) / kMaxSpeedMPS; } -void AddFakeTurns(RoadPos const & rp1, vector const & vicinity, +void AddFakeTurns(RoadPos const & rp, vector const & vicinity, vector & turns) { - for (RoadPos const & rp2 : vicinity) + for (RoadPos const & vrp : vicinity) { PossibleTurn t; - t.m_pos = rp2; + t.m_pos = vrp; /// @todo Do we need other fields? Do we even need m_secondsCovered? - t.m_secondsCovered = TimeBetweenSec(rp1.GetSegEndpoint(), rp2.GetSegEndpoint()); + t.m_secondsCovered = TimeBetweenSec(rp.GetSegEndpoint(), vrp.GetSegEndpoint()); turns.push_back(t); } } @@ -93,14 +93,14 @@ IRouter::ResultCode RoadGraphRouter::CalculateRoute(m2::PointD const & startPoin my::Timer timer; timer.Reset(); - RoadPos startPos(RoadPos::FakeFeatureId, true /* forward */, 0 /* segId */, startPoint); - RoadPos finalPos(RoadPos::FakeFeatureId, true /* forward */, 1 /* segId */, finalPoint); + RoadPos startPos(RoadPos::kFakeStartFeatureId, true /* forward */, 0 /* segId */, startPoint); + RoadPos finalPos(RoadPos::kFakeFinalFeatureId, true /* forward */, 0 /* segId */, finalPoint); AddFakeTurns(startPos, startVicinity, m_roadGraph->m_startVicinityTurns); AddFakeTurns(finalPos, finalVicinity, m_roadGraph->m_finalVicinityTurns); vector routePos; - IRouter::ResultCode resultCode = CalculateRouteP2P(startPos, finalPos, routePos); + IRouter::ResultCode resultCode = CalculateRoute(startPos, finalPos, routePos); /// @todo They have fake feature ids. Can we still draw them? ASSERT(routePos.back() == finalPos, ()); diff --git a/routing/road_graph_router.hpp b/routing/road_graph_router.hpp index ceede4eb89..7acd427c2a 100644 --- a/routing/road_graph_router.hpp +++ b/routing/road_graph_router.hpp @@ -21,8 +21,8 @@ public: ResultCode CalculateRoute(m2::PointD const & startPoint, m2::PointD const & startDirection, m2::PointD const & finalPoint, Route & route) override; - virtual ResultCode CalculateRouteP2P(RoadPos const & startPos, RoadPos const & finalPos, - vector & route) = 0; + virtual ResultCode CalculateRoute(RoadPos const & startPos, RoadPos const & finalPos, + vector & route) = 0; virtual void SetRoadGraph(unique_ptr && roadGraph) { m_roadGraph = move(roadGraph); } inline IRoadGraph * GetGraph() { return m_roadGraph.get(); } diff --git a/routing/routing_tests/astar_router_test.cpp b/routing/routing_tests/astar_router_test.cpp index 7459bd1684..9e59fc98c2 100644 --- a/routing/routing_tests/astar_router_test.cpp +++ b/routing/routing_tests/astar_router_test.cpp @@ -25,7 +25,7 @@ void TestAStarRouterMock(RoadPos const & startPos, RoadPos const & finalPos, router.SetRoadGraph(move(graph)); } vector result; - TEST_EQUAL(IRouter::NoError, router.CalculateRouteP2P(startPos, finalPos, result), ()); + TEST_EQUAL(IRouter::NoError, router.CalculateRoute(startPos, finalPos, result), ()); Route route(router.GetName()); router.GetGraph()->ReconstructPath(result, route);