• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 
3 // Copyright (c) 2014, Oracle and/or its affiliates.
4 
5 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
6 
7 // Licensed under the Boost Software License version 1.0.
8 // http://www.boost.org/users/license.html
9 
10 #ifndef BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
11 #define BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
12 
13 #include <boost/geometry/core/tag.hpp>
14 #include <boost/geometry/core/tags.hpp>
15 
16 #include <boost/geometry/iterators/point_iterator.hpp>
17 #include <boost/geometry/iterators/segment_iterator.hpp>
18 
19 
20 namespace boost { namespace geometry
21 {
22 
23 
24 #ifndef DOXYGEN_NO_DETAIL
25 namespace detail { namespace distance
26 {
27 
28 
29 // class to choose between point_iterator and segment_iterator
30 template <typename Geometry, typename Tag = typename tag<Geometry>::type>
31 struct iterator_selector
32 {
33     typedef geometry::segment_iterator<Geometry> iterator_type;
34 
beginboost::geometry::detail::distance::iterator_selector35     static inline iterator_type begin(Geometry& geometry)
36     {
37         return segments_begin(geometry);
38     }
39 
endboost::geometry::detail::distance::iterator_selector40     static inline iterator_type end(Geometry& geometry)
41     {
42         return segments_end(geometry);
43     }
44 };
45 
46 template <typename MultiPoint>
47 struct iterator_selector<MultiPoint, multi_point_tag>
48 {
49     typedef geometry::point_iterator<MultiPoint> iterator_type;
50 
beginboost::geometry::detail::distance::iterator_selector51     static inline iterator_type begin(MultiPoint& multipoint)
52     {
53         return points_begin(multipoint);
54     }
55 
endboost::geometry::detail::distance::iterator_selector56     static inline iterator_type end(MultiPoint& multipoint)
57     {
58         return points_end(multipoint);
59     }
60 };
61 
62 
63 }} // namespace detail::distance
64 #endif // DOXYGEN_NO_DETAIL
65 
66 
67 }} // namespace boost::geometry
68 
69 
70 #endif // BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
71