Squashed 'third_party/boostorg/iterator/' content from commit b2adecb
Change-Id: I284a73816f9cc846742923879275b84c6e0c915c
git-subtree-dir: third_party/boostorg/iterator
git-subtree-split: b2adecb951af025698618f19a3c838bd314966dc
diff --git a/doc/reverse_iterator_ref.rst b/doc/reverse_iterator_ref.rst
new file mode 100644
index 0000000..b239b26
--- /dev/null
+++ b/doc/reverse_iterator_ref.rst
@@ -0,0 +1,141 @@
+.. 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``