Imported Upstream version 1.72.0
[platform/upstream/boost.git] / boost / geometry / algorithms / detail / buffer / turn_in_original_visitor.hpp
index 5236da1..6b7635e 100644 (file)
@@ -150,16 +150,11 @@ inline bool point_in_section(Strategy& strategy, State& state,
 }
 
 
-template <typename Point, typename Original>
-inline int point_in_original(Point const& point, Original const& original)
+template <typename Point, typename Original, typename PointInGeometryStrategy>
+inline int point_in_original(Point const& point, Original const& original,
+                             PointInGeometryStrategy const& strategy)
 {
-    // The winding strategy is scanning in x direction
-    // therefore it's critical to pass direction calculated
-    // for x dimension below.
-    typedef strategy::within::winding<Point> strategy_type;
-
-    typename strategy_type::state_type state;
-    strategy_type strategy;
+    typename PointInGeometryStrategy::state_type state;
 
     if (boost::size(original.m_sections) == 0
         || boost::size(original.m_ring) - boost::size(original.m_sections) < 16)
@@ -207,12 +202,13 @@ inline int point_in_original(Point const& point, Original const& original)
 }
 
 
-template <typename Turns>
+template <typename Turns, typename PointInGeometryStrategy>
 class turn_in_original_visitor
 {
 public:
-    turn_in_original_visitor(Turns& turns)
+    turn_in_original_visitor(Turns& turns, PointInGeometryStrategy const& strategy)
         : m_mutable_turns(turns)
+        , m_point_in_geometry_strategy(strategy)
     {}
 
     template <typename Turn, typename Original>
@@ -232,7 +228,7 @@ public:
             return true;
         }
 
-        int const code = point_in_original(turn.robust_point, original);
+        int const code = point_in_original(turn.robust_point, original, m_point_in_geometry_strategy);
 
         if (code == -1)
         {
@@ -269,6 +265,7 @@ public:
 
 private :
     Turns& m_mutable_turns;
+    PointInGeometryStrategy const& m_point_in_geometry_strategy;
 };