123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #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);
- }
- }
- #endif
|