[SVN r36908]
This commit is contained in:
Joel de Guzman
2007-02-07 22:59:25 +00:00
parent a0a0613e36
commit 693200182f
214 changed files with 3795 additions and 3806 deletions

View File

@ -3,7 +3,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Algorithms</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.68.1">
<meta name="generator" content="DocBook XSL Stylesheets V1.66.1">
<link rel="start" href="../index.html" title="Chapter<65>1.<2E>Fusion 2.0">
<link rel="up" href="../index.html" title="Chapter<65>1.<2E>Fusion 2.0">
<link rel="prev" href="sequences/operators/comparison/greater_than_equal.html" title="greater
@ -47,7 +47,7 @@
</dl></dd>
</dl></div>
<a name="fusion.algorithms.lazy_evaluation"></a><h3>
<a name="id1080122"></a>
<a name="id552698"></a>
<a href="algorithms.html#fusion.algorithms.lazy_evaluation">Lazy Evaluation</a>
</h3>
<p>
@ -61,39 +61,39 @@
fusion algorithms are functional in nature such that algorithms are non mutating
(no side effects). However, due to the high cost of returning full sequences
such as vectors and lists, <span class="emphasis"><em>Views</em></span> are returned from Fusion
algorithms instead. For example, the <a href="algorithms/transformation/functions/transform.html" title="transform"><code class="computeroutput"><span class="identifier">transform</span></code></a> algorithm does not actually
return a transformed version of the original sequence. <a href="algorithms/transformation/functions/transform.html" title="transform"><code class="computeroutput"><span class="identifier">transform</span></code></a> returns a <a href="sequences/views/transform_view.html" title="transform_view"><code class="computeroutput"><span class="identifier">transform_view</span></code></a>. This view holds a
algorithms instead. For example, the <a href="algorithms/transformation/functions/transform.html" title="transform"><tt class="computeroutput"><span class="identifier">transform</span></tt></a> algorithm does not actually
return a transformed version of the original sequence. <a href="algorithms/transformation/functions/transform.html" title="transform"><tt class="computeroutput"><span class="identifier">transform</span></tt></a> returns a <a href="sequences/views/transform_view.html" title="transform_view"><tt class="computeroutput"><span class="identifier">transform_view</span></tt></a>. This view holds a
reference to the original sequence plus the transform function. Iteration over
the <a href="sequences/views/transform_view.html" title="transform_view"><code class="computeroutput"><span class="identifier">transform_view</span></code></a>
the <a href="sequences/views/transform_view.html" title="transform_view"><tt class="computeroutput"><span class="identifier">transform_view</span></tt></a>
will apply the transform function over the sequence elements on demand. This
<span class="emphasis"><em>lazy</em></span> evaluation scheme allows us to chain as many algorithms
as we want without incurring a high runtime penalty.
</p>
<a name="fusion.algorithms.sequence_extension"></a><h3>
<a name="id1080250"></a>
<a name="id552838"></a>
<a href="algorithms.html#fusion.algorithms.sequence_extension">Sequence Extension</a>
</h3>
<p>
The <span class="emphasis"><em>lazy</em></span> evaluation scheme where <a href="algorithms.html" title="Algorithms">Algorithms</a>
return <a href="sequences/views.html" title="Views">Views</a> also allows operations
such as <a href="algorithms/transformation/functions/push_back.html" title="push_back"><code class="computeroutput"><span class="identifier">push_back</span></code></a> to be totally generic. In
Fusion, <a href="algorithms/transformation/functions/push_back.html" title="push_back"><code class="computeroutput"><span class="identifier">push_back</span></code></a> is actually a generic algorithm
that works on all sequences. Given an input sequence <code class="computeroutput"><span class="identifier">s</span></code>
and a value <code class="computeroutput"><span class="identifier">x</span></code>, Fusion's <a href="algorithms/transformation/functions/push_back.html" title="push_back"><code class="computeroutput"><span class="identifier">push_back</span></code></a> algorithm simply returns
a <a href="sequences/views/joint_view.html" title="joint_view"><code class="computeroutput"><span class="identifier">joint_view</span></code></a>:
a view that holds a reference to the original sequence <code class="computeroutput"><span class="identifier">s</span></code>
and the value <code class="computeroutput"><span class="identifier">x</span></code>. Functions
such as <a href="algorithms/transformation/functions/push_back.html" title="push_back"><tt class="computeroutput"><span class="identifier">push_back</span></tt></a> to be totally generic. In
Fusion, <a href="algorithms/transformation/functions/push_back.html" title="push_back"><tt class="computeroutput"><span class="identifier">push_back</span></tt></a> is actually a generic algorithm
that works on all sequences. Given an input sequence <tt class="computeroutput"><span class="identifier">s</span></tt>
and a value <tt class="computeroutput"><span class="identifier">x</span></tt>, Fusion's <a href="algorithms/transformation/functions/push_back.html" title="push_back"><tt class="computeroutput"><span class="identifier">push_back</span></tt></a> algorithm simply returns
a <a href="sequences/views/joint_view.html" title="joint_view"><tt class="computeroutput"><span class="identifier">joint_view</span></tt></a>:
a view that holds a reference to the original sequence <tt class="computeroutput"><span class="identifier">s</span></tt>
and the value <tt class="computeroutput"><span class="identifier">x</span></tt>. Functions
that were once sequence specific and need to be implemented N times over N
different sequences are now implemented only once. That is to say that Fusion
sequences are cheaply extensible. However, an important caveat is that the
result of a sequence extending operation like <a href="algorithms/transformation/functions/push_back.html" title="push_back"><code class="computeroutput"><span class="identifier">push_back</span></code></a> does not retain the properties
result of a sequence extending operation like <a href="algorithms/transformation/functions/push_back.html" title="push_back"><tt class="computeroutput"><span class="identifier">push_back</span></tt></a> does not retain the properties
of the original sequence such as associativity of <span class="underline">_set</span>_s.
To regain the original sequence, <a href="sequences/conversion/functions.html" title="Functions">Conversion</a>
functions are provided. You may use one of the <a href="sequences/conversion/functions.html" title="Functions">Conversion</a>
functions to convert back to the original sequence type.
</p>
<a name="fusion.algorithms.header"></a><h3>
<a name="id1080438"></a>
<a name="id553049"></a>
<a href="algorithms.html#fusion.algorithms.header">Header</a>
</h3>
<pre class="programlisting">