blob: c9b765dd329832e3b93b491660af3e61d4c592ab [file] [log] [blame]
Jeff Thompsonef2d5a42013-08-22 19:09:24 -07001// (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)
Jeff Thompson3d613fd2013-10-15 15:39:04 -07007#ifndef NDNBOOST_REVERSE_ITERATOR_23022003THW_HPP
8#define NDNBOOST_REVERSE_ITERATOR_23022003THW_HPP
Jeff Thompsonef2d5a42013-08-22 19:09:24 -07009
10#include <ndnboost/next_prior.hpp>
11#include <ndnboost/iterator.hpp>
12#include <ndnboost/iterator/iterator_adaptor.hpp>
13
14namespace ndnboost
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 *ndnboost::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 ndnboost
68
Jeff Thompson3d613fd2013-10-15 15:39:04 -070069#endif // NDNBOOST_REVERSE_ITERATOR_23022003THW_HPP