mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			142 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			142 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|  | .. Copyright David Abrahams 2006. 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)
 | ||
|  | 
 | ||
|  | ::
 | ||
|  | 
 | ||
|  |   template <class Iterator>
 | ||
|  |   class reverse_iterator
 | ||
|  |   {
 | ||
|  |   public:
 | ||
|  |     typedef iterator_traits<Iterator>::value_type value_type;
 | ||
|  |     typedef iterator_traits<Iterator>::reference reference;
 | ||
|  |     typedef iterator_traits<Iterator>::pointer pointer;
 | ||
|  |     typedef iterator_traits<Iterator>::difference_type difference_type;
 | ||
|  |     typedef /* see below */ iterator_category;
 | ||
|  | 
 | ||
|  |     reverse_iterator() {}
 | ||
|  |     explicit reverse_iterator(Iterator x) ;
 | ||
|  | 
 | ||
|  |     template<class OtherIterator>
 | ||
|  |     reverse_iterator(
 | ||
|  |         reverse_iterator<OtherIterator> const& r
 | ||
|  |       , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
 | ||
|  |     );
 | ||
|  |     Iterator const& base() const;
 | ||
|  |     reference operator*() const;
 | ||
|  |     reverse_iterator& operator++();
 | ||
|  |     reverse_iterator& operator--();
 | ||
|  |   private:
 | ||
|  |     Iterator m_iterator; // exposition
 | ||
|  |   };
 | ||
|  | 
 | ||
|  | 
 | ||
|  | If ``Iterator`` models Random Access Traversal Iterator and Readable
 | ||
|  | Lvalue Iterator, then ``iterator_category`` is convertible to
 | ||
|  | ``random_access_iterator_tag``. Otherwise, if
 | ||
|  | ``Iterator`` models Bidirectional Traversal Iterator and Readable
 | ||
|  | Lvalue Iterator, then ``iterator_category`` is convertible to
 | ||
|  | ``bidirectional_iterator_tag``. Otherwise, ``iterator_category`` is
 | ||
|  | convertible to ``input_iterator_tag``.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator`` requirements
 | ||
|  | .................................
 | ||
|  | 
 | ||
|  | ``Iterator`` must be a model of Bidirectional Traversal Iterator.  The
 | ||
|  | type ``iterator_traits<Iterator>::reference`` must be the type of
 | ||
|  | ``*i``, where ``i`` is an object of type ``Iterator``.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator`` models
 | ||
|  | ...........................
 | ||
|  | 
 | ||
|  | A specialization of ``reverse_iterator`` models the same iterator
 | ||
|  | traversal and iterator access concepts modeled by its ``Iterator``
 | ||
|  | argument.  In addition, it may model old iterator concepts
 | ||
|  | specified in the following table:
 | ||
|  | 
 | ||
|  | +---------------------------------------+-----------------------------------+
 | ||
|  | | If ``I`` models                       |then ``reverse_iterator<I>`` models|
 | ||
|  | +=======================================+===================================+
 | ||
|  | | Readable Lvalue Iterator,             | Bidirectional Iterator            |
 | ||
|  | | Bidirectional Traversal Iterator      |                                   |
 | ||
|  | +---------------------------------------+-----------------------------------+
 | ||
|  | | Writable Lvalue Iterator,             | Mutable Bidirectional Iterator    |
 | ||
|  | | Bidirectional Traversal Iterator      |                                   |
 | ||
|  | +---------------------------------------+-----------------------------------+
 | ||
|  | | Readable Lvalue Iterator,             | Random Access Iterator            |
 | ||
|  | | Random Access Traversal Iterator      |                                   |
 | ||
|  | +---------------------------------------+-----------------------------------+
 | ||
|  | | Writable Lvalue Iterator,             | Mutable Random Access Iterator    |
 | ||
|  | | Random Access Traversal Iterator      |                                   |
 | ||
|  | +---------------------------------------+-----------------------------------+
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator<X>`` is interoperable with
 | ||
|  | ``reverse_iterator<Y>`` if and only if ``X`` is interoperable with
 | ||
|  | ``Y``.
 | ||
|  | 
 | ||
|  | ``reverse_iterator`` operations
 | ||
|  | ...............................
 | ||
|  | 
 | ||
|  | In addition to the operations required by the concepts modeled by
 | ||
|  | ``reverse_iterator``, ``reverse_iterator`` provides the following
 | ||
|  | operations.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator();``
 | ||
|  | 
 | ||
|  | :Requires: ``Iterator`` must be Default Constructible.
 | ||
|  | :Effects: Constructs an instance of ``reverse_iterator`` with ``m_iterator`` 
 | ||
|  |   default constructed.
 | ||
|  | 
 | ||
|  | ``explicit reverse_iterator(Iterator x);``
 | ||
|  | 
 | ||
|  | :Effects: Constructs an instance of ``reverse_iterator`` with
 | ||
|  |     ``m_iterator`` copy constructed from ``x``.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ::
 | ||
|  | 
 | ||
|  |     template<class OtherIterator>
 | ||
|  |     reverse_iterator(
 | ||
|  |         reverse_iterator<OtherIterator> const& r
 | ||
|  |       , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
 | ||
|  |     );
 | ||
|  | 
 | ||
|  | :Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``.
 | ||
|  | :Effects: Constructs instance of ``reverse_iterator`` whose 
 | ||
|  |     ``m_iterator`` subobject is constructed from ``y.base()``.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``Iterator const& base() const;``
 | ||
|  | 
 | ||
|  | :Returns: ``m_iterator``
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reference operator*() const;``
 | ||
|  | 
 | ||
|  | :Effects:  | ||
|  | 
 | ||
|  | ::
 | ||
|  | 
 | ||
|  |     Iterator tmp = m_iterator;
 | ||
|  |     return *--tmp;
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator& operator++();``
 | ||
|  | 
 | ||
|  | :Effects: ``--m_iterator``
 | ||
|  | :Returns: ``*this``
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ``reverse_iterator& operator--();``
 | ||
|  | 
 | ||
|  | :Effects: ``++m_iterator``
 | ||
|  | :Returns: ``*this``
 |