diff --git a/include/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp b/include/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp index 20a6d7f48..13e0a5a51 100644 --- a/include/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp @@ -11,6 +11,7 @@ #include +#include #include #include @@ -21,8 +22,7 @@ #include #include #include -#include -#include +#include namespace boost { namespace geometry @@ -37,41 +37,24 @@ namespace detail { namespace copy_segments template struct copy_segment_point_range { - typedef typename closeable_view - < - Range const, - closure::value - >::type cview_type; - - typedef typename reversible_view - < - cview_type const, - Reverse ? iterate_reverse : iterate_forward - >::type rview_type; - static inline bool apply(Range const& range, SegmentIdentifier const& seg_id, bool second, PointOut& point) { + detail::normalized_view view(range); + + signed_index_type const n = boost::size(view); signed_index_type index = seg_id.segment_index; if (second) { index++; - if (index >= int(boost::size(range))) + if (index >= n) { index = 0; } } - // Exception? - if (index >= int(boost::size(range))) - { - return false; - } - - cview_type cview(range); - rview_type view(cview); - + BOOST_ASSERT(index >= 0 && index < n); geometry::convert(*(boost::begin(view) + index), point); return true; @@ -323,6 +306,8 @@ inline bool copy_segment_point(Geometry1 const& geometry1, Geometry2 const& geom concept::check(); concept::check(); + BOOST_ASSERT(seg_id.source_index == 0 || seg_id.source_index == 1); + if (seg_id.source_index == 0) { return dispatch::copy_segment_point diff --git a/include/boost/geometry/views/detail/normalized_view.hpp b/include/boost/geometry/views/detail/normalized_view.hpp index d50ffe48c..1e9cda9ce 100644 --- a/include/boost/geometry/views/detail/normalized_view.hpp +++ b/include/boost/geometry/views/detail/normalized_view.hpp @@ -28,6 +28,7 @@ #include #include #include +#include namespace boost { namespace geometry {