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_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
11 #define BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP
13 #include <boost/geometry/core/tag.hpp>
14 #include <boost/geometry/core/tags.hpp>
16 #include <boost/geometry/iterators/point_iterator.hpp>
17 #include <boost/geometry/iterators/segment_iterator.hpp>
20 namespace boost { namespace geometry
24 #ifndef DOXYGEN_NO_DETAIL
25 namespace detail { namespace distance
29 // class to choose between point_iterator and segment_iterator
30 template <typename Geometry, typename Tag = typename tag<Geometry>::type>
31 struct iterator_selector
33 typedef geometry::segment_iterator<Geometry> iterator_type;
35 static inline iterator_type begin(Geometry& geometry)
37 return segments_begin(geometry);
40 static inline iterator_type end(Geometry& geometry)
42 return segments_end(geometry);
46 template <typename MultiPoint>
47 struct iterator_selector<MultiPoint, multi_point_tag>
49 typedef geometry::point_iterator<MultiPoint> iterator_type;
51 static inline iterator_type begin(MultiPoint& multipoint)
53 return points_begin(multipoint);
56 static inline iterator_type end(MultiPoint& multipoint)
58 return points_end(multipoint);
63 }} // namespace detail::distance
64 #endif // DOXYGEN_NO_DETAIL
67 }} // namespace boost::geometry
70 #endif // BOOST_GEOMETRY_ALGORITHS_DETAIL_DISTANCE_ITERATOR_SELECTOR_HPP