forked from boostorg/iterator
improved the models section of transform iterator to discuss old iterator
categories [SVN r21643]
This commit is contained in:
@ -1668,6 +1668,12 @@ template <class UnaryFunction,
|
|||||||
class transform_iterator
|
class transform_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef /* see below */ value_type;
|
||||||
|
typedef /* see below */ reference;
|
||||||
|
typedef /* see below */ pointer;
|
||||||
|
typedef iterator_traits<Iterator>::difference_type difference_type;
|
||||||
|
typedef /* see below */ iterator_category;
|
||||||
|
|
||||||
transform_iterator();
|
transform_iterator();
|
||||||
transform_iterator(Iterator const& x, UnaryFunction f);
|
transform_iterator(Iterator const& x, UnaryFunction f);
|
||||||
|
|
||||||
@ -1687,6 +1693,12 @@ private:
|
|||||||
UnaryFunction m_f; // exposition only
|
UnaryFunction m_f; // exposition only
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
|
<p>The <tt class="literal"><span class="pre">reference</span></tt> type of <tt class="literal"><span class="pre">transform_iterator</span></tt> is
|
||||||
|
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.
|
||||||
|
The <tt class="literal"><span class="pre">value_type</span></tt> is <tt class="literal"><span class="pre">remove_cv<remove_reference<reference></span> <span class="pre">>::type</span></tt>.
|
||||||
|
The <tt class="literal"><span class="pre">iterator_category</span></tt> member is a type convertible to the tags
|
||||||
|
corresponding to each standard concept modeled by
|
||||||
|
<tt class="literal"><span class="pre">transform_iterator</span></tt>, as described in the models section.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-requirements">
|
<div class="section" id="transform-iterator-requirements">
|
||||||
<h4><a class="toc-backref" href="#id53" name="transform-iterator-requirements"><tt class="literal"><span class="pre">transform_iterator</span></tt> requirements</a></h4>
|
<h4><a class="toc-backref" href="#id53" name="transform-iterator-requirements"><tt class="literal"><span class="pre">transform_iterator</span></tt> requirements</a></h4>
|
||||||
@ -1695,7 +1707,7 @@ the expression <tt class="literal"><span class="pre">f(*i)</span></tt> must be v
|
|||||||
type <tt class="literal"><span class="pre">UnaryFunction</span></tt>, <tt class="literal"><span class="pre">i</span></tt> is an object of type <tt class="literal"><span class="pre">Iterator</span></tt>, and
|
type <tt class="literal"><span class="pre">UnaryFunction</span></tt>, <tt class="literal"><span class="pre">i</span></tt> is an object of type <tt class="literal"><span class="pre">Iterator</span></tt>, and
|
||||||
where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must be
|
where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must be
|
||||||
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.</p>
|
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.</p>
|
||||||
<p>The type <tt class="literal"><span class="pre">Iterator</span></tt> must at least model Readable Iterator.</p>
|
<p>The argument <tt class="literal"><span class="pre">Iterator</span></tt> shall model Readable Iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-models">
|
<div class="section" id="transform-iterator-models">
|
||||||
<h4><a class="toc-backref" href="#id54" name="transform-iterator-models"><tt class="literal"><span class="pre">transform_iterator</span></tt> models</a></h4>
|
<h4><a class="toc-backref" href="#id54" name="transform-iterator-models"><tt class="literal"><span class="pre">transform_iterator</span></tt> models</a></h4>
|
||||||
@ -1703,17 +1715,43 @@ where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must b
|
|||||||
following options that is also modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
following options that is also modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>Writable Lvalue Iterator if <tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt> is a non-const reference.</li>
|
<li>Writable Lvalue Iterator if <tt class="literal"><span class="pre">transform_iterator::reference</span></tt> is a non-const reference.</li>
|
||||||
<li>Readable Lvalue Iterator if <tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt> is a const
|
<li>Readable Lvalue Iterator if <tt class="literal"><span class="pre">transform_iterator::reference</span></tt> is a const reference.</li>
|
||||||
reference.</li>
|
|
||||||
<li>Readable Iterator otherwise.</li>
|
<li>Readable Iterator otherwise.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>The <tt class="literal"><span class="pre">transform_iterator</span></tt> models the most refined standard traversal
|
<p>The <tt class="literal"><span class="pre">transform_iterator</span></tt> models the most refined standard traversal
|
||||||
concept that is modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
concept that is modeled by the <tt class="literal"><span class="pre">Iterator</span></tt> argument.</p>
|
||||||
<p>The <tt class="literal"><span class="pre">reference</span></tt> type of <tt class="literal"><span class="pre">transform_iterator</span></tt> is
|
<p>If <tt class="literal"><span class="pre">transform_iterator</span></tt> is a model of Readable Lvalue Iterator then
|
||||||
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.
|
it models the following original iterator concepts depending on what
|
||||||
The <tt class="literal"><span class="pre">value_type</span></tt> is <tt class="literal"><span class="pre">remove_cv<remove_reference<reference></span> <span class="pre">>::type</span></tt>.</p>
|
the <tt class="literal"><span class="pre">Iterator</span></tt> argument models.</p>
|
||||||
|
<table class="table" frame="border" rules="all">
|
||||||
|
<colgroup>
|
||||||
|
<col width="51%" />
|
||||||
|
<col width="49%" />
|
||||||
|
</colgroup>
|
||||||
|
<thead valign="bottom">
|
||||||
|
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
||||||
|
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody valign="top">
|
||||||
|
<tr><td>Single Pass Iterator</td>
|
||||||
|
<td>Input Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Forward Traversal Iterator</td>
|
||||||
|
<td>Forward Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Bidirectional Traversal Iterator</td>
|
||||||
|
<td>Bidirectional Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Random Access Traversal Iterator</td>
|
||||||
|
<td>Random Access Iterator</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>If <tt class="literal"><span class="pre">transform_iterator</span></tt> models Writable Lvalue Iterator then it is a
|
||||||
|
mutable iterator (as defined in the old iterator requirements).</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-operations">
|
<div class="section" id="transform-iterator-operations">
|
||||||
<h4><a class="toc-backref" href="#id55" name="transform-iterator-operations"><tt class="literal"><span class="pre">transform_iterator</span></tt> operations</a></h4>
|
<h4><a class="toc-backref" href="#id55" name="transform-iterator-operations"><tt class="literal"><span class="pre">transform_iterator</span></tt> operations</a></h4>
|
||||||
@ -2293,7 +2331,7 @@ LocalWords: OtherIncrementable Coplien -->
|
|||||||
<hr class="footer"/>
|
<hr class="footer"/>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="facade-and-adaptor.rst">View document source</a>.
|
<a class="reference" href="facade-and-adaptor.rst">View document source</a>.
|
||||||
Generated on: 2004-01-12 19:23 UTC.
|
Generated on: 2004-01-12 20:17 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.
|
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>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -64,6 +64,12 @@ template <class UnaryFunction,
|
|||||||
class transform_iterator
|
class transform_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef /* see below */ value_type;
|
||||||
|
typedef /* see below */ reference;
|
||||||
|
typedef /* see below */ pointer;
|
||||||
|
typedef iterator_traits<Iterator>::difference_type difference_type;
|
||||||
|
typedef /* see below */ iterator_category;
|
||||||
|
|
||||||
transform_iterator();
|
transform_iterator();
|
||||||
transform_iterator(Iterator const& x, UnaryFunction f);
|
transform_iterator(Iterator const& x, UnaryFunction f);
|
||||||
|
|
||||||
@ -83,6 +89,12 @@ private:
|
|||||||
UnaryFunction m_f; // exposition only
|
UnaryFunction m_f; // exposition only
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
|
<p>The <tt class="literal"><span class="pre">reference</span></tt> type of <tt class="literal"><span class="pre">transform_iterator</span></tt> is
|
||||||
|
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.
|
||||||
|
The <tt class="literal"><span class="pre">value_type</span></tt> is <tt class="literal"><span class="pre">remove_cv<remove_reference<reference></span> <span class="pre">>::type</span></tt>.
|
||||||
|
The <tt class="literal"><span class="pre">iterator_category</span></tt> member is a type convertible to the tags
|
||||||
|
corresponding to each standard concept modeled by
|
||||||
|
<tt class="literal"><span class="pre">transform_iterator</span></tt>, as described in the models section.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-requirements">
|
<div class="section" id="transform-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" name="transform-iterator-requirements"><tt class="literal"><span class="pre">transform_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3" name="transform-iterator-requirements"><tt class="literal"><span class="pre">transform_iterator</span></tt> requirements</a></h1>
|
||||||
@ -91,7 +103,7 @@ the expression <tt class="literal"><span class="pre">f(*i)</span></tt> must be v
|
|||||||
type <tt class="literal"><span class="pre">UnaryFunction</span></tt>, <tt class="literal"><span class="pre">i</span></tt> is an object of type <tt class="literal"><span class="pre">Iterator</span></tt>, and
|
type <tt class="literal"><span class="pre">UnaryFunction</span></tt>, <tt class="literal"><span class="pre">i</span></tt> is an object of type <tt class="literal"><span class="pre">Iterator</span></tt>, and
|
||||||
where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must be
|
where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must be
|
||||||
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.</p>
|
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.</p>
|
||||||
<p>The type <tt class="literal"><span class="pre">Iterator</span></tt> must at least model Readable Iterator.</p>
|
<p>The argument <tt class="literal"><span class="pre">Iterator</span></tt> shall model Readable Iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-models">
|
<div class="section" id="transform-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" name="transform-iterator-models"><tt class="literal"><span class="pre">transform_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4" name="transform-iterator-models"><tt class="literal"><span class="pre">transform_iterator</span></tt> models</a></h1>
|
||||||
@ -99,17 +111,43 @@ where the type of <tt class="literal"><span class="pre">f(*i)</span></tt> must b
|
|||||||
following options that is also modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
following options that is also modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li>Writable Lvalue Iterator if <tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt> is a non-const reference.</li>
|
<li>Writable Lvalue Iterator if <tt class="literal"><span class="pre">transform_iterator::reference</span></tt> is a non-const reference.</li>
|
||||||
<li>Readable Lvalue Iterator if <tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt> is a const
|
<li>Readable Lvalue Iterator if <tt class="literal"><span class="pre">transform_iterator::reference</span></tt> is a const reference.</li>
|
||||||
reference.</li>
|
|
||||||
<li>Readable Iterator otherwise.</li>
|
<li>Readable Iterator otherwise.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>The <tt class="literal"><span class="pre">transform_iterator</span></tt> models the most refined standard traversal
|
<p>The <tt class="literal"><span class="pre">transform_iterator</span></tt> models the most refined standard traversal
|
||||||
concept that is modeled by <tt class="literal"><span class="pre">Iterator</span></tt>.</p>
|
concept that is modeled by the <tt class="literal"><span class="pre">Iterator</span></tt> argument.</p>
|
||||||
<p>The <tt class="literal"><span class="pre">reference</span></tt> type of <tt class="literal"><span class="pre">transform_iterator</span></tt> is
|
<p>If <tt class="literal"><span class="pre">transform_iterator</span></tt> is a model of Readable Lvalue Iterator then
|
||||||
<tt class="literal"><span class="pre">result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type</span></tt>.
|
it models the following original iterator concepts depending on what
|
||||||
The <tt class="literal"><span class="pre">value_type</span></tt> is <tt class="literal"><span class="pre">remove_cv<remove_reference<reference></span> <span class="pre">>::type</span></tt>.</p>
|
the <tt class="literal"><span class="pre">Iterator</span></tt> argument models.</p>
|
||||||
|
<table class="table" frame="border" rules="all">
|
||||||
|
<colgroup>
|
||||||
|
<col width="51%" />
|
||||||
|
<col width="49%" />
|
||||||
|
</colgroup>
|
||||||
|
<thead valign="bottom">
|
||||||
|
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
||||||
|
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody valign="top">
|
||||||
|
<tr><td>Single Pass Iterator</td>
|
||||||
|
<td>Input Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Forward Traversal Iterator</td>
|
||||||
|
<td>Forward Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Bidirectional Traversal Iterator</td>
|
||||||
|
<td>Bidirectional Iterator</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>Random Access Traversal Iterator</td>
|
||||||
|
<td>Random Access Iterator</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>If <tt class="literal"><span class="pre">transform_iterator</span></tt> models Writable Lvalue Iterator then it is a
|
||||||
|
mutable iterator (as defined in the old iterator requirements).</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="transform-iterator-operations">
|
<div class="section" id="transform-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" name="transform-iterator-operations"><tt class="literal"><span class="pre">transform_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5" name="transform-iterator-operations"><tt class="literal"><span class="pre">transform_iterator</span></tt> operations</a></h1>
|
||||||
@ -271,7 +309,7 @@ adding 4 to each element in the array:
|
|||||||
<hr class="footer"/>
|
<hr class="footer"/>
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="transform_iterator.rst">View document source</a>.
|
<a class="reference" href="transform_iterator.rst">View document source</a>.
|
||||||
Generated on: 2004-01-12 18:35 UTC.
|
Generated on: 2004-01-12 20:17 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.
|
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>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
class transform_iterator
|
class transform_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef /* see below */ value_type;
|
||||||
|
typedef /* see below */ reference;
|
||||||
|
typedef /* see below */ pointer;
|
||||||
|
typedef iterator_traits<Iterator>::difference_type difference_type;
|
||||||
|
typedef /* see below */ iterator_category;
|
||||||
|
|
||||||
transform_iterator();
|
transform_iterator();
|
||||||
transform_iterator(Iterator const& x, UnaryFunction f);
|
transform_iterator(Iterator const& x, UnaryFunction f);
|
||||||
|
|
||||||
@ -29,6 +35,14 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
The ``reference`` type of ``transform_iterator`` is
|
||||||
|
``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.
|
||||||
|
The ``value_type`` is ``remove_cv<remove_reference<reference> >::type``.
|
||||||
|
The ``iterator_category`` member is a type convertible to the tags
|
||||||
|
corresponding to each standard concept modeled by
|
||||||
|
``transform_iterator``, as described in the models section.
|
||||||
|
|
||||||
|
|
||||||
``transform_iterator`` requirements
|
``transform_iterator`` requirements
|
||||||
...................................
|
...................................
|
||||||
|
|
||||||
@ -38,7 +52,7 @@ type ``UnaryFunction``, ``i`` is an object of type ``Iterator``, and
|
|||||||
where the type of ``f(*i)`` must be
|
where the type of ``f(*i)`` must be
|
||||||
``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.
|
``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.
|
||||||
|
|
||||||
The type ``Iterator`` must at least model Readable Iterator.
|
The argument ``Iterator`` shall model Readable Iterator.
|
||||||
|
|
||||||
|
|
||||||
``transform_iterator`` models
|
``transform_iterator`` models
|
||||||
@ -47,20 +61,33 @@ The type ``Iterator`` must at least model Readable Iterator.
|
|||||||
The resulting ``transform_iterator`` models the most refined of the
|
The resulting ``transform_iterator`` models the most refined of the
|
||||||
following options that is also modeled by ``Iterator``.
|
following options that is also modeled by ``Iterator``.
|
||||||
|
|
||||||
* Writable Lvalue Iterator if ``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type`` is a non-const reference.
|
* Writable Lvalue Iterator if ``transform_iterator::reference`` is a non-const reference.
|
||||||
|
|
||||||
* Readable Lvalue Iterator if ``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type`` is a const
|
* Readable Lvalue Iterator if ``transform_iterator::reference`` is a const reference.
|
||||||
reference.
|
|
||||||
|
|
||||||
* Readable Iterator otherwise.
|
* Readable Iterator otherwise.
|
||||||
|
|
||||||
|
|
||||||
The ``transform_iterator`` models the most refined standard traversal
|
The ``transform_iterator`` models the most refined standard traversal
|
||||||
concept that is modeled by ``Iterator``.
|
concept that is modeled by the ``Iterator`` argument.
|
||||||
|
|
||||||
The ``reference`` type of ``transform_iterator`` is
|
If ``transform_iterator`` is a model of Readable Lvalue Iterator then
|
||||||
``result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type``.
|
it models the following original iterator concepts depending on what
|
||||||
The ``value_type`` is ``remove_cv<remove_reference<reference> >::type``.
|
the ``Iterator`` argument models.
|
||||||
|
|
||||||
|
+-----------------------------------+---------------------------------+
|
||||||
|
| If ``Iterator`` models | then ``filter_iterator`` models |
|
||||||
|
+===================================+=================================+
|
||||||
|
| Single Pass Iterator | Input Iterator |
|
||||||
|
+-----------------------------------+---------------------------------+
|
||||||
|
| Forward Traversal Iterator | Forward Iterator |
|
||||||
|
+-----------------------------------+---------------------------------+
|
||||||
|
| Bidirectional Traversal Iterator | Bidirectional Iterator |
|
||||||
|
+-----------------------------------+---------------------------------+
|
||||||
|
| Random Access Traversal Iterator | Random Access Iterator |
|
||||||
|
+-----------------------------------+---------------------------------+
|
||||||
|
|
||||||
|
If ``transform_iterator`` models Writable Lvalue Iterator then it is a
|
||||||
|
mutable iterator (as defined in the old iterator requirements).
|
||||||
|
|
||||||
|
|
||||||
``transform_iterator`` operations
|
``transform_iterator`` operations
|
||||||
|
Reference in New Issue
Block a user