1// Boost.Geometry
2
3// Copyright (c) 2014 Adam Wulkiewicz, Lodz, Poland.
4
5// Use, modification and distribution is subject to the Boost Software License,
6// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
10#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
11
12#include <boost/range/iterator.hpp>
13#include <boost/range/value_type.hpp>
14
15#include <boost/geometry/core/interior_type.hpp>
16
17namespace boost { namespace geometry
18{
19
20#ifndef DOXYGEN_NO_DETAIL
21namespace detail
22{
23
24/*!
25\brief Structure defining the type of interior rings iterator
26\note If the Geometry is const, const iterator is defined.
27\tparam Geometry \tparam_geometry
28 */
29template <typename Geometry>
30struct interior_iterator
31{
32 typedef typename boost::range_iterator
33 <
34 typename geometry::interior_type<Geometry>::type
35 >::type type;
36};
37
38template <typename BaseT, typename T>
39struct copy_const
40{
41 typedef T type;
42};
43
44template <typename BaseT, typename T>
45struct copy_const<BaseT const, T>
46{
47 typedef T const type;
48};
49
50template <typename Geometry>
51struct interior_ring_iterator
52{
53 typedef typename boost::range_iterator
54 <
55 typename copy_const
56 <
57 typename geometry::interior_type<Geometry>::type,
58 typename boost::range_value
59 <
60 typename geometry::interior_type<Geometry>::type
61 >::type
62 >::type
63 >::type type;
64};
65
66} // namespace detail
67#endif // DOXYGEN_NO_DETAIL
68
69}} // namespace boost::geometry
70
71#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_INTERIOR_ITERATOR_HPP
72

source code of boost/boost/geometry/algorithms/detail/interior_iterator.hpp