diff options
Diffstat (limited to 'boost/geometry/algorithms/detail/is_valid/multipolygon.hpp')
-rw-r--r-- | boost/geometry/algorithms/detail/is_valid/multipolygon.hpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp index 0025445c2c..84dacc57f1 100644 --- a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp +++ b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp @@ -1,6 +1,6 @@ // Boost.Geometry (aka GGL, Generic Geometry Library) -// Copyright (c) 2014-2015, Oracle and/or its affiliates. +// Copyright (c) 2014-2017, Oracle and/or its affiliates. // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle @@ -43,6 +43,8 @@ #include <boost/geometry/algorithms/dispatch/is_valid.hpp> +#include <boost/geometry/strategies/intersection.hpp> + namespace boost { namespace geometry { @@ -109,10 +111,10 @@ private: geometry::partition < - geometry::model::box<typename point_type<MultiPolygon>::type>, - typename base::expand_box, - typename base::overlaps_box - >::apply(polygon_iterators, item_visitor); + geometry::model::box<typename point_type<MultiPolygon>::type> + >::apply(polygon_iterators, item_visitor, + typename base::expand_box(), + typename base::overlaps_box()); if (item_visitor.items_overlap) { @@ -235,23 +237,28 @@ private: } - template <typename VisitPolicy> + template <typename VisitPolicy, typename Strategy> struct per_polygon { - per_polygon(VisitPolicy& policy) : m_policy(policy) {} + per_polygon(VisitPolicy& policy, Strategy const& strategy) + : m_policy(policy) + , m_strategy(strategy) + {} template <typename Polygon> inline bool apply(Polygon const& polygon) const { - return base::apply(polygon, m_policy); + return base::apply(polygon, m_policy, m_strategy); } VisitPolicy& m_policy; + Strategy const& m_strategy; }; public: - template <typename VisitPolicy> + template <typename VisitPolicy, typename Strategy> static inline bool apply(MultiPolygon const& multipolygon, - VisitPolicy& visitor) + VisitPolicy& visitor, + Strategy const& strategy) { typedef debug_validity_phase<MultiPolygon> debug_phase; @@ -266,11 +273,11 @@ public: if (! detail::check_iterator_range < - per_polygon<VisitPolicy>, + per_polygon<VisitPolicy, Strategy>, false // do not check for empty multipolygon (done above) >::apply(boost::begin(multipolygon), boost::end(multipolygon), - per_polygon<VisitPolicy>(visitor))) + per_polygon<VisitPolicy, Strategy>(visitor, strategy))) { return false; } @@ -283,7 +290,7 @@ public: std::deque<typename has_valid_turns::turn_type> turns; bool has_invalid_turns = - ! has_valid_turns::apply(multipolygon, turns, visitor); + ! has_valid_turns::apply(multipolygon, turns, visitor, strategy); debug_print_turns(turns.begin(), turns.end()); if (has_invalid_turns) |