source: NonGTP/Boost/boost/iterator/reverse_iterator.hpp @ 857

Revision 857, 1.9 KB checked in by igarcia, 19 years ago (diff)
Line 
1// (C) Copyright David Abrahams 2002.
2// (C) Copyright Jeremy Siek    2002.
3// (C) Copyright Thomas Witt    2002.
4// Distributed under the Boost Software License, Version 1.0. (See
5// accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
8#define BOOST_REVERSE_ITERATOR_23022003THW_HPP
9
10#include <boost/iterator.hpp>
11#include <boost/utility.hpp>
12#include <boost/iterator/iterator_adaptor.hpp>
13
14namespace boost
15{
16
17  //
18  //
19  //
20  template <class Iterator>
21  class reverse_iterator
22      : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >
23  {
24      typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;
25
26      friend class iterator_core_access;
27
28   public:
29      reverse_iterator() {}
30
31      explicit reverse_iterator(Iterator x)
32          : super_t(x) {}
33
34      template<class OtherIterator>
35      reverse_iterator(
36          reverse_iterator<OtherIterator> const& r
37          , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
38          )
39          : super_t(r.base())
40      {}
41
42   private:
43      typename super_t::reference dereference() const { return *boost::prior(this->base()); }
44   
45      void increment() { --this->base_reference(); }
46      void decrement() { ++this->base_reference(); }
47
48      void advance(typename super_t::difference_type n)
49      {
50          this->base_reference() += -n;
51      }
52
53      template <class OtherIterator>
54      typename super_t::difference_type
55      distance_to(reverse_iterator<OtherIterator> const& y) const
56      {
57          return this->base_reference() - y.base();
58      }
59  };
60
61  template <class BidirectionalIterator>
62  reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)
63  {
64      return reverse_iterator<BidirectionalIterator>(x);
65  }
66
67} // namespace boost
68
69#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP
Note: See TracBrowser for help on using the repository browser.