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``
 |