Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-05-27 18:05:55 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-05-27 18:10:01 +0300
commit8f7da1501a7382a7ee16641fc459ee4354f43d37 (patch)
tree5ff985b5cbf7e51b6c46d52ffb7ed5e9cdc75ffb /routing
parentde449b38b67dddd6308c6b1875e6818e08851b1a (diff)
[bicycle routing] Simplifying IRoadGraph::ForEachEdge().
Diffstat (limited to 'routing')
-rw-r--r--routing/road_graph.cpp25
-rw-r--r--routing/road_graph.hpp26
2 files changed, 19 insertions, 32 deletions
diff --git a/routing/road_graph.cpp b/routing/road_graph.cpp
index 31ef1db95f..271e258e63 100644
--- a/routing/road_graph.cpp
+++ b/routing/road_graph.cpp
@@ -158,33 +158,20 @@ IRoadGraph::RoadInfo::RoadInfo(bool bidirectional, double speedKMPH, initializer
// IRoadGraph::CrossOutgoingLoader ---------------------------------------------
void IRoadGraph::CrossOutgoingLoader::LoadEdges(FeatureID const & featureId, RoadInfo const & roadInfo)
{
- ForEachEdge(roadInfo, [&featureId, &roadInfo, this](size_t i, m2::PointD const & p)
+ ForEachEdge(roadInfo, [&featureId, &roadInfo, this](size_t segId, m2::PointD const & endPoint, bool forward)
{
- ASSERT_LESS(i, roadInfo.m_points.size() - 1, ());
- m_edges.emplace_back(featureId, true /* forward */, i, p, roadInfo.m_points[i + 1]);
- },
- [&featureId, &roadInfo, this](size_t i, m2::PointD const & p)
- {
- ASSERT_LESS(i, roadInfo.m_points.size(), ());
- if (roadInfo.m_bidirectional || m_mode == IRoadGraph::Mode::IgnoreOnewayTag)
- m_edges.emplace_back(featureId, false /* forward */, i - 1, p, roadInfo.m_points[i - 1]);
+ if (forward || roadInfo.m_bidirectional || m_mode == IRoadGraph::Mode::IgnoreOnewayTag)
+ m_edges.emplace_back(featureId, forward, segId, m_cross, endPoint);
});
}
// IRoadGraph::CrossIngoingLoader ----------------------------------------------
void IRoadGraph::CrossIngoingLoader::LoadEdges(FeatureID const & featureId, RoadInfo const & roadInfo)
{
- ForEachEdge(roadInfo,
- [&featureId, &roadInfo, this](size_t i, m2::PointD const & p)
- {
- ASSERT_LESS(i, roadInfo.m_points.size() - 1, ());
- if (roadInfo.m_bidirectional || m_mode == IRoadGraph::Mode::IgnoreOnewayTag)
- m_edges.emplace_back(featureId, false /* forward */, i, roadInfo.m_points[i + 1], p);
- },
- [&featureId, &roadInfo, this](size_t i, m2::PointD const & p)
+ ForEachEdge(roadInfo, [&featureId, &roadInfo, this](size_t segId, m2::PointD const & endPoint, bool forward)
{
- ASSERT_LESS(i, roadInfo.m_points.size() , ());
- m_edges.emplace_back(featureId, true /* forward */, i - 1, roadInfo.m_points[i - 1], p);
+ if (!forward || roadInfo.m_bidirectional || m_mode == IRoadGraph::Mode::IgnoreOnewayTag)
+ m_edges.emplace_back(featureId, !forward, segId, endPoint, m_cross);
});
}
diff --git a/routing/road_graph.hpp b/routing/road_graph.hpp
index f5fdf160c7..e97a9cb0f2 100644
--- a/routing/road_graph.hpp
+++ b/routing/road_graph.hpp
@@ -125,27 +125,27 @@ public:
virtual void LoadEdges(FeatureID const & featureId, RoadInfo const & roadInfo) = 0;
protected:
- template <typename THeadFn, typename TTailFn>
- void ForEachEdge(RoadInfo const & roadInfo, THeadFn && headFn, TTailFn && tailFn)
+ template <typename TFn>
+ void ForEachEdge(RoadInfo const & roadInfo, TFn && fn)
{
for (size_t i = 0; i < roadInfo.m_points.size(); ++i)
{
- m2::PointD const & p = roadInfo.m_points[i];
-
- if (!my::AlmostEqualAbs(m_cross, p, kPointsEqualEpsilon))
+ if (!my::AlmostEqualAbs(m_cross, roadInfo.m_points[i], kPointsEqualEpsilon))
continue;
- if (i > 0)
+ if (i < roadInfo.m_points.size() - 1)
{
- // p
- // o------------>o
- tailFn(i, p);
+ // Head of the edge.
+ // m_cross
+ // o------------>o
+ fn(i, roadInfo.m_points[i + 1], true /* forward */);
}
- if (i < roadInfo.m_points.size() - 1)
+ if (i > 0)
{
- // p
- // o------------>o
- headFn(i, p);
+ // Tail of the edge.
+ // m_cross
+ // o------------>o
+ fn(i - 1, roadInfo.m_points[i - 1], false /* backward */);
}
}
}