Fusion: added nview and friends, docs and tests

[SVN r56377]
This commit is contained in:
Hartmut Kaiser
2009-09-25 00:21:53 +00:00
parent 43645b3764
commit 10c0665ffa
258 changed files with 16390 additions and 13592 deletions

View File

@ -3,10 +3,10 @@
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sequence Facade</title>
<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.65.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.0">
<link rel="home" href="../../index.html" title="Chapter<65>1.<2E>Fusion 2.0">
<link rel="up" href="../extension.html" title="Extension">
<link rel="previous" href="ext_full.html" title=" The Full Extension Mechanism">
<link rel="prev" href="ext_full.html" title="The Full Extension Mechanism">
<link rel="next" href="iterator_facade.html" title="Iterator Facade">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@ -22,39 +22,36 @@
<div class="spirit-nav">
<a accesskey="p" href="ext_full.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../extension.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="iterator_facade.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
</div>
<div class="section" lang="en">
<div class="titlepage">
<div><div><h3 class="title">
<a name="fusion.extension.sequence_facade"></a><a href="sequence_facade.html" title="Sequence Facade">Sequence Facade</a>
</h3></div></div>
<div></div>
</div>
<a name="fusion.extension.sequence_facade.description"></a><h4>
<a name="id603722"></a>
<a href="sequence_facade.html#fusion.extension.sequence_facade.description">Description</a>
</h4>
<div class="section" title="Sequence Facade">
<div class="titlepage"><div><div><h3 class="title">
<a name="fusion.extension.sequence_facade"></a><a class="link" href="sequence_facade.html" title="Sequence Facade">Sequence Facade</a>
</h3></div></div></div>
<a name="fusion.extension.sequence_facade.description"></a><h5>
<a name="id753954"></a>
<a class="link" href="sequence_facade.html#fusion.extension.sequence_facade.description">Description</a>
</h5>
<p>
The <a href="sequence_facade.html" title="Sequence Facade"><tt class="computeroutput"><span class="identifier">sequence_facade</span></tt></a>
The <a class="link" href="sequence_facade.html" title="Sequence Facade"><code class="computeroutput"><span class="identifier">sequence_facade</span></code></a>
template provides an intrusive mechanism for producing a conforming Fusion
iterator.
</p>
<a name="fusion.extension.sequence_facade.synopsis"></a><h4>
<a name="id603769"></a>
<a href="sequence_facade.html#fusion.extension.sequence_facade.synopsis">Synopsis</a>
</h4>
<a name="fusion.extension.sequence_facade.synopsis"></a><h5>
<a name="id753980"></a>
<a class="link" href="sequence_facade.html#fusion.extension.sequence_facade.synopsis">Synopsis</a>
</h5>
<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Derived</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">TravesalTag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">IsView</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">&gt;</span>
<span class="keyword">struct</span> <span class="identifier">sequence_facade</span><span class="special">;</span>
</pre>
<a name="fusion.extension.sequence_facade.usage"></a><h4>
<a name="id603902"></a>
<a href="sequence_facade.html#fusion.extension.sequence_facade.usage">Usage</a>
</h4>
<a name="fusion.extension.sequence_facade.usage"></a><h5>
<a name="id754074"></a>
<a class="link" href="sequence_facade.html#fusion.extension.sequence_facade.usage">Usage</a>
</h5>
<p>
The user of <a href="sequence_facade.html" title="Sequence Facade"><tt class="computeroutput"><span class="identifier">sequence_facade</span></tt></a> derives his sequence
type from a specialization of <a href="sequence_facade.html" title="Sequence Facade"><tt class="computeroutput"><span class="identifier">sequence_facade</span></tt></a> and passes the derived
The user of <a class="link" href="sequence_facade.html" title="Sequence Facade"><code class="computeroutput"><span class="identifier">sequence_facade</span></code></a> derives his sequence
type from a specialization of <a class="link" href="sequence_facade.html" title="Sequence Facade"><code class="computeroutput"><span class="identifier">sequence_facade</span></code></a> and passes the derived
sequence type as the first template parameter. The second template parameter
should be the traversal category of the sequence being implemented. The 3rd
parameter should be set to <tt class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></tt>
parameter should be set to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
if the sequence is a view.
</p>
<p>
@ -62,150 +59,202 @@
type.
</p>
<div class="table">
<a name="id603990"></a><p class="title"><b>Table<EFBFBD>1.91.<2E>Parameters</b></p>
<table class="table" summary="Parameters">
<a name="id754125"></a><p class="title"><b>Table<EFBFBD>1.91.<2E>Parameters</b></p>
<div class="table-contents"><table class="table" summary="Parameters">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th><p>
<th>
<p>
Name
</p></th>
<th><p>
</p>
</th>
<th>
<p>
Description
</p></th>
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span></tt>, <tt class="computeroutput"><span class="identifier">Seq</span></tt>
</p></td>
<td><p>
A type derived from <a href="sequence_facade.html" title="Sequence Facade"><tt class="computeroutput"><span class="identifier">sequence_facade</span></tt></a>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span></code>, <code class="computeroutput"><span class="identifier">Seq</span></code>
</p>
</td>
<td>
<p>
A type derived from <a class="link" href="sequence_facade.html" title="Sequence Facade"><code class="computeroutput"><span class="identifier">sequence_facade</span></code></a>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">N</span></tt>
</p></td>
<td><p>
<td>
<p>
<code class="computeroutput"><span class="identifier">N</span></code>
</p>
</td>
<td>
<p>
An <a href="http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL
Integral Constant</a>
</p></td>
</p>
</td>
</tr>
</tbody>
</table>
</table></div>
</div>
<div class="table">
<a name="id604124"></a><p class="title"><b>Table<EFBFBD>1.92.<2E>Key Expressions</b></p>
<table class="table" summary="Key Expressions">
<br class="table-break"><div class="table">
<a name="id754232"></a><p class="title"><b>Table<EFBFBD>1.92.<2E>Key Expressions</b></p>
<div class="table-contents"><table class="table" summary="Key Expressions">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th><p>
<th>
<p>
Expression
</p></th>
<th><p>
</p>
</th>
<th>
<p>
Result
</p></th>
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></tt>
</p></td>
<td><p>
The type of an iterator to the beginning of a sequence of type <tt class="computeroutput"><span class="identifier">Seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
</p>
</td>
<td>
<p>
The type of an iterator to the beginning of a sequence of type <code class="computeroutput"><span class="identifier">Seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></tt>
</p></td>
<td><p>
An iterator to the beginning of sequence <tt class="computeroutput"><span class="identifier">seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">begin</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
An iterator to the beginning of sequence <code class="computeroutput"><span class="identifier">seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></tt>
</p></td>
<td><p>
The type of an iterator to the end of a sequence of type <tt class="computeroutput"><span class="identifier">Seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
</p>
</td>
<td>
<p>
The type of an iterator to the end of a sequence of type <code class="computeroutput"><span class="identifier">Seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></tt>
</p></td>
<td><p>
An iterator to the end of sequence <tt class="computeroutput"><span class="identifier">seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">end</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
An iterator to the end of sequence <code class="computeroutput"><span class="identifier">seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">size</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></tt>
</p></td>
<td><p>
The size of a sequence of type <tt class="computeroutput"><span class="identifier">Seq</span></tt>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">size</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
</p>
</td>
<td>
<p>
The size of a sequence of type <code class="computeroutput"><span class="identifier">Seq</span></code>
as an <a href="http://www.boost.org/libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL
Integral Constant</a>
</p></td>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">size</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></tt>
</p></td>
<td><p>
The size of sequence <tt class="computeroutput"><span class="identifier">seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">size</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
The size of sequence <code class="computeroutput"><span class="identifier">seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">at</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></tt>
</p></td>
<td><p>
The type of element <tt class="computeroutput"><span class="identifier">N</span></tt>
in a sequence of type <tt class="computeroutput"><span class="identifier">Seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">at</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
</p>
</td>
<td>
<p>
The type of element <code class="computeroutput"><span class="identifier">N</span></code>
in a sequence of type <code class="computeroutput"><span class="identifier">Seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">at</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></tt>
</p></td>
<td><p>
Element <tt class="computeroutput"><span class="identifier">N</span></tt> in sequence
<tt class="computeroutput"><span class="identifier">seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">at</span><span class="special">&lt;</span><span class="identifier">Seq</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">seq</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
Element <code class="computeroutput"><span class="identifier">N</span></code> in sequence
<code class="computeroutput"><span class="identifier">seq</span></code>
</p>
</td>
</tr>
<tr>
<td><p>
<tt class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">value_at</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></tt>
</p></td>
<td><p>
The type of the <tt class="computeroutput"><span class="identifier">N</span></tt>th
element in a sequence of type <tt class="computeroutput"><span class="identifier">Seq</span></tt>
</p></td>
<td>
<p>
<code class="computeroutput"><span class="identifier">sequence</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">value_at</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">N</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
</p>
</td>
<td>
<p>
The type of the <code class="computeroutput"><span class="identifier">N</span></code>th
element in a sequence of type <code class="computeroutput"><span class="identifier">Seq</span></code>
</p>
</td>
</tr>
</tbody>
</table>
</table></div>
</div>
<a name="fusion.extension.sequence_facade.include"></a><h4>
<a name="id605003"></a>
<a href="sequence_facade.html#fusion.extension.sequence_facade.include">Include</a>
</h4>
<br class="table-break"><a name="fusion.extension.sequence_facade.include"></a><h5>
<a name="id754887"></a>
<a class="link" href="sequence_facade.html#fusion.extension.sequence_facade.include">Include</a>
</h5>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">/</span><span class="identifier">sequence_facade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">sequence_facade</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<a name="fusion.extension.sequence_facade.example"></a><h4>
<a name="id605158"></a>
<a href="sequence_facade.html#fusion.extension.sequence_facade.example">Example</a>
</h4>
<a name="fusion.extension.sequence_facade.example"></a><h5>
<a name="id754995"></a>
<a class="link" href="sequence_facade.html#fusion.extension.sequence_facade.example">Example</a>
</h5>
<p>
A full working example using <a href="sequence_facade.html" title="Sequence Facade"><tt class="computeroutput"><span class="identifier">sequence_facade</span></tt></a> is provided in triple.cpp
A full working example using <a class="link" href="sequence_facade.html" title="Sequence Facade"><code class="computeroutput"><span class="identifier">sequence_facade</span></code></a> is provided in triple.cpp
in the extension examples.
</p>
</div>