summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/geometry/algorithms/detail/is_valid/multipolygon.hpp')
-rw-r--r--boost/geometry/algorithms/detail/is_valid/multipolygon.hpp42
1 files changed, 22 insertions, 20 deletions
diff --git a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
index 0b3b4c4a74..5af933de85 100644
--- a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
+++ b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp
@@ -1,7 +1,9 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
-// Copyright (c) 2014-2020, Oracle and/or its affiliates.
+// Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland.
+// Copyright (c) 2014-2021, Oracle and/or its affiliates.
+// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
@@ -26,7 +28,7 @@
#include <boost/geometry/core/ring_type.hpp>
#include <boost/geometry/core/tags.hpp>
-#include <boost/geometry/util/condition.hpp>
+#include <boost/geometry/util/constexpr.hpp>
#include <boost/geometry/util/range.hpp>
#include <boost/geometry/geometries/box.hpp>
@@ -34,7 +36,6 @@
#include <boost/geometry/algorithms/validity_failure_type.hpp>
#include <boost/geometry/algorithms/within.hpp>
-#include <boost/geometry/algorithms/detail/check_iterator_range.hpp>
#include <boost/geometry/algorithms/detail/partition.hpp>
#include <boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp>
@@ -257,55 +258,56 @@ private:
template <typename VisitPolicy, typename Strategy>
- struct per_polygon
+ struct is_invalid_polygon
{
- per_polygon(VisitPolicy& policy, Strategy const& strategy)
+ is_invalid_polygon(VisitPolicy& policy, Strategy const& strategy)
: m_policy(policy)
, m_strategy(strategy)
{}
template <typename Polygon>
- inline bool apply(Polygon const& polygon) const
+ inline bool operator()(Polygon const& polygon) const
{
- return base::apply(polygon, m_policy, m_strategy);
+ return ! base::apply(polygon, m_policy, m_strategy);
}
VisitPolicy& m_policy;
Strategy const& m_strategy;
};
+
public:
template <typename VisitPolicy, typename Strategy>
static inline bool apply(MultiPolygon const& multipolygon,
VisitPolicy& visitor,
Strategy const& strategy)
{
- typedef debug_validity_phase<MultiPolygon> debug_phase;
+ using debug_phase = debug_validity_phase<MultiPolygon>;
- if (BOOST_GEOMETRY_CONDITION(AllowEmptyMultiGeometries)
- && boost::empty(multipolygon))
+ if BOOST_GEOMETRY_CONSTEXPR (AllowEmptyMultiGeometries)
{
- return visitor.template apply<no_failure>();
+ if (boost::empty(multipolygon))
+ {
+ return visitor.template apply<no_failure>();
+ }
}
// check validity of all polygons ring
debug_phase::apply(1);
- if (! detail::check_iterator_range
- <
- per_polygon<VisitPolicy, Strategy>,
- false // do not check for empty multipolygon (done above)
- >::apply(boost::begin(multipolygon),
- boost::end(multipolygon),
- per_polygon<VisitPolicy, Strategy>(visitor, strategy)))
+ if (std::any_of(boost::begin(multipolygon), boost::end(multipolygon),
+ is_invalid_polygon<VisitPolicy, Strategy>(visitor, strategy)))
{
return false;
}
-
// compute turns and check if all are acceptable
debug_phase::apply(2);
- typedef has_valid_self_turns<MultiPolygon, typename Strategy::cs_tag> has_valid_turns;
+ using has_valid_turns = has_valid_self_turns
+ <
+ MultiPolygon,
+ typename Strategy::cs_tag
+ >;
std::deque<typename has_valid_turns::turn_type> turns;
bool has_invalid_turns =