annotate DEPENDENCIES/generic/include/boost/iterator/reverse_iterator.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // (C) Copyright David Abrahams 2002.
Chris@16 2 // (C) Copyright Jeremy Siek 2002.
Chris@16 3 // (C) Copyright Thomas Witt 2002.
Chris@16 4 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 5 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 6 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 #ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
Chris@16 8 #define BOOST_REVERSE_ITERATOR_23022003THW_HPP
Chris@16 9
Chris@16 10 #include <boost/next_prior.hpp>
Chris@16 11 #include <boost/iterator.hpp>
Chris@16 12 #include <boost/iterator/iterator_adaptor.hpp>
Chris@16 13
Chris@101 14 namespace boost {
Chris@101 15 namespace iterators {
Chris@16 16
Chris@16 17 //
Chris@16 18 //
Chris@16 19 //
Chris@16 20 template <class Iterator>
Chris@16 21 class reverse_iterator
Chris@16 22 : public iterator_adaptor< reverse_iterator<Iterator>, Iterator >
Chris@16 23 {
Chris@16 24 typedef iterator_adaptor< reverse_iterator<Iterator>, Iterator > super_t;
Chris@16 25
Chris@16 26 friend class iterator_core_access;
Chris@16 27
Chris@16 28 public:
Chris@16 29 reverse_iterator() {}
Chris@16 30
Chris@101 31 explicit reverse_iterator(Iterator x)
Chris@16 32 : super_t(x) {}
Chris@16 33
Chris@16 34 template<class OtherIterator>
Chris@16 35 reverse_iterator(
Chris@16 36 reverse_iterator<OtherIterator> const& r
Chris@16 37 , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0
Chris@16 38 )
Chris@16 39 : super_t(r.base())
Chris@16 40 {}
Chris@16 41
Chris@16 42 private:
Chris@16 43 typename super_t::reference dereference() const { return *boost::prior(this->base()); }
Chris@101 44
Chris@16 45 void increment() { --this->base_reference(); }
Chris@16 46 void decrement() { ++this->base_reference(); }
Chris@16 47
Chris@16 48 void advance(typename super_t::difference_type n)
Chris@16 49 {
Chris@16 50 this->base_reference() += -n;
Chris@16 51 }
Chris@16 52
Chris@16 53 template <class OtherIterator>
Chris@16 54 typename super_t::difference_type
Chris@16 55 distance_to(reverse_iterator<OtherIterator> const& y) const
Chris@16 56 {
Chris@16 57 return this->base_reference() - y.base();
Chris@16 58 }
Chris@16 59 };
Chris@16 60
Chris@16 61 template <class BidirectionalIterator>
Chris@101 62 inline reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)
Chris@16 63 {
Chris@16 64 return reverse_iterator<BidirectionalIterator>(x);
Chris@16 65 }
Chris@16 66
Chris@101 67 } // namespace iterators
Chris@101 68
Chris@101 69 using iterators::reverse_iterator;
Chris@101 70 using iterators::make_reverse_iterator;
Chris@101 71
Chris@16 72 } // namespace boost
Chris@16 73
Chris@16 74 #endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP