// 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_ITERATOR_TYPE_HPP #define BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_ITERATOR_TYPE_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace segment_iterator { template ::type> struct iterator_type : not_implemented {}; template struct iterator_type { typedef range_segment_iterator < Linestring, typename value_type::type > type; }; template struct iterator_type { typedef range_segment_iterator < Ring, typename value_type::type > type; }; template class iterator_type { private: typedef typename detail::point_iterator::inner_range_type < Polygon >::type inner_range; public: typedef concatenate_iterator < range_segment_iterator < inner_range, typename value_type::type >, flatten_iterator < typename boost::range_iterator < typename geometry::interior_type::type >::type, typename iterator_type::type, typename value_type::type, dispatch::segments_begin, dispatch::segments_end, typename value_type::type >, typename value_type::type, typename value_type::type > type; }; template class iterator_type { private: typedef typename detail::point_iterator::inner_range_type < MultiLinestring >::type inner_range; public: typedef flatten_iterator < typename boost::range_iterator::type, typename iterator_type::type, typename value_type::type, dispatch::segments_begin, dispatch::segments_end, typename value_type::type > type; }; template class iterator_type { private: typedef typename detail::point_iterator::inner_range_type < MultiPolygon >::type inner_range; public: typedef flatten_iterator < typename boost::range_iterator::type, typename iterator_type::type, typename value_type::type, dispatch::segments_begin, dispatch::segments_end, typename value_type::type > type; }; }} // namespace detail::segment_iterator #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ITERATORS_DETAIL_SEGMENT_ITERATOR_ITERATOR_TYPE_HPP