diff --git a/include/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp b/include/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp index 2d6320c03..40ac68dba 100644 --- a/include/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp +++ b/include/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp @@ -24,6 +24,10 @@ namespace boost { namespace geometry { +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace segment_iterator +{ + template ::value> struct range_iterator_type @@ -114,7 +118,12 @@ public: : m_it(--range_iterator_end::apply(r)) {} - template + template + < + typename OtherRange, + typename OtherValue, + typename OtherReference + > range_segment_iterator(range_segment_iterator < OtherRange, @@ -134,7 +143,12 @@ public: BOOST_MPL_ASSERT_MSG((are_conv), NOT_CONVERTIBLE, (types)); } - template + template + < + typename OtherRange, + typename OtherValue, + typename OtherReference + > range_segment_iterator operator=(range_segment_iterator < OtherRange, @@ -169,7 +183,12 @@ private: return Reference(*m_it, *next); } - template + template + < + typename OtherRange, + typename OtherValue, + typename OtherReference + > inline bool equal(range_segment_iterator < OtherRange, @@ -195,6 +214,9 @@ private: }; +}} // namespace detail::segment_iterator +#endif // DOXYGEN_NO_DETAIL + }} // namespace boost::geometry diff --git a/include/boost/geometry/iterators/detail/segment_iterator/value_type.hpp b/include/boost/geometry/iterators/detail/segment_iterator/value_type.hpp new file mode 100644 index 000000000..6b11aa37c --- /dev/null +++ b/include/boost/geometry/iterators/detail/segment_iterator/value_type.hpp @@ -0,0 +1,43 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2014, Oracle and/or its affiliates. + +// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP +#define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP + +#include +#include + + +namespace boost { namespace geometry +{ + +#ifndef DOXYGEN_NO_DETAIL +namespace detail { namespace segment_iterator +{ + +template +struct value_type +{ + typedef typename detail_dispatch::point_iterator_value_type + < + Geometry + >::type point_iterator_value_type; + + typedef geometry::model::pointing_segment + < + point_iterator_value_type + > type; +}; + +}} // namespace detail::segment_iterator +#endif // DOXYGEN_NO_DETAIL + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_VALUE_TYPE_HPP diff --git a/include/boost/geometry/iterators/segment_iterator_type.hpp b/include/boost/geometry/iterators/segment_iterator_type.hpp index 7b531d31b..3027a6ee2 100644 --- a/include/boost/geometry/iterators/segment_iterator_type.hpp +++ b/include/boost/geometry/iterators/segment_iterator_type.hpp @@ -20,7 +20,8 @@ #include #include #include -#include +#include +#include #include @@ -31,23 +32,6 @@ namespace boost { namespace geometry { - -template -struct segment_iterator_value_type -{ - typedef typename detail_dispatch::point_iterator_value_type - < - Geometry - >::type point_iterator_value_type; - - typedef geometry::model::pointing_segment - < - point_iterator_value_type - > type; -}; - - - #ifndef DOXYGEN_NO_DISPATCH namespace dispatch { @@ -56,10 +40,10 @@ namespace dispatch template struct segment_iterator_type { - typedef range_segment_iterator + typedef detail::segment_iterator::range_segment_iterator < Linestring, - typename segment_iterator_value_type::type + typename detail::segment_iterator::value_type::type > type; }; @@ -67,10 +51,10 @@ struct segment_iterator_type template struct segment_iterator_type { - typedef range_segment_iterator + typedef detail::segment_iterator::range_segment_iterator < Ring, - typename segment_iterator_value_type::type + typename detail::segment_iterator::value_type::type > type; }; @@ -84,13 +68,17 @@ private: Polygon >::type inner_range; + typedef typename detail::segment_iterator::value_type + < + Polygon + >::type value_type; + public: typedef concatenate_iterator < - range_segment_iterator + detail::segment_iterator::range_segment_iterator < - inner_range, - typename segment_iterator_value_type::type + inner_range, value_type >, flatten_iterator < @@ -99,13 +87,13 @@ public: typename geometry::interior_type::type >::type, typename dispatch::segment_iterator_type::type, - typename segment_iterator_value_type::type, + value_type, dispatch::segments_begin, dispatch::segments_end, - typename segment_iterator_value_type::type + value_type >, - typename segment_iterator_value_type::type, - typename segment_iterator_value_type::type + value_type, + value_type > type; }; @@ -119,15 +107,20 @@ private: MultiLinestring >::type inner_range; + typedef typename detail::segment_iterator::value_type + < + MultiLinestring + >::type value_type; + public: typedef flatten_iterator < typename boost::range_iterator::type, typename dispatch::segment_iterator_type::type, - typename segment_iterator_value_type::type, + value_type, dispatch::segments_begin, dispatch::segments_end, - typename segment_iterator_value_type::type + value_type > type; }; @@ -141,15 +134,20 @@ private: MultiPolygon >::type inner_range; + typedef typename detail::segment_iterator::value_type + < + MultiPolygon + >::type value_type; + public: typedef flatten_iterator < typename boost::range_iterator::type, typename dispatch::segment_iterator_type::type, - typename segment_iterator_value_type::type, + value_type, dispatch::segments_begin, dispatch::segments_end, - typename segment_iterator_value_type::type + value_type > type; };