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:
Diffstat (limited to 'routing/road_graph.hpp')
-rw-r--r--routing/road_graph.hpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/routing/road_graph.hpp b/routing/road_graph.hpp
index 192841a295..3ba86baff0 100644
--- a/routing/road_graph.hpp
+++ b/routing/road_graph.hpp
@@ -77,6 +77,12 @@ private:
Junction m_endJunction;
};
+inline bool PointsAlmostEqualAbs(const m2::PointD & pt1, const m2::PointD & pt2)
+{
+ double constexpr kEpsilon = 1e-6;
+ return my::AlmostEqualAbs(pt1.x, pt2.x, kEpsilon) && my::AlmostEqualAbs(pt1.y, pt2.y, kEpsilon);
+}
+
class IRoadGraph
{
public:
@@ -123,6 +129,21 @@ 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)
+ {
+ for (size_t i = 0; i < roadInfo.m_points.size(); ++i)
+ {
+ m2::PointD const & p = roadInfo.m_points[i];
+
+ if (!PointsAlmostEqualAbs(m_cross, p))
+ continue;
+
+ tailFn(i, p);
+ headFn(i, p);
+ }
+ }
+
m2::PointD const m_cross;
IRoadGraph::Mode const m_mode;
TEdgeVector & m_edges;
@@ -136,6 +157,7 @@ public:
{
}
+ private:
// ICrossEdgesLoader overrides:
virtual void LoadEdges(FeatureID const & featureId, RoadInfo const & roadInfo) override;
};
@@ -147,6 +169,8 @@ public:
: ICrossEdgesLoader(cross, mode, edges)
{
}
+
+ private:
// ICrossEdgesLoader overrides:
virtual void LoadEdges(FeatureID const & featureId, RoadInfo const & roadInfo) override;
};