This commit is contained in:
Lev Dragunov 2015-06-22 12:13:38 +03:00 committed by Alex Zolotarev
parent d04626966c
commit ff30928c9c
3 changed files with 26 additions and 23 deletions

View file

@ -184,31 +184,31 @@ double CrossMwmGraph::HeuristicCostEstimate(BorderCross const & v, BorderCross c
return 0;
}
void ConvertToSingleRouterTasks(vector<BorderCross> const & graphCrosses,
void ConvertToSingleRouterTasks(vector<BorderCross> const & graphCrosses,
FeatureGraphNode const & startGraphNode,
FeatureGraphNode const & finalGraphNode,
TCheckedPath & route)
{
route.clear();
for (size_t i = 0; i < graphCrosses.size() - 1; ++i)
for (size_t i = 0; i + 1 < graphCrosses.size(); ++i)
{
route.emplace_back(graphCrosses[i].toNode.node, graphCrosses[i + 1].fromNode.node,
graphCrosses[i].toNode.mwmName);
}
if (!route.empty())
{
//Start virtual node always will be becase they are not compaired in A* algo.
route.front().startNode = startGraphNode;
if (route.empty())
return;
// Stop point lays on out edge, and we have no virtual edge to unpack.
if (route.back().startNode.mwmName != finalGraphNode.mwmName)
route.emplace_back(RoutePathCross(graphCrosses.back().toNode.node,
graphCrosses.back().toNode.node,
graphCrosses.back().toNode.mwmName));
// Starts of virtual nodes are always present because they are not compaired in A* algo.
route.front().startNode = startGraphNode;
route.back().finalNode = finalGraphNode;
}
// Stop point lays on out edge, and we have no virtual edge to unpack.
if (route.back().startNode.mwmName != finalGraphNode.mwmName)
route.emplace_back(graphCrosses.back().toNode.node,
graphCrosses.back().toNode.node,
graphCrosses.back().toNode.mwmName);
route.back().finalNode = finalGraphNode;
}
} // namespace routing

View file

@ -114,7 +114,10 @@ private:
mutable unordered_map<m2::PointD, BorderCross, m2::PointD::Hash> m_cachedNextNodes;
};
//--------------------------------------------------------------------------------------------------
// Helper functions.
//--------------------------------------------------------------------------------------------------
/// Convertor from CrossMwmGraph to cross mwm route task.
void ConvertToSingleRouterTasks(vector<BorderCross> const & graphCrosses,
FeatureGraphNode const & startGraphNode,

View file

@ -1,8 +1,8 @@
#include "testing/testing.hpp"
#include "routing/cross_routing_context.hpp"
#include "routing/cross_mwm_road_graph.hpp"
#include "routing/cross_mwm_router.hpp"
#include "routing/cross_routing_context.hpp"
#include "coding/reader.hpp"
#include "coding/writer.hpp"
@ -15,11 +15,11 @@ namespace
UNIT_TEST(TestCrossRouteConverter)
{
vector<BorderCross> graphCrosses;
CrossNode a(1, "aMap", {0,0}), b(2, "aMap", {2, 2});
CrossNode c(3, "bMap", {3,3}), d(3, "bMap", {4, 4});
graphCrosses.emplace_back(BorderCross(a, b));
graphCrosses.emplace_back(BorderCross(b, c));
graphCrosses.emplace_back(BorderCross(c, d));
CrossNode const a(1, "aMap", {0, 0}), b(2, "aMap", {2, 2});
CrossNode const c(3, "bMap", {3, 3}), d(3, "bMap", {4, 4});
graphCrosses.emplace_back(a, b);
graphCrosses.emplace_back(b, c);
graphCrosses.emplace_back(c, d);
FeatureGraphNode startGraphNode;
startGraphNode.node.forward_node_id = 5;
startGraphNode.mwmName = "aMap";
@ -40,10 +40,10 @@ UNIT_TEST(TestCrossRouteConverter)
UNIT_TEST(TestCrossRouteConverterEdgeCase)
{
vector<BorderCross> graphCrosses;
CrossNode a(1, "aMap", {0,0}), b(2, "aMap", {2, 2});
CrossNode c(3, "bMap", {3,3});
graphCrosses.emplace_back(BorderCross(a, b));
graphCrosses.emplace_back(BorderCross(b, c));
CrossNode const a(1, "aMap", {0, 0}), b(2, "aMap", {2, 2});
CrossNode const c(3, "bMap", {3, 3});
graphCrosses.emplace_back(a, b);
graphCrosses.emplace_back(b, c);
FeatureGraphNode startGraphNode;
startGraphNode.node.forward_node_id = 5;
startGraphNode.mwmName = "aMap";