imgtools/imglib/boostlibrary/boost/iterator/reverse_iterator.hpp
changeset 0 044383f39525
equal deleted inserted replaced
-1:000000000000 0:044383f39525
       
     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 
       
    14 namespace 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