You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
69 lines
1.9 KiB
69 lines
1.9 KiB
// (C) Copyright David Abrahams 2002. |
|
// (C) Copyright Jeremy Siek 2002. |
|
// (C) Copyright Thomas Witt 2002. |
|
// Distributed under the Boost Software License, Version 1.0. (See |
|
// accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP |
|
#define BOOST_REVERSE_ITERATOR_23022003THW_HPP |
|
|
|
#include <boost/iterator.hpp> |
|
#include <boost/utility.hpp> |
|
#include <boost/iterator/iterator_adaptor.hpp> |
|
|
|
namespace boost |
|
{ |
|
|
|
// |
|
// |
|
// |
|
template <class Iterator> |
|
class reverse_iterator |
|
: public iterator_adaptor< reverse_iterator<Iterator>, Iterator > |
|
{ |
|
typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t; |
|
|
|
friend class iterator_core_access; |
|
|
|
public: |
|
reverse_iterator() {} |
|
|
|
explicit reverse_iterator(Iterator x) |
|
: super_t(x) {} |
|
|
|
template<class OtherIterator> |
|
reverse_iterator( |
|
reverse_iterator<OtherIterator> const& r |
|
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 |
|
) |
|
: super_t(r.base()) |
|
{} |
|
|
|
private: |
|
typename super_t::reference dereference() const { return *boost::prior(this->base()); } |
|
|
|
void increment() { --this->base_reference(); } |
|
void decrement() { ++this->base_reference(); } |
|
|
|
void advance(typename super_t::difference_type n) |
|
{ |
|
this->base_reference() += -n; |
|
} |
|
|
|
template <class OtherIterator> |
|
typename super_t::difference_type |
|
distance_to(reverse_iterator<OtherIterator> const& y) const |
|
{ |
|
return this->base_reference() - y.base(); |
|
} |
|
}; |
|
|
|
template <class BidirectionalIterator> |
|
reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x) |
|
{ |
|
return reverse_iterator<BidirectionalIterator>(x); |
|
} |
|
|
|
} // namespace boost |
|
|
|
#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP
|
|
|