File indexing completed on 2025-11-05 09:21:29
0001
0002
0003
0004
0005
0006
0007 #ifndef BOOST_ITERATOR_DISTANCE_HPP
0008 #define BOOST_ITERATOR_DISTANCE_HPP
0009
0010 #include <boost/config.hpp>
0011 #include <boost/iterator/iterator_categories.hpp>
0012 #include <boost/iterator/iterator_traits.hpp>
0013
0014 namespace boost {
0015 namespace iterators {
0016 namespace detail {
0017
0018 template< typename SinglePassIterator >
0019 inline BOOST_CXX14_CONSTEXPR typename iterator_difference< SinglePassIterator >::type
0020 distance_impl(SinglePassIterator first, SinglePassIterator last, single_pass_traversal_tag)
0021 {
0022 typename iterator_difference< SinglePassIterator >::type n = 0;
0023 while (first != last)
0024 {
0025 ++first;
0026 ++n;
0027 }
0028 return n;
0029 }
0030
0031 template< typename RandomAccessIterator >
0032 inline BOOST_CXX14_CONSTEXPR typename iterator_difference< RandomAccessIterator >::type
0033 distance_impl(RandomAccessIterator first, RandomAccessIterator last, random_access_traversal_tag)
0034 {
0035 return last - first;
0036 }
0037
0038 }
0039
0040 namespace distance_adl_barrier {
0041
0042 template< typename SinglePassIterator >
0043 inline BOOST_CXX14_CONSTEXPR typename iterator_difference< SinglePassIterator >::type
0044 distance(SinglePassIterator first, SinglePassIterator last)
0045 {
0046 return detail::distance_impl(first, last, typename iterator_traversal< SinglePassIterator >::type());
0047 }
0048
0049 }
0050
0051 using namespace distance_adl_barrier;
0052
0053 }
0054
0055 using namespace iterators::distance_adl_barrier;
0056
0057 }
0058
0059 #endif