75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								// (C) Copyright David Abrahams 2002.
							 | 
						||
| 
								 | 
							
								// (C) Copyright Jeremy Siek    2002.
							 | 
						||
| 
								 | 
							
								// (C) Copyright Thomas Witt    2002.
							 | 
						||
| 
								 | 
							
								// Distributed under the Boost Software License, Version 1.0. (See
							 | 
						||
| 
								 | 
							
								// accompanying file LICENSE_1_0.txt or copy at
							 | 
						||
| 
								 | 
							
								// http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_REVERSE_ITERATOR_23022003THW_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_REVERSE_ITERATOR_23022003THW_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/next_prior.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/iterator.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/iterator/iterator_adaptor.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace iterators {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  //
							 | 
						||
| 
								 | 
							
								  //
							 | 
						||
| 
								 | 
							
								  //
							 | 
						||
| 
								 | 
							
								  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>
							 | 
						||
| 
								 | 
							
								  inline reverse_iterator<BidirectionalIterator> make_reverse_iterator(BidirectionalIterator x)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								      return reverse_iterator<BidirectionalIterator>(x);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace iterators
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using iterators::reverse_iterator;
							 | 
						||
| 
								 | 
							
								using iterators::make_reverse_iterator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_REVERSE_ITERATOR_23022003THW_HPP
							 |