mirror of
https://github.com/boostorg/iterator.git
synced 2025-05-11 05:23:52 +00:00
Reformat advance.hpp and distance.hpp.
This commit is contained in:
parent
b6a41e325c
commit
c22af90b60
@ -12,68 +12,58 @@
|
|||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace iterators {
|
namespace iterators {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
namespace detail {
|
template< typename InputIterator, typename Distance >
|
||||||
template <typename InputIterator, typename Distance>
|
inline BOOST_CXX14_CONSTEXPR void advance_impl(InputIterator& it, Distance n, incrementable_traversal_tag)
|
||||||
inline BOOST_CXX14_CONSTEXPR void
|
{
|
||||||
advance_impl(
|
while (n > 0)
|
||||||
InputIterator& it
|
{
|
||||||
, Distance n
|
++it;
|
||||||
, incrementable_traversal_tag
|
--n;
|
||||||
)
|
}
|
||||||
{
|
}
|
||||||
while (n > 0) {
|
|
||||||
++it;
|
|
||||||
--n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename BidirectionalIterator, typename Distance>
|
template< typename BidirectionalIterator, typename Distance >
|
||||||
inline BOOST_CXX14_CONSTEXPR void
|
inline BOOST_CXX14_CONSTEXPR void advance_impl(BidirectionalIterator& it, Distance n, bidirectional_traversal_tag)
|
||||||
advance_impl(
|
{
|
||||||
BidirectionalIterator& it
|
if (n >= 0)
|
||||||
, Distance n
|
{
|
||||||
, bidirectional_traversal_tag
|
while (n > 0)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (n >= 0) {
|
++it;
|
||||||
while (n > 0) {
|
--n;
|
||||||
++it;
|
|
||||||
--n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
while (n < 0) {
|
|
||||||
--it;
|
|
||||||
++n;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename RandomAccessIterator, typename Distance>
|
|
||||||
inline BOOST_CXX14_CONSTEXPR void
|
|
||||||
advance_impl(
|
|
||||||
RandomAccessIterator& it
|
|
||||||
, Distance n
|
|
||||||
, random_access_traversal_tag
|
|
||||||
)
|
|
||||||
{
|
|
||||||
it += n;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
namespace advance_adl_barrier {
|
{
|
||||||
template <typename InputIterator, typename Distance>
|
while (n < 0)
|
||||||
inline BOOST_CXX14_CONSTEXPR void
|
|
||||||
advance(InputIterator& it, Distance n)
|
|
||||||
{
|
{
|
||||||
detail::advance_impl(
|
--it;
|
||||||
it, n, typename iterator_traversal<InputIterator>::type()
|
++n;
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
using namespace advance_adl_barrier;
|
template< typename RandomAccessIterator, typename Distance >
|
||||||
|
inline BOOST_CXX14_CONSTEXPR void advance_impl(RandomAccessIterator& it, Distance n, random_access_traversal_tag)
|
||||||
|
{
|
||||||
|
it += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
namespace advance_adl_barrier {
|
||||||
|
|
||||||
|
template< typename InputIterator, typename Distance >
|
||||||
|
inline BOOST_CXX14_CONSTEXPR void advance(InputIterator& it, Distance n)
|
||||||
|
{
|
||||||
|
detail::advance_impl(it, n, typename iterator_traversal< InputIterator >::type());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace advance_adl_barrier
|
||||||
|
|
||||||
|
using namespace advance_adl_barrier;
|
||||||
|
|
||||||
} // namespace iterators
|
} // namespace iterators
|
||||||
|
|
||||||
|
@ -13,48 +13,42 @@
|
|||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace iterators {
|
namespace iterators {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
namespace detail {
|
template< typename SinglePassIterator >
|
||||||
template <typename SinglePassIterator>
|
inline BOOST_CXX14_CONSTEXPR typename iterator_difference< SinglePassIterator >::type
|
||||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<SinglePassIterator>::type
|
distance_impl(SinglePassIterator first, SinglePassIterator last, single_pass_traversal_tag)
|
||||||
distance_impl(
|
{
|
||||||
SinglePassIterator first
|
typename iterator_difference< SinglePassIterator >::type n = 0;
|
||||||
, SinglePassIterator last
|
while (first != last)
|
||||||
, single_pass_traversal_tag
|
{
|
||||||
)
|
++first;
|
||||||
{
|
++n;
|
||||||
typename iterator_difference<SinglePassIterator>::type n = 0;
|
|
||||||
while (first != last) {
|
|
||||||
++first;
|
|
||||||
++n;
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename RandomAccessIterator>
|
|
||||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<RandomAccessIterator>::type
|
|
||||||
distance_impl(
|
|
||||||
RandomAccessIterator first
|
|
||||||
, RandomAccessIterator last
|
|
||||||
, random_access_traversal_tag
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return last - first;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
namespace distance_adl_barrier {
|
template< typename RandomAccessIterator >
|
||||||
template <typename SinglePassIterator>
|
inline BOOST_CXX14_CONSTEXPR typename iterator_difference< RandomAccessIterator >::type
|
||||||
inline BOOST_CXX14_CONSTEXPR typename iterator_difference<SinglePassIterator>::type
|
distance_impl(RandomAccessIterator first, RandomAccessIterator last, random_access_traversal_tag)
|
||||||
distance(SinglePassIterator first, SinglePassIterator last)
|
{
|
||||||
{
|
return last - first;
|
||||||
return detail::distance_impl(
|
}
|
||||||
first, last, typename iterator_traversal<SinglePassIterator>::type()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace distance_adl_barrier;
|
} // namespace detail
|
||||||
|
|
||||||
|
namespace distance_adl_barrier {
|
||||||
|
|
||||||
|
template< typename SinglePassIterator >
|
||||||
|
inline BOOST_CXX14_CONSTEXPR typename iterator_difference< SinglePassIterator >::type
|
||||||
|
distance(SinglePassIterator first, SinglePassIterator last)
|
||||||
|
{
|
||||||
|
return detail::distance_impl(first, last, typename iterator_traversal< SinglePassIterator >::type());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace distance_adl_barrier
|
||||||
|
|
||||||
|
using namespace distance_adl_barrier;
|
||||||
|
|
||||||
} // namespace iterators
|
} // namespace iterators
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user