summaryrefslogtreecommitdiff
path: root/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp')
-rw-r--r--boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp69
1 files changed, 37 insertions, 32 deletions
diff --git a/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp b/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
index 7da7f2be5e..204a4fe22d 100644
--- a/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
+++ b/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp
@@ -1,7 +1,8 @@
// Boost.Geometry
-// Copyright (c) 2017-2020 Oracle and/or its affiliates.
+// Copyright (c) 2014-2023, Oracle and/or its affiliates.
+// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
// Use, modification and distribution is subject to the Boost Software License,
@@ -94,9 +95,8 @@ struct multi_point_geometry_eb<Geometry, linestring_tag>
template <typename Point, typename Strategy>
bool apply(Point const& boundary_point, Strategy const& strategy)
{
- if ( std::find_if(m_points.begin(), m_points.end(),
- find_pred<Point, Strategy>(boundary_point, strategy))
- == m_points.end() )
+ if ( std::none_of(m_points.begin(), m_points.end(),
+ find_pred<Point, Strategy>(boundary_point, strategy)))
{
m_boundary_found = true;
return false;
@@ -135,7 +135,7 @@ struct multi_point_geometry_eb<Geometry, multi_linestring_tag>
template <typename Point, typename Strategy>
bool apply(Point const& boundary_point, Strategy const&)
{
- typedef geometry::less<void, -1, typename Strategy::cs_tag> less_type;
+ typedef geometry::less<void, -1, Strategy> less_type;
if (! std::binary_search(m_points.begin(), m_points.end(),
boundary_point, less_type()) )
@@ -159,9 +159,9 @@ struct multi_point_geometry_eb<Geometry, multi_linestring_tag>
{
typedef typename boost::range_value<MultiPoint>::type point_type;
typedef std::vector<point_type> points_type;
- typedef geometry::less<void, -1, typename Strategy::cs_tag> less_type;
+ typedef geometry::less<void, -1, Strategy> less_type;
- points_type points(boost::begin(multi_point), boost::end(multi_point));
+ points_type points(boost::begin(multi_point), boost::end(multi_point));
std::sort(points.begin(), points.end(), less_type());
boundary_visitor<points_type> visitor(points);
@@ -184,13 +184,12 @@ struct multi_point_single_geometry
{
typedef typename point_type<SingleGeometry>::type point2_type;
typedef model::box<point2_type> box2_type;
-
+
box2_type box2;
geometry::envelope(single_geometry, box2, strategy);
geometry::detail::expand_by_epsilon(box2);
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
+ for (auto it = boost::begin(multi_point); it != boost::end(multi_point); ++it)
{
if (! (relate::may_update<interior, interior, '0', Transpose>(result)
|| relate::may_update<interior, boundary, '0', Transpose>(result)
@@ -202,7 +201,7 @@ struct multi_point_single_geometry
// The default strategy is enough for Point/Box
if (detail::disjoint::disjoint_point_box(*it, box2, strategy))
{
- relate::set<interior, exterior, '0', Transpose>(result);
+ update<interior, exterior, '0', Transpose>(result);
}
else
{
@@ -210,15 +209,15 @@ struct multi_point_single_geometry
if (in_val > 0) // within
{
- relate::set<interior, interior, '0', Transpose>(result);
+ update<interior, interior, '0', Transpose>(result);
}
else if (in_val == 0)
{
- relate::set<interior, boundary, '0', Transpose>(result);
+ update<interior, boundary, '0', Transpose>(result);
}
else // in_val < 0 - not within
{
- relate::set<interior, exterior, '0', Transpose>(result);
+ update<interior, exterior, '0', Transpose>(result);
}
}
@@ -240,7 +239,7 @@ struct multi_point_single_geometry
{
// TODO: this is not true if a linestring is degenerated to a point
// then the interior has topological dimension = 0, not 1
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
+ update<exterior, interior, tc_t::interior, Transpose>(result);
}
if ( relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result)
@@ -248,12 +247,12 @@ struct multi_point_single_geometry
{
if (multi_point_geometry_eb<SingleGeometry>::apply(multi_point, tc))
{
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
+ update<exterior, boundary, tc_t::boundary, Transpose>(result);
}
}
}
- relate::set<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
+ update<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
}
};
@@ -365,14 +364,18 @@ class multi_point_multi_geometry_ii_ib
if (in_val > 0) // within
{
- relate::set<interior, interior, '0', Transpose>(m_result);
+ update<interior, interior, '0', Transpose>(m_result);
}
else if (in_val == 0)
{
if (m_tc.check_boundary_point(point))
- relate::set<interior, boundary, '0', Transpose>(m_result);
+ {
+ update<interior, boundary, '0', Transpose>(m_result);
+ }
else
- relate::set<interior, interior, '0', Transpose>(m_result);
+ {
+ update<interior, interior, '0', Transpose>(m_result);
+ }
}
}
@@ -442,7 +445,6 @@ struct multi_point_multi_geometry_ii_ib_ie
typedef model::box<point2_type> box2_type;
typedef std::pair<box2_type, std::size_t> box_pair_type;
typedef std::vector<box_pair_type> boxes_type;
- typedef typename boxes_type::const_iterator boxes_iterator;
template <typename Result, typename Strategy>
static inline void apply(MultiPoint const& multi_point,
@@ -463,8 +465,7 @@ struct multi_point_multi_geometry_ii_ib_ie
rtree(boxes.begin(), boxes.end(),
index_parameters_type(index::rstar<4>(), strategy));
- typedef typename boost::range_const_iterator<MultiPoint>::type iterator;
- for ( iterator it = boost::begin(multi_point) ; it != boost::end(multi_point) ; ++it )
+ for (auto it = boost::begin(multi_point); it != boost::end(multi_point); ++it)
{
if (! (relate::may_update<interior, interior, '0', Transpose>(result)
|| relate::may_update<interior, boundary, '0', Transpose>(result)
@@ -479,24 +480,28 @@ struct multi_point_multi_geometry_ii_ib_ie
rtree.query(index::intersects(point), std::back_inserter(boxes_found));
bool found_ii_or_ib = false;
- for (boxes_iterator bi = boxes_found.begin() ; bi != boxes_found.end() ; ++bi)
+ for (auto const& box_found : boxes_found)
{
typename boost::range_value<MultiGeometry>::type const&
- single = range::at(multi_geometry, bi->second);
+ single = range::at(multi_geometry, box_found.second);
int in_val = detail::within::point_in_geometry(point, single, strategy);
if (in_val > 0) // within
{
- relate::set<interior, interior, '0', Transpose>(result);
+ update<interior, interior, '0', Transpose>(result);
found_ii_or_ib = true;
}
else if (in_val == 0) // on boundary of single
{
if (tc.check_boundary_point(point))
- relate::set<interior, boundary, '0', Transpose>(result);
+ {
+ update<interior, boundary, '0', Transpose>(result);
+ }
else
- relate::set<interior, interior, '0', Transpose>(result);
+ {
+ update<interior, interior, '0', Transpose>(result);
+ }
found_ii_or_ib = true;
}
}
@@ -504,7 +509,7 @@ struct multi_point_multi_geometry_ii_ib_ie
// neither interior nor boundary found -> exterior
if (found_ii_or_ib == false)
{
- relate::set<interior, exterior, '0', Transpose>(result);
+ update<interior, exterior, '0', Transpose>(result);
}
if ( BOOST_GEOMETRY_CONDITION(result.interrupt) )
@@ -573,7 +578,7 @@ struct multi_point_multi_geometry
{
// TODO: this is not true if a linestring is degenerated to a point
// then the interior has topological dimension = 0, not 1
- relate::set<exterior, interior, tc_t::interior, Transpose>(result);
+ update<exterior, interior, tc_t::interior, Transpose>(result);
}
if ( relate::may_update<exterior, boundary, tc_t::boundary, Transpose>(result)
@@ -581,12 +586,12 @@ struct multi_point_multi_geometry
{
if (multi_point_geometry_eb<MultiGeometry>::apply(multi_point, tc))
{
- relate::set<exterior, boundary, tc_t::boundary, Transpose>(result);
+ update<exterior, boundary, tc_t::boundary, Transpose>(result);
}
}
}
- relate::set<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
+ update<exterior, exterior, result_dimension<MultiPoint>::value, Transpose>(result);
}
};