/usr/include/boost/iterator
Edit: /usr/include/boost/iterator/reverse_iterator.hpp (2055B)
// (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
namespace boost {
namespace iterators {
//
//
//
template
class reverse_iterator
: public iterator_adaptor< reverse_iterator, Iterator >
{
typedef iterator_adaptor< reverse_iterator, Iterator > super_t;
friend class iterator_core_access;
public:
reverse_iterator() {}
explicit reverse_iterator(Iterator x)
: super_t(x) {}
template
reverse_iterator(
reverse_iterator const& r
, typename enable_if_convertible::type* = 0
)
: super_t(r.base())
{}
private:
typename super_t::reference dereference() const
{
Iterator it = this->base_reference();
--it;
return *it;
}
void increment() { --this->base_reference(); }
void decrement() { ++this->base_reference(); }
void advance(typename super_t::difference_type n)
{
this->base_reference() -= n;
}
template
typename super_t::difference_type
distance_to(reverse_iterator const& y) const
{
return this->base_reference() - y.base();
}
};
template
inline reverse_iterator make_reverse_iterator(BidirectionalIterator x)
{
return reverse_iterator(x);
}
} // namespace iterators
using iterators::reverse_iterator;
using iterators::make_reverse_iterator;
} // namespace boost
#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP