diff options
Diffstat (limited to 'boost/geometry/algorithms/detail/is_valid/linear.hpp')
-rw-r--r-- | boost/geometry/algorithms/detail/is_valid/linear.hpp | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/boost/geometry/algorithms/detail/is_valid/linear.hpp b/boost/geometry/algorithms/detail/is_valid/linear.hpp index 6bc6b86cf8..39cb36ef5b 100644 --- a/boost/geometry/algorithms/detail/is_valid/linear.hpp +++ b/boost/geometry/algorithms/detail/is_valid/linear.hpp @@ -43,9 +43,10 @@ namespace detail { namespace is_valid template <typename Linestring> struct is_valid_linestring { - template <typename VisitPolicy> + template <typename VisitPolicy, typename Strategy> static inline bool apply(Linestring const& linestring, - VisitPolicy& visitor) + VisitPolicy& visitor, + Strategy const& strategy) { if (has_invalid_coordinate<Linestring>::apply(linestring, visitor)) { @@ -75,15 +76,12 @@ struct is_valid_linestring { return visitor.template apply<no_failure>(); } - return ! has_spikes<Linestring, closed>::apply(linestring, visitor); - } - template <typename VisitPolicy, typename Strategy> - static inline bool apply(Linestring const& linestring, - VisitPolicy& visitor, - Strategy const&) - { - return apply(linestring, visitor); + return ! has_spikes + < + Linestring, closed + >::apply(linestring, visitor, + strategy.get_side_strategy()); } }; @@ -132,10 +130,13 @@ class is_valid > { private: - template <typename VisitPolicy> + template <typename VisitPolicy, typename Strategy> struct per_linestring { - per_linestring(VisitPolicy& policy) : m_policy(policy) {} + per_linestring(VisitPolicy& policy, Strategy const& strategy) + : m_policy(policy) + , m_strategy(strategy) + {} template <typename Linestring> inline bool apply(Linestring const& linestring) const @@ -143,17 +144,18 @@ private: return detail::is_valid::is_valid_linestring < Linestring - >::apply(linestring, m_policy); + >::apply(linestring, m_policy, m_strategy); } VisitPolicy& m_policy; + Strategy const& m_strategy; }; public: template <typename VisitPolicy, typename Strategy> static inline bool apply(MultiLinestring const& multilinestring, VisitPolicy& visitor, - Strategy const&) + Strategy const& strategy) { if (BOOST_GEOMETRY_CONDITION( AllowEmptyMultiGeometries && boost::empty(multilinestring))) @@ -161,13 +163,15 @@ public: return visitor.template apply<no_failure>(); } + typedef per_linestring<VisitPolicy, Strategy> per_ls; + return detail::check_iterator_range < - per_linestring<VisitPolicy>, + per_ls, false // do not check for empty multilinestring (done above) >::apply(boost::begin(multilinestring), boost::end(multilinestring), - per_linestring<VisitPolicy>(visitor)); + per_ls(visitor, strategy)); } }; |