1 // Boost.Geometry (aka GGL, Generic Geometry Library)
3 // Copyright (c) 2014, Oracle and/or its affiliates.
5 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
7 // Licensed under the Boost Software License version 1.0.
8 // http://www.boost.org/users/license.html
10 #ifndef BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP
11 #define BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP
13 #include <boost/range.hpp>
14 #include <boost/type_traits/is_const.hpp>
15 #include <boost/mpl/if.hpp>
17 #include <boost/geometry/core/ring_type.hpp>
18 #include <boost/geometry/core/tag.hpp>
19 #include <boost/geometry/core/tags.hpp>
22 namespace boost { namespace geometry
26 #ifndef DOXYGEN_NO_DETAIL
27 namespace detail { namespace point_iterator
34 typename Tag = typename tag<Geometry>::type
36 struct inner_range_type
38 typedef typename boost::mpl::if_c
40 !boost::is_const<Geometry>::type::value,
41 typename boost::range_value<Geometry>::type,
42 typename boost::range_value<Geometry>::type const
47 template <typename Polygon>
48 struct inner_range_type<Polygon, polygon_tag>
50 typedef typename boost::mpl::if_c
52 !boost::is_const<Polygon>::type::value,
53 typename geometry::ring_type<Polygon>::type,
54 typename geometry::ring_type<Polygon>::type const
59 }} // namespace detail::point_iterator
60 #endif // DOXYGEN_NO_DETAIL
63 }} // namespace boost::geometry
66 #endif // BOOST_GEOMETRY_ITERATORS_DETAIL_POINT_ITERATOR_INNER_RANGE_TYPE_HPP