diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:30:07 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2016-10-06 10:32:57 +0900 |
commit | 71d216b90256936a9638f325af9bc69d720e75de (patch) | |
tree | 9c5f682d341c7c88ad0c8e3d4b262e00b6fb691a /boost/geometry/algorithms/detail/is_valid | |
parent | 733b5d5ae2c5d625211e2985ac25728ac3f54883 (diff) | |
download | boost-71d216b90256936a9638f325af9bc69d720e75de.tar.gz boost-71d216b90256936a9638f325af9bc69d720e75de.tar.bz2 boost-71d216b90256936a9638f325af9bc69d720e75de.zip |
Imported Upstream version 1.59.0
Change-Id: I2dde00f4eca71df3eea9d251dcaecde18a6c90a5
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'boost/geometry/algorithms/detail/is_valid')
12 files changed, 109 insertions, 44 deletions
diff --git a/boost/geometry/algorithms/detail/is_valid/box.hpp b/boost/geometry/algorithms/detail/is_valid/box.hpp index 139502af78..e7a67252ba 100644 --- a/boost/geometry/algorithms/detail/is_valid/box.hpp +++ b/boost/geometry/algorithms/detail/is_valid/box.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -12,6 +13,8 @@ #include <cstddef> +#include <boost/core/ignore_unused.hpp> + #include <boost/geometry/core/access.hpp> #include <boost/geometry/core/tags.hpp> #include <boost/geometry/core/coordinate_dimension.hpp> @@ -57,6 +60,8 @@ struct has_valid_corners<Box, 0> template <typename VisitPolicy> static inline bool apply(Box const&, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + return visitor.template apply<no_failure>(); } }; diff --git a/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp b/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp index c59139a92e..f08e70242c 100644 --- a/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp +++ b/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp @@ -17,9 +17,9 @@ #include <utility> #include <vector> -#include <boost/assert.hpp> #include <boost/core/addressof.hpp> +#include <boost/geometry/core/assert.hpp> #include <boost/geometry/policies/compare.hpp> @@ -104,12 +104,12 @@ private: , m_parent_id(num_nodes, -1) {} - inline signed_index_type parent_id(vertex_handle v) const + inline signed_size_type parent_id(vertex_handle v) const { return m_parent_id[v->id()]; } - inline void set_parent_id(vertex_handle v, signed_index_type id) + inline void set_parent_id(vertex_handle v, signed_size_type id) { m_parent_id[v->id()] = id; } @@ -125,7 +125,7 @@ private: } private: std::vector<bool> m_visited; - std::vector<signed_index_type> m_parent_id; + std::vector<signed_size_type> m_parent_id; }; @@ -145,7 +145,7 @@ private: = m_neighbors[v->id()].begin(); nit != m_neighbors[v->id()].end(); ++nit) { - if ( static_cast<signed_index_type>((*nit)->id()) != data.parent_id(v) ) + if ( static_cast<signed_size_type>((*nit)->id()) != data.parent_id(v) ) { if ( data.visited(*nit) ) { @@ -153,7 +153,7 @@ private: } else { - data.set_parent_id(*nit, static_cast<signed_index_type>(v->id())); + data.set_parent_id(*nit, static_cast<signed_size_type>(v->id())); stack.push(*nit); } } @@ -173,7 +173,7 @@ public: // inserts a ring vertex in the graph and returns its handle // ring id's are zero-based (so the first interior ring has id 1) - inline vertex_handle add_vertex(signed_index_type id) + inline vertex_handle add_vertex(signed_size_type id) { return m_vertices.insert(vertex(static_cast<std::size_t>(id))).first; } @@ -197,8 +197,8 @@ public: inline void add_edge(vertex_handle v1, vertex_handle v2) { - BOOST_ASSERT( v1 != m_vertices.end() ); - BOOST_ASSERT( v2 != m_vertices.end() ); + BOOST_GEOMETRY_ASSERT( v1 != m_vertices.end() ); + BOOST_GEOMETRY_ASSERT( v2 != m_vertices.end() ); m_neighbors[v1->id()].insert(v2); m_neighbors[v2->id()].insert(v1); } diff --git a/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp b/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp index 5878841e70..685a4aac35 100644 --- a/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp +++ b/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp @@ -10,6 +10,7 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_HAS_DUPLICATES_HPP +#include <boost/core/ignore_unused.hpp> #include <boost/range.hpp> #include <boost/geometry/core/closure.hpp> @@ -35,8 +36,13 @@ struct has_duplicates template <typename VisitPolicy> static inline bool apply(Range const& range, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + typedef typename closeable_view<Range const, Closure>::type view_type; - typedef typename boost::range_iterator<view_type const>::type iterator; + typedef typename boost::range_const_iterator + < + view_type const + >::type const_iterator; view_type view(range); @@ -47,9 +53,10 @@ struct has_duplicates geometry::equal_to<typename boost::range_value<Range>::type> equal; - iterator it = boost::begin(view); - iterator next = ++boost::begin(view); - for (; next != boost::end(view); ++it, ++next) + const_iterator it = boost::const_begin(view); + const_iterator next = it; + ++next; + for (; next != boost::const_end(view); ++it, ++next) { if ( equal(*it, *next) ) { diff --git a/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp b/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp index 090c026e8b..aa90e52db6 100644 --- a/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp +++ b/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp @@ -12,9 +12,11 @@ #include <algorithm> +#include <boost/core/ignore_unused.hpp> #include <boost/range.hpp> #include <boost/type_traits/is_same.hpp> +#include <boost/geometry/core/assert.hpp> #include <boost/geometry/core/point_type.hpp> #include <boost/geometry/core/tag.hpp> #include <boost/geometry/core/tags.hpp> @@ -76,10 +78,23 @@ struct not_equal_to template <typename Range, closure_selector Closure> struct has_spikes { + template <typename Iterator> + static inline Iterator find_different_from_first(Iterator first, + Iterator last) + { + typedef not_equal_to<typename point_type<Range>::type> not_equal; + + BOOST_GEOMETRY_ASSERT(first != last); + + Iterator second = first; + ++second; + return std::find_if(second, last, not_equal(*first)); + } + template <typename VisitPolicy> static inline bool apply(Range const& range, VisitPolicy& visitor) { - typedef not_equal_to<typename point_type<Range>::type> not_equal; + boost::ignore_unused(visitor); typedef typename closeable_view<Range const, Closure>::type view_type; typedef typename boost::range_iterator<view_type const>::type iterator; @@ -91,23 +106,23 @@ struct has_spikes iterator prev = boost::begin(view); - iterator cur = std::find_if(prev, boost::end(view), not_equal(*prev)); - if ( cur == boost::end(view) ) + iterator cur = find_different_from_first(prev, boost::end(view)); + if (cur == boost::end(view)) { // the range has only one distinct point, so it // cannot have a spike return ! visitor.template apply<no_failure>(); } - iterator next = std::find_if(cur, boost::end(view), not_equal(*cur)); - if ( next == boost::end(view) ) + iterator next = find_different_from_first(cur, boost::end(view)); + if (next == boost::end(view)) { // the range has only two distinct points, so it // cannot have a spike return ! visitor.template apply<no_failure>(); } - while ( next != boost::end(view) ) + while (next != boost::end(view)) { if ( geometry::detail::point_is_spike_or_equal(*prev, *next, @@ -118,20 +133,19 @@ struct has_spikes } prev = cur; cur = next; - next = std::find_if(cur, boost::end(view), not_equal(*cur)); + next = find_different_from_first(cur, boost::end(view)); } - if ( geometry::equals(range::front(view), range::back(view)) ) + if (geometry::equals(range::front(view), range::back(view))) { iterator cur = boost::begin(view); typename boost::range_reverse_iterator < view_type const - >::type prev = std::find_if(boost::rbegin(view), - boost::rend(view), - not_equal(range::back(view))); - iterator next = - std::find_if(cur, boost::end(view), not_equal(*cur)); + >::type prev = find_different_from_first(boost::rbegin(view), + boost::rend(view)); + + iterator next = find_different_from_first(cur, boost::end(view)); if (detail::point_is_spike_or_equal(*prev, *next, *cur)) { return diff --git a/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp b/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp index ecbc4782b2..0a81213743 100644 --- a/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp +++ b/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp @@ -12,9 +12,10 @@ #include <vector> -#include <boost/assert.hpp> +#include <boost/core/ignore_unused.hpp> #include <boost/range.hpp> +#include <boost/geometry/core/assert.hpp> #include <boost/geometry/core/point_type.hpp> #include <boost/geometry/policies/predicate_based_interrupt_policy.hpp> @@ -73,6 +74,8 @@ public: Turns& turns, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + rescale_policy_type robust_policy = geometry::get_rescale_policy<rescale_policy_type>(geometry); @@ -88,7 +91,7 @@ public: if (interrupt_policy.has_intersections) { - BOOST_ASSERT(! boost::empty(turns)); + BOOST_GEOMETRY_ASSERT(! boost::empty(turns)); return visitor.template apply<failure_self_intersections>(turns); } else diff --git a/boost/geometry/algorithms/detail/is_valid/interface.hpp b/boost/geometry/algorithms/detail/is_valid/interface.hpp index f83b09c437..0ec13b1b38 100644 --- a/boost/geometry/algorithms/detail/is_valid/interface.hpp +++ b/boost/geometry/algorithms/detail/is_valid/interface.hpp @@ -97,7 +97,7 @@ template <typename Geometry> inline bool is_valid(Geometry const& geometry) { is_valid_default_policy<> policy_visitor; - return is_valid(geometry, policy_visitor); + return geometry::is_valid(geometry, policy_visitor); } @@ -121,7 +121,7 @@ template <typename Geometry> inline bool is_valid(Geometry const& geometry, validity_failure_type& failure) { failure_type_policy<> policy_visitor; - bool result = is_valid(geometry, policy_visitor); + bool result = geometry::is_valid(geometry, policy_visitor); failure = policy_visitor.failure(); return result; } @@ -148,7 +148,7 @@ inline bool is_valid(Geometry const& geometry, std::string& message) { std::ostringstream stream; failing_reason_policy<> policy_visitor(stream); - bool result = is_valid(geometry, policy_visitor); + bool result = geometry::is_valid(geometry, policy_visitor); message = stream.str(); return result; } diff --git a/boost/geometry/algorithms/detail/is_valid/linear.hpp b/boost/geometry/algorithms/detail/is_valid/linear.hpp index 69243563ec..e30064faf0 100644 --- a/boost/geometry/algorithms/detail/is_valid/linear.hpp +++ b/boost/geometry/algorithms/detail/is_valid/linear.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -18,6 +19,7 @@ #include <boost/geometry/core/point_type.hpp> #include <boost/geometry/core/tags.hpp> +#include <boost/geometry/util/condition.hpp> #include <boost/geometry/util/range.hpp> #include <boost/geometry/algorithms/equals.hpp> @@ -138,7 +140,8 @@ public: static inline bool apply(MultiLinestring const& multilinestring, VisitPolicy& visitor) { - if (AllowEmptyMultiGeometries && boost::empty(multilinestring)) + if (BOOST_GEOMETRY_CONDITION( + AllowEmptyMultiGeometries && boost::empty(multilinestring))) { return visitor.template apply<no_failure>(); } diff --git a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp index 9362bfca0e..0025445c2c 100644 --- a/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp +++ b/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -13,6 +14,7 @@ #include <deque> #include <vector> +#include <boost/core/ignore_unused.hpp> #include <boost/iterator/filter_iterator.hpp> #include <boost/range.hpp> @@ -21,6 +23,7 @@ #include <boost/geometry/core/ring_type.hpp> #include <boost/geometry/core/tags.hpp> +#include <boost/geometry/util/condition.hpp> #include <boost/geometry/util/range.hpp> #include <boost/geometry/geometries/box.hpp> @@ -80,8 +83,10 @@ private: TurnIterator turns_beyond, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + // collect all polygons that have turns - std::set<signed_index_type> multi_indices; + std::set<signed_size_type> multi_indices; for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit) { multi_indices.insert(tit->operations[0].seg_id.multi_index); @@ -90,7 +95,7 @@ private: // put polygon iterators without turns in a vector std::vector<PolygonIterator> polygon_iterators; - signed_index_type multi_index = 0; + signed_size_type multi_index = 0; for (PolygonIterator it = polygons_first; it != polygons_beyond; ++it, ++multi_index) { @@ -124,7 +129,7 @@ private: class has_multi_index { public: - has_multi_index(signed_index_type multi_index) + has_multi_index(signed_size_type multi_index) : m_multi_index(multi_index) {} @@ -136,7 +141,7 @@ private: } private: - signed_index_type const m_multi_index; + signed_size_type const m_multi_index; }; @@ -156,7 +161,7 @@ private: TurnIterator turns_beyond, VisitPolicy& visitor) { - signed_index_type multi_index = 0; + signed_size_type multi_index = 0; for (PolygonIterator it = polygons_first; it != polygons_beyond; ++it, ++multi_index) { @@ -250,7 +255,8 @@ public: { typedef debug_validity_phase<MultiPolygon> debug_phase; - if (AllowEmptyMultiGeometries && boost::empty(multipolygon)) + if (BOOST_GEOMETRY_CONDITION( + AllowEmptyMultiGeometries && boost::empty(multipolygon))) { return visitor.template apply<no_failure>(); } diff --git a/boost/geometry/algorithms/detail/is_valid/pointlike.hpp b/boost/geometry/algorithms/detail/is_valid/pointlike.hpp index 8e5ebaadcc..e51ab74643 100644 --- a/boost/geometry/algorithms/detail/is_valid/pointlike.hpp +++ b/boost/geometry/algorithms/detail/is_valid/pointlike.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -10,6 +11,7 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_POINTLIKE_HPP +#include <boost/core/ignore_unused.hpp> #include <boost/range.hpp> #include <boost/geometry/core/tags.hpp> @@ -17,6 +19,8 @@ #include <boost/geometry/algorithms/validity_failure_type.hpp> #include <boost/geometry/algorithms/dispatch/is_valid.hpp> +#include <boost/geometry/util/condition.hpp> + namespace boost { namespace geometry { @@ -34,6 +38,7 @@ struct is_valid<Point, point_tag> template <typename VisitPolicy> static inline bool apply(Point const&, VisitPolicy& visitor) { + boost::ignore_unused(visitor); return visitor.template apply<no_failure>(); } }; @@ -51,7 +56,10 @@ struct is_valid<MultiPoint, multi_point_tag, AllowEmptyMultiGeometries> static inline bool apply(MultiPoint const& multipoint, VisitPolicy& visitor) { - if (AllowEmptyMultiGeometries || boost::size(multipoint) > 0) + boost::ignore_unused(multipoint, visitor); + + if (BOOST_GEOMETRY_CONDITION( + AllowEmptyMultiGeometries || !boost::empty(multipoint))) { // we allow empty multi-geometries, so an empty multipoint // is considered valid diff --git a/boost/geometry/algorithms/detail/is_valid/polygon.hpp b/boost/geometry/algorithms/detail/is_valid/polygon.hpp index 17eefd226f..6e87273aa1 100644 --- a/boost/geometry/algorithms/detail/is_valid/polygon.hpp +++ b/boost/geometry/algorithms/detail/is_valid/polygon.hpp @@ -18,9 +18,10 @@ #include <set> #include <vector> -#include <boost/assert.hpp> +#include <boost/core/ignore_unused.hpp> #include <boost/range.hpp> +#include <boost/geometry/core/assert.hpp> #include <boost/geometry/core/exterior_ring.hpp> #include <boost/geometry/core/interior_rings.hpp> #include <boost/geometry/core/ring_type.hpp> @@ -185,24 +186,26 @@ protected: TurnIterator turns_beyond, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + // collect the interior ring indices that have turns with the // exterior ring - std::set<signed_index_type> ring_indices; + std::set<signed_size_type> ring_indices; for (TurnIterator tit = turns_first; tit != turns_beyond; ++tit) { if (tit->operations[0].seg_id.ring_index == -1) { - BOOST_ASSERT(tit->operations[1].seg_id.ring_index != -1); + BOOST_GEOMETRY_ASSERT(tit->operations[1].seg_id.ring_index != -1); ring_indices.insert(tit->operations[1].seg_id.ring_index); } else if (tit->operations[1].seg_id.ring_index == -1) { - BOOST_ASSERT(tit->operations[0].seg_id.ring_index != -1); + BOOST_GEOMETRY_ASSERT(tit->operations[0].seg_id.ring_index != -1); ring_indices.insert(tit->operations[0].seg_id.ring_index); } } - signed_index_type ring_index = 0; + signed_size_type ring_index = 0; for (RingIterator it = rings_first; it != rings_beyond; ++it, ++ring_index) { @@ -303,6 +306,8 @@ protected: TurnIterator beyond, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + typedef typename std::iterator_traits < TurnIterator diff --git a/boost/geometry/algorithms/detail/is_valid/ring.hpp b/boost/geometry/algorithms/detail/is_valid/ring.hpp index c663a96d28..c35e843418 100644 --- a/boost/geometry/algorithms/detail/is_valid/ring.hpp +++ b/boost/geometry/algorithms/detail/is_valid/ring.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -12,6 +13,8 @@ #include <deque> +#include <boost/core/ignore_unused.hpp> + #include <boost/geometry/core/closure.hpp> #include <boost/geometry/core/cs.hpp> #include <boost/geometry/core/point_order.hpp> @@ -53,6 +56,8 @@ struct is_topologically_closed template <typename VisitPolicy> static inline bool apply(Ring const&, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + return visitor.template apply<no_failure>(); } }; @@ -63,6 +68,8 @@ struct is_topologically_closed<Ring, closed> template <typename VisitPolicy> static inline bool apply(Ring const& ring, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + if (geometry::equals(range::front(ring), range::back(ring))) { return visitor.template apply<no_failure>(); @@ -112,6 +119,8 @@ struct is_properly_oriented template <typename VisitPolicy> static inline bool apply(Ring const& ring, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + typename ring_area_predicate < area_result_type, IsInteriorRing diff --git a/boost/geometry/algorithms/detail/is_valid/segment.hpp b/boost/geometry/algorithms/detail/is_valid/segment.hpp index 0b60890dc0..a93d2bfe9e 100644 --- a/boost/geometry/algorithms/detail/is_valid/segment.hpp +++ b/boost/geometry/algorithms/detail/is_valid/segment.hpp @@ -3,6 +3,7 @@ // Copyright (c) 2014-2015, 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 // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html @@ -10,6 +11,8 @@ #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_SEGMENT_HPP +#include <boost/core/ignore_unused.hpp> + #include <boost/geometry/core/point_type.hpp> #include <boost/geometry/core/tags.hpp> @@ -44,6 +47,8 @@ struct is_valid<Segment, segment_tag> template <typename VisitPolicy> static inline bool apply(Segment const& segment, VisitPolicy& visitor) { + boost::ignore_unused(visitor); + typename point_type<Segment>::type p[2]; detail::assign_point_from_index<0>(segment, p[0]); detail::assign_point_from_index<1>(segment, p[1]); |