123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?xml version="1.0" encoding="utf-8" ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <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.5: http://docutils.sourceforge.net/" />
- <title>Iterator Archetype</title>
- <meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
- <meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
- <meta name="date" content="2006-09-11" />
- <meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
- <link rel="stylesheet" href="../../../rst.css" type="text/css" />
- </head>
- <body>
- <div class="document" id="iterator-archetype">
- <h1 class="title">Iterator Archetype</h1>
- <table class="docinfo" frame="void" rules="none">
- <col class="docinfo-name" />
- <col class="docinfo-content" />
- <tbody valign="top">
- <tr><th class="docinfo-name">Author:</th>
- <td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
- <tr><th class="docinfo-name">Contact:</th>
- <td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
- <tr><th class="docinfo-name">Organization:</th>
- <td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
- Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
- <tr><th class="docinfo-name">Date:</th>
- <td>2006-09-11</td></tr>
- <tr><th class="docinfo-name">Copyright:</th>
- <td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
- </tbody>
- </table>
- <!-- 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) -->
- <table class="docutils field-list" frame="void" rules="none">
- <col class="field-name" />
- <col class="field-body" />
- <tbody valign="top">
- <tr class="field"><th class="field-name">abstract:</th><td class="field-body">The <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> class constructs a minimal implementation of
- one of the iterator access concepts and one of the iterator traversal concepts.
- This is used for doing a compile-time check to see if a the type requirements
- of a template are really enough to cover the implementation of the template.
- For further information see the documentation for the <a class="reference external" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</td>
- </tr>
- </tbody>
- </table>
- <div class="contents topic" id="table-of-contents">
- <p class="topic-title first">Table of Contents</p>
- <ul class="simple">
- <li><a class="reference internal" href="#reference" id="id1">Reference</a><ul>
- <li><a class="reference internal" href="#iterator-archetype-synopsis" id="id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></li>
- <li><a class="reference internal" href="#access-category-tags" id="id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></li>
- <li><a class="reference internal" href="#iterator-archetype-requirements" id="id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></li>
- <li><a class="reference internal" href="#iterator-archetype-models" id="id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></li>
- <li><a class="reference internal" href="#traits" id="id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></li>
- </ul>
- </li>
- </ul>
- </div>
- <div class="section" id="reference">
- <h1><a class="toc-backref" href="#id1">Reference</a></h1>
- <div class="section" id="iterator-archetype-synopsis">
- <h2><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></h2>
- <pre class="literal-block">
- namespace iterator_archetypes
- {
- // Access categories
- typedef /*implementation defined*/ readable_iterator_t;
- typedef /*implementation defined*/ writable_iterator_t;
- typedef /*implementation defined*/ readable_writable_iterator_t;
- typedef /*implementation defined*/ readable_lvalue_iterator_t;
- typedef /*implementation defined*/ writable_lvalue_iterator_t;
- }
- template <
- class Value
- , class AccessCategory
- , class TraversalCategory
- >
- class iterator_archetype
- {
- typedef /* see below */ value_type;
- typedef /* see below */ reference;
- typedef /* see below */ pointer;
- typedef /* see below */ difference_type;
- typedef /* see below */ iterator_category;
- };
- </pre>
- </div>
- <div class="section" id="access-category-tags">
- <h2><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></h2>
- <p>The access category types provided correspond to the following
- standard iterator access concept combinations:</p>
- <pre class="literal-block">
- readable_iterator_t :=
- Readable Iterator
- writable_iterator_t :=
- Writeable Iterator
- readable_writable_iterator_t :=
- Readable Iterator & Writeable Iterator & Swappable Iterator
- readable_lvalue_iterator_t :=
- Readable Iterator & Lvalue Iterator
- writeable_lvalue_iterator_t :=
- Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
- </pre>
- </div>
- <div class="section" id="iterator-archetype-requirements">
- <h2><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></h2>
- <p>The <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> argument must be one of the predefined access
- category tags. The <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> must be one of the standard
- traversal tags. The <tt class="docutils literal"><span class="pre">Value</span></tt> type must satisfy the requirements of
- the iterator concept specified by <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and
- <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> as implied by the nested traits types.</p>
- </div>
- <div class="section" id="iterator-archetype-models">
- <h2><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></h2>
- <p><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> models the iterator concepts specified by the
- <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt>
- arguments. <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> does not model any other access
- concepts or any more derived traversal concepts.</p>
- </div>
- <div class="section" id="traits">
- <h2><a class="toc-backref" href="#id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></h2>
- <p>The nested trait types are defined as follows:</p>
- <pre class="literal-block">
- if (AccessCategory == readable_iterator_t)
- value_type = Value
- reference = Value
- pointer = Value*
- else if (AccessCategory == writable_iterator_t)
- value_type = void
- reference = void
- pointer = void
- else if (AccessCategory == readable_writable_iterator_t)
- value_type = Value
- reference :=
- A type X that is convertible to Value for which the following
- expression is valid. Given an object x of type X and v of type
- Value.
- x = v
- pointer = Value*
- else if (AccessCategory == readable_lvalue_iterator_t)
- value_type = Value
- reference = Value const&
- pointer = Value const*
- else if (AccessCategory == writable_lvalue_iterator_t)
- value_type = Value
- reference = Value&
- pointer = Value*
- if ( TraversalCategory is convertible to forward_traversal_tag )
- difference_type := ptrdiff_t
- else
- difference_type := unspecified type
- iterator_category :=
- A type X satisfying the following two constraints:
- 1. X is convertible to X1, and not to any more-derived
- type, where X1 is defined by:
- if (reference is a reference type
- && TraversalCategory is convertible to forward_traversal_tag)
- {
- if (TraversalCategory is convertible to random_access_traversal_tag)
- X1 = random_access_iterator_tag
- else if (TraversalCategory is convertible to bidirectional_traversal_tag)
- X1 = bidirectional_iterator_tag
- else
- X1 = forward_iterator_tag
- }
- else
- {
- if (TraversalCategory is convertible to single_pass_traversal_tag
- && reference != void)
- X1 = input_iterator_tag
- else
- X1 = output_iterator_tag
- }
- 2. X is convertible to TraversalCategory
- </pre>
- </div>
- </div>
- </div>
- <div class="footer">
- <hr class="footer" />
- <a class="reference external" href="iterator_archetypes.rst">View document source</a>.
- Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
- </div>
- </body>
- </html>
|