mirror of
https://github.com/boostorg/iterator.git
synced 2025-05-11 13:33:56 +00:00
some major changes to the requirements/models section of counting_iterator
[SVN r21651]
This commit is contained in:
parent
3bf52ec2f2
commit
e785cc70d1
@ -3,7 +3,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
|
||||
<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
|
||||
<title>Counting Iterator</title>
|
||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||
@ -92,9 +92,13 @@ class counting_iterator
|
||||
<p>If the <tt class="literal"><span class="pre">Diference</span></tt> argument is <tt class="literal"><span class="pre">use_default</span></tt> then the
|
||||
<tt class="literal"><span class="pre">difference_type</span></tt> member is an implementation defined signed
|
||||
integral type.</p>
|
||||
<p>The member <tt class="literal"><span class="pre">iterator_category</span></tt> is a type that satisfies the
|
||||
requirements of the concepts modeled by the <tt class="literal"><span class="pre">counting_iterator</span></tt> as
|
||||
specified in the models section.</p>
|
||||
<p>If <tt class="literal"><span class="pre">CategoryOrTraversal</span></tt> is not <tt class="literal"><span class="pre">use_default</span></tt> then the member
|
||||
<tt class="literal"><span class="pre">iterator_category</span></tt> is <tt class="literal"><span class="pre">CategoryOrTraversal</span></tt>. Otherwise, if
|
||||
<tt class="literal"><span class="pre">Incrementable</span></tt> is a numeric type then <tt class="literal"><span class="pre">iterator_category</span></tt> is a
|
||||
type convertible to <tt class="literal"><span class="pre">random_access_traversal_tag</span></tt> and
|
||||
<tt class="literal"><span class="pre">random_access_iterator_tag</span></tt>. If <tt class="literal"><span class="pre">Incrementable</span></tt> is not a numeric
|
||||
type then <tt class="literal"><span class="pre">iterator_category</span></tt> is
|
||||
<tt class="literal"><span class="pre">iterator_traversal<Incrementable>::type</span></tt>.</p>
|
||||
<dl>
|
||||
<dt>[<em>Note:</em> implementers are encouraged to provide an implementation of</dt>
|
||||
<dd><tt class="literal"><span class="pre">distance_to</span></tt> and a <tt class="literal"><span class="pre">difference_type</span></tt> that avoids overflows in
|
||||
@ -105,27 +109,22 @@ the cases when the <tt class="literal"><span class="pre">Incrementable</span></t
|
||||
<h1><a class="toc-backref" href="#id3" name="counting-iterator-requirements"><tt class="literal"><span class="pre">counting_iterator</span></tt> requirements</a></h1>
|
||||
<p>The <tt class="literal"><span class="pre">Incrementable</span></tt> type must be Default Constructible, Copy
|
||||
Constructible, and Assignable.</p>
|
||||
</div>
|
||||
<div class="section" id="counting-iterator-models">
|
||||
<h1><a class="toc-backref" href="#id4" name="counting-iterator-models"><tt class="literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
||||
<p><tt class="literal"><span class="pre">counting_iterator</span></tt> models Readable Lvalue Iterator.</p>
|
||||
<p>Furthermore, if you wish to create a counting iterator that is a
|
||||
Forward Traversal Iterator and also Forward Iterator, then the
|
||||
following expressions must be valid:</p>
|
||||
<p>If <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to <tt class="literal"><span class="pre">forward_iterator_tag</span></tt> or
|
||||
<tt class="literal"><span class="pre">forward_traversal_tag</span></tt> then the following expressions must be valid:</p>
|
||||
<pre class="literal-block">
|
||||
Incrementable i, j;
|
||||
++i // pre-increment
|
||||
i == j // operator equal
|
||||
</pre>
|
||||
<p>If you wish to create a counting iterator that is a Bidirectional
|
||||
Traversal Iterator and also Bidirectional Iterator, then pre-decrement
|
||||
is also required:</p>
|
||||
<p>If <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
||||
<tt class="literal"><span class="pre">bidirectional_iterator_tag</span></tt> or <tt class="literal"><span class="pre">bidirectional_traversal_tag</span></tt> then
|
||||
pre-decrement is required:</p>
|
||||
<pre class="literal-block">
|
||||
--i
|
||||
</pre>
|
||||
<p>If you wish to create a counting iterator that is a Random Access
|
||||
Traversal Iterator and also Random Access Iterator, then these
|
||||
additional expressions are also required:</p>
|
||||
<p>If <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
||||
<tt class="literal"><span class="pre">random_access_iterator_tag</span></tt> or <tt class="literal"><span class="pre">random_access_traversal_tag</span></tt> then
|
||||
these additional expressions are also required:</p>
|
||||
<pre class="literal-block">
|
||||
counting_iterator::difference_type n;
|
||||
i += n
|
||||
@ -133,6 +132,13 @@ n = i - j
|
||||
i < j
|
||||
</pre>
|
||||
</div>
|
||||
<div class="section" id="counting-iterator-models">
|
||||
<h1><a class="toc-backref" href="#id4" name="counting-iterator-models"><tt class="literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
||||
<p><tt class="literal"><span class="pre">counting_iterator</span></tt> models Readable Lvalue Iterator. In addition,
|
||||
<tt class="literal"><span class="pre">counting_iterator</span></tt> models the concepts corresponding to the
|
||||
iterator tags that <tt class="literal"><span class="pre">counting_iterator::iterator_category</span></tt> is
|
||||
convertible to.</p>
|
||||
</div>
|
||||
<div class="section" id="counting-iterator-operations">
|
||||
<h1><a class="toc-backref" href="#id5" name="counting-iterator-operations"><tt class="literal"><span class="pre">counting_iterator</span></tt> operations</a></h1>
|
||||
<p>In addition to the operations required by the concepts modeled by
|
||||
@ -254,10 +260,10 @@ indirectly printing out the numbers from 0 to 7
|
||||
<p>The source code for this example can be found <a class="reference" href="../example/counting_iterator_example.cpp">here</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer" />
|
||||
<hr class="footer"/>
|
||||
<div class="footer">
|
||||
<a class="reference" href="counting_iterator.rst">View document source</a>.
|
||||
Generated on: 2004-01-12 20:46 UTC.
|
||||
Generated on: 2004-01-12 21:18 UTC.
|
||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||
</div>
|
||||
</body>
|
||||
|
@ -30,44 +30,43 @@ If the ``Diference`` argument is ``use_default`` then the
|
||||
``difference_type`` member is an implementation defined signed
|
||||
integral type.
|
||||
|
||||
The member ``iterator_category`` is a type that satisfies the
|
||||
requirements of the concepts modeled by the ``counting_iterator`` as
|
||||
specified in the models section.
|
||||
If ``CategoryOrTraversal`` is not ``use_default`` then the member
|
||||
``iterator_category`` is ``CategoryOrTraversal``. Otherwise, if
|
||||
``Incrementable`` is a numeric type then ``iterator_category`` is a
|
||||
type convertible to ``random_access_traversal_tag`` and
|
||||
``random_access_iterator_tag``. If ``Incrementable`` is not a numeric
|
||||
type then ``iterator_category`` is
|
||||
``iterator_traversal<Incrementable>::type``.
|
||||
|
||||
|
||||
[*Note:* implementers are encouraged to provide an implementation of
|
||||
``distance_to`` and a ``difference_type`` that avoids overflows in
|
||||
the cases when the ``Incrementable`` type is a numeric type.]
|
||||
|
||||
|
||||
``counting_iterator`` requirements
|
||||
..................................
|
||||
|
||||
The ``Incrementable`` type must be Default Constructible, Copy
|
||||
Constructible, and Assignable.
|
||||
|
||||
|
||||
``counting_iterator`` models
|
||||
............................
|
||||
|
||||
``counting_iterator`` models Readable Lvalue Iterator.
|
||||
|
||||
Furthermore, if you wish to create a counting iterator that is a
|
||||
Forward Traversal Iterator and also Forward Iterator, then the
|
||||
following expressions must be valid::
|
||||
If ``iterator_category`` is convertible to ``forward_iterator_tag`` or
|
||||
``forward_traversal_tag`` then the following expressions must be valid::
|
||||
|
||||
Incrementable i, j;
|
||||
++i // pre-increment
|
||||
i == j // operator equal
|
||||
|
||||
If you wish to create a counting iterator that is a Bidirectional
|
||||
Traversal Iterator and also Bidirectional Iterator, then pre-decrement
|
||||
is also required::
|
||||
|
||||
If ``iterator_category`` is convertible to
|
||||
``bidirectional_iterator_tag`` or ``bidirectional_traversal_tag`` then
|
||||
pre-decrement is required::
|
||||
|
||||
--i
|
||||
|
||||
If you wish to create a counting iterator that is a Random Access
|
||||
Traversal Iterator and also Random Access Iterator, then these
|
||||
additional expressions are also required::
|
||||
If ``iterator_category`` is convertible to
|
||||
``random_access_iterator_tag`` or ``random_access_traversal_tag`` then
|
||||
these additional expressions are also required::
|
||||
|
||||
counting_iterator::difference_type n;
|
||||
i += n
|
||||
@ -76,6 +75,14 @@ additional expressions are also required::
|
||||
|
||||
|
||||
|
||||
``counting_iterator`` models
|
||||
............................
|
||||
|
||||
``counting_iterator`` models Readable Lvalue Iterator. In addition,
|
||||
``counting_iterator`` models the concepts corresponding to the
|
||||
iterator tags that ``counting_iterator::iterator_category`` is
|
||||
convertible to.
|
||||
|
||||
|
||||
``counting_iterator`` operations
|
||||
................................
|
||||
|
@ -980,8 +980,12 @@ categories. There is no description of what the argument to
|
||||
iterator_adaptor should be.
|
||||
|
||||
|
||||
:Proposed resolution: **Needs work** (Jeremy)
|
||||
|
||||
:Proposed resolution:
|
||||
We no longer inherit from iterator_adaptor. So instead,
|
||||
we specify the iterator_category in terms of the Traversal type
|
||||
(which is now called CategoryOrTraversal). Also the
|
||||
requirements and models section was reorganized to
|
||||
match these changes and to make more sense.
|
||||
|
||||
|
||||
|
||||
|
@ -3,11 +3,11 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
|
||||
<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
|
||||
<title>Iterator Adaptor</title>
|
||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||
<meta name="date" content="2003-09-14" />
|
||||
<meta name="date" content="2004-01-12" />
|
||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved" />
|
||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
||||
</head>
|
||||
@ -27,7 +27,7 @@
|
||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||
Railway Operation and Construction</a></td></tr>
|
||||
<tr><th class="docinfo-name">Date:</th>
|
||||
<td>2003-09-14</td></tr>
|
||||
<td>2004-01-12</td></tr>
|
||||
<tr><th class="docinfo-name">Copyright:</th>
|
||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved</td></tr>
|
||||
</tbody>
|
||||
@ -433,10 +433,10 @@ adaptors</a> to get an idea of the sorts of things you can do with
|
||||
<a class="reference" href="counting_iterator.html"><tt class="literal"><span class="pre">counting_iterator</span></tt></a>, which demonstrates that <tt class="literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="literal"><span class="pre">Base</span></tt> type needn't be an iterator.</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer" />
|
||||
<hr class="footer"/>
|
||||
<div class="footer">
|
||||
<a class="reference" href="iterator_adaptor.rst">View document source</a>.
|
||||
Generated on: 2004-01-12 20:28 UTC.
|
||||
Generated on: 2004-01-12 21:18 UTC.
|
||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||
</div>
|
||||
</body>
|
||||
|
@ -3,7 +3,7 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils 0.3.1: http://docutils.sourceforge.net/" />
|
||||
<meta name="generator" content="Docutils 0.2.8: http://docutils.sourceforge.net/" />
|
||||
<title>Iterator Facade</title>
|
||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||
@ -144,7 +144,7 @@ of the derived iterator type. These member functions are described
|
||||
briefly below and in more detail in the iterator facade
|
||||
requirements.</p>
|
||||
<blockquote>
|
||||
<table border class="table">
|
||||
<table class="table" frame="border" rules="all">
|
||||
<colgroup>
|
||||
<col width="44%" />
|
||||
<col width="56%" />
|
||||
@ -397,7 +397,7 @@ is a constant object of a random access traversal iterator type
|
||||
interoperable with <tt class="literal"><span class="pre">X</span></tt>.</p>
|
||||
<a class="target" id="core-operations" name="core-operations"></a><div class="topic">
|
||||
<p class="topic-title"><tt class="literal"><span class="pre">iterator_facade</span></tt> Core Operations</p>
|
||||
<table border class="table">
|
||||
<table class="table" frame="border" rules="all">
|
||||
<colgroup>
|
||||
<col width="19%" />
|
||||
<col width="21%" />
|
||||
@ -1134,10 +1134,10 @@ even be superior.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer" />
|
||||
<hr class="footer"/>
|
||||
<div class="footer">
|
||||
<a class="reference" href="iterator_facade.rst">View document source</a>.
|
||||
Generated on: 2004-01-12 19:20 UTC.
|
||||
Generated on: 2004-01-12 21:18 UTC.
|
||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||
</div>
|
||||
</body>
|
||||
|
@ -542,7 +542,7 @@ stated semantics.</p>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td><tt class="literal"><span class="pre">traversal_category<X>::type</span></tt></td>
|
||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||
<td>Convertible to
|
||||
<tt class="literal"><span class="pre">incrementable_traversal_tag</span></tt></td>
|
||||
<td> </td>
|
||||
@ -590,7 +590,7 @@ relation over its domain</td>
|
||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
||||
<td><tt class="literal"><span class="pre">!(a</span> <span class="pre">==</span> <span class="pre">b)</span></tt></td>
|
||||
</tr>
|
||||
<tr><td><tt class="literal"><span class="pre">traversal_category<X>::type</span></tt></td>
|
||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||
<td>Convertible to
|
||||
<tt class="literal"><span class="pre">single_pass_traversal_tag</span></tt></td>
|
||||
<td> </td>
|
||||
@ -637,7 +637,7 @@ dereferenceable implies
|
||||
the distance between iterators</td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr><td><tt class="literal"><span class="pre">traversal_category<X>::type</span></tt></td>
|
||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||
<td>Convertible to
|
||||
<tt class="literal"><span class="pre">forward_traversal_tag</span></tt></td>
|
||||
<td> </td>
|
||||
@ -692,7 +692,7 @@ implies <tt class="literal"><span class="pre">r</span> <span class="pre">==</spa
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td><tt class="literal"><span class="pre">traversal_category<X>::type</span></tt></td>
|
||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||
<td>Convertible to
|
||||
<tt class="literal"><span class="pre">bidirectional_traversal_tag</span></tt></td>
|
||||
<td> </td>
|
||||
@ -805,7 +805,7 @@ ordering relation</td>
|
||||
<td><tt class="literal"><span class="pre">!(a</span> <span class="pre">></span> <span class="pre">b)</span></tt></td>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr><td><tt class="literal"><span class="pre">traversal_category<X>::type</span></tt></td>
|
||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||
<td>Convertible to
|
||||
<tt class="literal"><span class="pre">random_access_traversal_tag</span></tt></td>
|
||||
<td> </td>
|
||||
@ -840,7 +840,7 @@ templates satisfy the <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc2
|
||||
yields <tt class="literal"><span class="pre">true</span></tt> if, for an object <tt class="literal"><span class="pre">a</span></tt> of type <tt class="literal"><span class="pre">X</span></tt>, <tt class="literal"><span class="pre">*a</span></tt> is
|
||||
convertible to <tt class="literal"><span class="pre">iterator_traits<X>::value_type</span></tt>, and <tt class="literal"><span class="pre">false</span></tt>
|
||||
otherwise.</p>
|
||||
<p><tt class="literal"><span class="pre">iterator_traversal<X>::value_type</span></tt> is defined to be:</p>
|
||||
<p><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt> is defined to be:</p>
|
||||
<pre class="literal-block">
|
||||
traversal-category(X) =
|
||||
cat = iterator_traits<X>::iterator_category;
|
||||
@ -878,7 +878,7 @@ LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum -->
|
||||
<hr class="footer"/>
|
||||
<div class="footer">
|
||||
<a class="reference" href="new-iter-concepts.rst">View document source</a>.
|
||||
Generated on: 2004-01-12 20:50 UTC.
|
||||
Generated on: 2004-01-12 21:16 UTC.
|
||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||
</div>
|
||||
</body>
|
||||
|
@ -477,7 +477,7 @@ stated semantics.
|
||||
| | | return tmp; |
|
||||
| | | } |
|
||||
+--------------------------------+-------------------------------+--------------------+
|
||||
|``traversal_category<X>::type`` |Convertible to | |
|
||||
|``iterator_traversal<X>::type`` |Convertible to | |
|
||||
| |``incrementable_traversal_tag``| |
|
||||
+--------------------------------+-------------------------------+--------------------+
|
||||
|
||||
@ -509,7 +509,7 @@ semantics.
|
||||
+--------------------------------+-----------------------------+---------------------------+
|
||||
|``a != b`` |convertible to ``bool`` |``!(a == b)`` |
|
||||
+--------------------------------+-----------------------------+---------------------------+
|
||||
|``traversal_category<X>::type`` |Convertible to | |
|
||||
|``iterator_traversal<X>::type`` |Convertible to | |
|
||||
| |``single_pass_traversal_tag``| |
|
||||
+--------------------------------+-----------------------------+---------------------------+
|
||||
|
||||
@ -541,7 +541,7 @@ stated semantics.
|
||||
| |the distance between iterators | |
|
||||
| | | |
|
||||
+---------------------------------------+-----------------------------------+----------------------------+
|
||||
|``traversal_category<X>::type`` |Convertible to | |
|
||||
|``iterator_traversal<X>::type`` |Convertible to | |
|
||||
| |``forward_traversal_tag`` | |
|
||||
+---------------------------------------+-----------------------------------+----------------------------+
|
||||
|
||||
@ -581,7 +581,7 @@ respect the stated semantics.
|
||||
| | | return tmp; |
|
||||
| | | } |
|
||||
+------------------------------------+---------------------------------------------+---------------------+
|
||||
|``traversal_category<X>::type`` |Convertible to | |
|
||||
|``iterator_traversal<X>::type`` |Convertible to | |
|
||||
| |``bidirectional_traversal_tag`` | |
|
||||
| | | |
|
||||
+------------------------------------+---------------------------------------------+---------------------+
|
||||
@ -649,7 +649,7 @@ constant object of type ``Distance``.
|
||||
+-------------------------------------------+-------------------------------------------------+-------------------------+----------------------+
|
||||
|``a <= b`` |convertible to ``bool`` |``!(a > b)`` | |
|
||||
+-------------------------------------------+-------------------------------------------------+-------------------------+----------------------+
|
||||
|``traversal_category<X>::type`` |Convertible to | | |
|
||||
|``iterator_traversal<X>::type`` |Convertible to | | |
|
||||
| |``random_access_traversal_tag`` | | |
|
||||
+-------------------------------------------+-------------------------------------------------+-------------------------+----------------------+
|
||||
|
||||
@ -684,7 +684,7 @@ yields ``true`` if, for an object ``a`` of type ``X``, ``*a`` is
|
||||
convertible to ``iterator_traits<X>::value_type``, and ``false``
|
||||
otherwise.
|
||||
|
||||
``iterator_traversal<X>::value_type`` is defined to be:
|
||||
``iterator_traversal<X>::type`` is defined to be:
|
||||
|
||||
.. parsed-literal::
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user