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