|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r70288 - in sandbox/local/libs/local/doc: html html/boost/local html/boost_local qbk
From: lorcaminiti_at_[hidden]
Date: 2011-03-20 22:29:54
Author: lcaminiti
Date: 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
New Revision: 70288
URL: http://svn.boost.org/trac/boost/changeset/70288
Log:
Competed all docs.
Text files modified:
sandbox/local/libs/local/doc/html/BOOST_IDENTITY_TYPE.html | 2
sandbox/local/libs/local/doc/html/BOOST_IDENTITY_VALUE.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_END.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_TPL.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_COMPLIANT.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_THIS_PARAM_NAME.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_END.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_TPL.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_NAME.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS_TPL.html | 2
sandbox/local/libs/local/doc/html/BOOST_LOCAL_TYPEOF.html | 2
sandbox/local/libs/local/doc/html/boost/local/function.html | 2
sandbox/local/libs/local/doc/html/boost_local/Advanced_Topics.html | 24 +++---
sandbox/local/libs/local/doc/html/boost_local/Alternatives.html | 133 ++++++++++++++++++++++++++++++++++++--
sandbox/local/libs/local/doc/html/boost_local/Getting_Started.html | 69 ++-----------------
sandbox/local/libs/local/doc/html/boost_local/Implementation.html | 138 ++++++++++++++++++++++++++++++++++++---
sandbox/local/libs/local/doc/html/boost_local/Tutorial.html | 50 +++++++-------
sandbox/local/libs/local/doc/html/index.html | 2
sandbox/local/libs/local/doc/qbk/alternatives.qbk | 100 ++++++++++++++++++++++++++--
sandbox/local/libs/local/doc/qbk/getting_started.qbk | 24 +-----
sandbox/local/libs/local/doc/qbk/implementation.qbk | 17 ++--
sandbox/local/libs/local/doc/qbk/local.qbk | 1
26 files changed, 422 insertions(+), 168 deletions(-)
Modified: sandbox/local/libs/local/doc/html/BOOST_IDENTITY_TYPE.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_IDENTITY_TYPE.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_IDENTITY_TYPE.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_IDENTITY_TYPE(parenthesized_type)</pre></div>
<div class="refsect1">
-<a name="id913384"></a><h2>Description</h2>
+<a name="id913202"></a><h2>Description</h2>
<p>This macro expands to an expression that can be passed as a single macro parameter even if it contains commas and that evaluates to the specified type at compile-time (see the <a class="link" href="boost_local/Advanced_Topics.html" title="Advanced Topics"> Advanced Topics</a> section).</p>
<p>For example <code class="computeroutput">BOOST_IDENTITY_TYPE((std::map<int, double>))</code> can be passed as a single macro parameter when instead <code class="computeroutput">std::map<int, double></code> cannot (because it contains a comma not wrapped by round parenthesis so it will be interpreted as two separate macro parameters by the preprocessor).</p>
<p><span class="bold"><strong>Parameters:</strong></span> </p>
Modified: sandbox/local/libs/local/doc/html/BOOST_IDENTITY_VALUE.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_IDENTITY_VALUE.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_IDENTITY_VALUE.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_IDENTITY_VALUE(parenthesized_value)</pre></div>
<div class="refsect1">
-<a name="id913525"></a><h2>Description</h2>
+<a name="id913343"></a><h2>Description</h2>
<p>This macro expands to an expression that can be passed as a single macro parameter even if it contains commas and that evaluates to the specified value at run-time (see the {Advanced_Topics, Advanced Topics} section).</p>
<p>For example <code class="computeroutput">BOOST_IDENTITY_VALUE((key_sizeof<int, double>::value))</code> can be passed as a single macro parameter when instead <code class="computeroutput">key_sizeof<int, double>::value</code> cannot (because it contains a comma not wrapped by round parenthesis so it will be interpreted as two separate macro parameters by the preprocessor).</p>
<p><span class="bold"><strong>Parameters:</strong></span> </p>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_BLOCK(bindings)</pre></div>
<div class="refsect1">
-<a name="id908417"></a><h2>Description</h2>
+<a name="id908227"></a><h2>Description</h2>
<p>This macro must be used within a declarative context, it must be followed by the local block body code and then by the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_BLOCK_END.html" title="Macro BOOST_LOCAL_BLOCK_END">BOOST_LOCAL_BLOCK_END</a></code> macro (see the Tutorial section): </p>
<pre class="programlisting"> <span class="special">{</span> <span class="comment">// Some declarative context.</span>
<span class="special">...</span>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_END.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_END.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_END.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_BLOCK_END</pre></div>
<div class="refsect1">
-<a name="id909138"></a><h2>Description</h2>
+<a name="id908949"></a><h2>Description</h2>
<p>This macro must follow the local block body code <code class="computeroutput">{ ... }</code> as shown in the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_BLOCK.html" title="Macro BOOST_LOCAL_BLOCK">BOOST_LOCAL_BLOCK</a></code> documentation.</p>
<p><span class="bold"><strong>See:</strong></span> <code class="computeroutput"><a class="link" href="BOOST_LOCAL_BLOCK.html" title="Macro BOOST_LOCAL_BLOCK">BOOST_LOCAL_BLOCK</a></code>, <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section. </p>
</div>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_TPL.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_TPL.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_BLOCK_TPL.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_BLOCK_TPL(bindings)</pre></div>
<div class="refsect1">
-<a name="id909064"></a><h2>Description</h2>
+<a name="id908875"></a><h2>Description</h2>
<p><span class="bold"><strong>See:</strong></span> <code class="computeroutput"><a class="link" href="BOOST_LOCAL_BLOCK.html" title="Macro BOOST_LOCAL_BLOCK">BOOST_LOCAL_BLOCK</a></code>, <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section. </p>
</div>
</div>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_COMPLIANT.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_COMPLIANT.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_COMPLIANT.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_CONFIG_COMPLIANT</pre></div>
<div class="refsect1">
-<a name="id909289"></a><h2>Description</h2>
+<a name="id909100"></a><h2>Description</h2>
<p>If programmers leave this configuration macro undefined, its default value is to be left not defined.</p>
<p>If this macro is defined, variadic macros and empty macro parameters are not used by this library. Using variadic macros and empty macro parameters allows this library to provide the <span class="emphasis"><em>variadic macro</em></span> and <span class="emphasis"><em>empty macro</em></span> syntaxes which some programmers might find more readable than the <span class="emphasis"><em>sequencing macro</em></span> syntax (see <code class="computeroutput"><a class="link" href="BOOST_LOCAL_FUNCTION_PARAMS.html" title="Macro BOOST_LOCAL_FUNCTION_PARAMS">BOOST_LOCAL_FUNCTION_PARAMS</a></code>, <code class="computeroutput"><a class="link" href="BOOST_LOCAL_BLOCK.html" title="Macro BOOST_LOCAL_BLOCK">BOOST_LOCAL_BLOCK</a></code>, and <code class="computeroutput"><a class="link" href="BOOST_LOCAL_EXIT.html" title="Macro BOOST_LOCAL_EXIT">BOOST_LOCAL_EXIT</a></code>). If this configuration macro is defined then only the sequencing macro syntax is allowed (regardless of whether the compiler supports variadic and e
mpty macros or not).</p>
<p><span class="bold"><strong>Warning:</strong></span> The variadic and empty macro syntaxes are not supported by all C++ compilers so they should be used with care to avoid portability issues (and this configuration macro can be defined to disable them).</p>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX</pre></div>
<div class="refsect1">
-<a name="id909465"></a><h2>Description</h2>
+<a name="id909276"></a><h2>Description</h2>
<p>If programmers leave this configuration macro undefined, its default value is <code class="computeroutput">5</code>.</p>
<p>This only refers to the number of local function parameters and not to the number of bound variables in scope (the limit on the number of bound variables is instead the maximum size allowed for a Boost.Preprocessor sequences).</p>
<p><span class="bold"><strong>Warning:</strong></span> Increasing this number will increase compilation time.</p>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_THIS_PARAM_NAME.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_THIS_PARAM_NAME.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_CONFIG_THIS_PARAM_NAME.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_CONFIG_THIS_PARAM_NAME</pre></div>
<div class="refsect1">
-<a name="id909560"></a><h2>Description</h2>
+<a name="id909371"></a><h2>Description</h2>
<p>If programmers leave this configuration macro undefined, the default symbol used is <code class="computeroutput">this_</code>.</p>
<p><span class="bold"><strong>Warning:</strong></span> Programmers should not #define this macro unless it is absolutely necessary (e.g., to avoid name clashes with another library which cannot be changed). Changing the symbol <code class="computeroutput">this_</code> effectively changes the public API of this library.</p>
<p><span class="bold"><strong>See:</strong></span> <a class="link" href="boost_local/Getting_Started.html" title="Getting Started"> Getting Started</a> section. </p>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_EXIT(binding_list)</pre></div>
<div class="refsect1">
-<a name="id909701"></a><h2>Description</h2>
+<a name="id909512"></a><h2>Description</h2>
<p>This macro must be used within a declarative context, it must be followed by the local exit body code and then by the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_EXIT_END.html" title="Macro BOOST_LOCAL_EXIT_END">BOOST_LOCAL_EXIT_END</a></code> macro (see the <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section): </p>
<pre class="programlisting"> <span class="special">{</span> <span class="comment">// Some declarative context.</span>
<span class="special">...</span>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_END.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_END.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_END.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_EXIT_END</pre></div>
<div class="refsect1">
-<a name="id910432"></a><h2>Description</h2>
+<a name="id910250"></a><h2>Description</h2>
<p>This macro must follow the local exit body code <code class="computeroutput">{ ... }</code> as shown in the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_EXIT.html" title="Macro BOOST_LOCAL_EXIT">BOOST_LOCAL_EXIT</a></code> documentation.</p>
<p><span class="bold"><strong>See:</strong></span> <code class="computeroutput"><a class="link" href="BOOST_LOCAL_EXIT.html" title="Macro BOOST_LOCAL_EXIT">BOOST_LOCAL_EXIT</a></code>, <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section. </p>
</div>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_TPL.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_TPL.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_EXIT_TPL.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_EXIT_TPL(binding_list)</pre></div>
<div class="refsect1">
-<a name="id910358"></a><h2>Description</h2>
+<a name="id910176"></a><h2>Description</h2>
<p><span class="bold"><strong>See:</strong></span> <code class="computeroutput"><a class="link" href="BOOST_LOCAL_EXIT.html" title="Macro BOOST_LOCAL_EXIT">BOOST_LOCAL_EXIT</a></code>, <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section. </p>
</div>
</div>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_NAME.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_NAME.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_NAME.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_FUNCTION_NAME(name)</pre></div>
<div class="refsect1">
-<a name="id912863"></a><h2>Description</h2>
+<a name="id912681"></a><h2>Description</h2>
<p>This macro must follow the local function body code block <code class="computeroutput">{ ... }</code> as shown in the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_FUNCTION_PARAMS.html" title="Macro BOOST_LOCAL_FUNCTION_PARAMS">BOOST_LOCAL_FUNCTION_PARAMS</a></code> documentation.</p>
<p><span class="bold"><strong>Parameters:</strong></span> </p>
<div class="informaltable"><table class="table">
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_FUNCTION_PARAMS(parameters)</pre></div>
<div class="refsect1">
-<a name="id911905"></a><h2>Description</h2>
+<a name="id911723"></a><h2>Description</h2>
<p>This macro must be used within a declarative context, it must follow the local function result type, it must be followed by the local function body code and then by the <code class="computeroutput"><a class="link" href="BOOST_LOCAL_FUNCTION_NAME.html" title="Macro BOOST_LOCAL_FUNCTION_NAME">BOOST_LOCAL_FUNCTION_NAME</a></code> macro (see the <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> and <a class="link" href="boost_local/Advanced_Topics.html" title="Advanced Topics"> Advanced Topics</a> sections): </p>
<pre class="programlisting"> <span class="special">{</span> <span class="comment">// Some declarative context.</span>
<span class="special">...</span>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS_TPL.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS_TPL.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_FUNCTION_PARAMS_TPL.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_FUNCTION_PARAMS_TPL(parameters)</pre></div>
<div class="refsect1">
-<a name="id912789"></a><h2>Description</h2>
+<a name="id912606"></a><h2>Description</h2>
<p><span class="bold"><strong>See:</strong></span> <code class="computeroutput"><a class="link" href="BOOST_LOCAL_FUNCTION_PARAMS.html" title="Macro BOOST_LOCAL_FUNCTION_PARAMS">BOOST_LOCAL_FUNCTION_PARAMS</a></code>, <a class="link" href="boost_local/Tutorial.html" title="Tutorial">Tutorial</a> section. </p>
</div>
</div>
Modified: sandbox/local/libs/local/doc/html/BOOST_LOCAL_TYPEOF.html
==============================================================================
--- sandbox/local/libs/local/doc/html/BOOST_LOCAL_TYPEOF.html (original)
+++ sandbox/local/libs/local/doc/html/BOOST_LOCAL_TYPEOF.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -33,7 +33,7 @@
</span>BOOST_LOCAL_TYPEOF(bound_variable_name)</pre></div>
<div class="refsect1">
-<a name="id913056"></a><h2>Description</h2>
+<a name="id912874"></a><h2>Description</h2>
<p>The type is fully qualified in that it contains the extra constant and reference qualifiers when they are specified for binding by constant and by reference. For example, if a variable named <code class="computeroutput">x</code> of type <code class="computeroutput">T</code> is: </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>Bound by value using <code class="computeroutput">bind x</code> then <code class="computeroutput">BOOST_LOCAL_TYPEOF(x)</code> is <code class="computeroutput">T</code>. </p></li>
Modified: sandbox/local/libs/local/doc/html/boost/local/function.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost/local/function.html (original)
+++ sandbox/local/libs/local/doc/html/boost/local/function.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -35,7 +35,7 @@
<span class="keyword">struct</span> <a class="link" href="function.html" title="Struct template function">function</a> <span class="special">{</span>
<span class="special">}</span><span class="special">;</span></pre></div>
<div class="refsect1">
-<a name="id910777"></a><h2>Description</h2>
+<a name="id910595"></a><h2>Description</h2>
<p>This template defines several specializations to handle a generic number of function parameters some of which can have default values. The number of supported function parameters <code class="computeroutput">N</code> goes from <code class="computeroutput">0</code> (for a function with no parameter) to a maximum of <code class="computeroutput"><a class="link" href="../../BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX.html" title="Macro BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX">BOOST_LOCAL_CONFIG_FUNCTION_ARITY_MAX</a></code>.</p>
<p>Each template specialization defines call operators <code class="computeroutput">operator()(...)</code> with a different set of parameters to handle the number of default parameters specified by <code class="computeroutput">defaults</code> (see <a class="link" href="../../boost_local/Advanced_Topics.html" title="Advanced Topics">
Advanced Topics</a> section): </p>
Modified: sandbox/local/libs/local/doc/html/boost_local/Advanced_Topics.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost_local/Advanced_Topics.html (original)
+++ sandbox/local/libs/local/doc/html/boost_local/Advanced_Topics.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -83,7 +83,7 @@
<p>
In addition, local function parameter types cannot start with non-alphanumeric
symbols (alphanumeric symbols are <code class="computeroutput"><span class="identifier">A</span><span class="special">-</span><span class="identifier">Z</span></code>, <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">z</span></code>,
- and <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>). <sup>[<a name="id879865" href="#ftn.id879865" class="footnote">15</a>]</sup> The library will generate (cryptic) preprocessor errors if a
+ and <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>). <sup>[<a name="id879676" href="#ftn.id879676" class="footnote">15</a>]</sup> The library will generate (cryptic) preprocessor errors if a
parameter type starts with a non-alphanumeric symbol.
</p>
<p>
@@ -206,7 +206,7 @@
<li class="listitem">
Parenthesis to wrap the type expression (and therefore any commas <code class="computeroutput"><span class="special">,</span></code> that it contains) passed as parameter
to the <code class="computeroutput"><a class="link" href="../BOOST_IDENTITY_TYPE.html" title="Macro BOOST_IDENTITY_TYPE">BOOST_IDENTITY_TYPE</a></code>
- macro. <sup>[<a name="id881223" href="#ftn.id881223" class="footnote">16</a>]</sup>
+ macro. <sup>[<a name="id881034" href="#ftn.id881034" class="footnote">16</a>]</sup>
</li>
</ol></div>
<p>
@@ -407,7 +407,7 @@
</p></td></tr>
</table></div>
<p>
- Consider the following complete example: <sup>[<a name="id882527" href="#ftn.id882527" class="footnote">17</a>]</sup>
+ Consider the following complete example: <sup>[<a name="id882338" href="#ftn.id882338" class="footnote">17</a>]</sup>
</p>
<div class="informaltable"><table class="table">
<colgroup>
@@ -1868,14 +1868,14 @@
</tbody>
</table></div>
<a name="boost_local.Advanced_Topics.limitations__overloading__operators__etc_.overloading"></a><h6>
-<a name="id907584"></a>
+<a name="id907394"></a>
<a class="link" href="Advanced_Topics.html#boost_local.Advanced_Topics.limitations__overloading__operators__etc_.overloading">Overloading</a>
</h6>
<p>
It is not possible to overload local functions. Declaring multiple local
functions with the same name within the same enclosing scope generates a
compile-time error (even if the different declarations specify different
- parameters). <sup>[<a name="id907608" href="#ftn.id907608" class="footnote">18</a>]</sup>
+ parameters). <sup>[<a name="id907418" href="#ftn.id907418" class="footnote">18</a>]</sup>
</p>
<p>
For example, the following code will <span class="bold"><strong>not</strong></span>
@@ -1894,12 +1894,12 @@
<span class="special">}</span>
</pre>
<a name="boost_local.Advanced_Topics.limitations__overloading__operators__etc_.operators"></a><h6>
-<a name="id907915"></a>
+<a name="id907725"></a>
<a class="link" href="Advanced_Topics.html#boost_local.Advanced_Topics.limitations__overloading__operators__etc_.operators">Operators</a>
</h6>
<p>
Local functions cannot be operators. Naming a local function <code class="computeroutput"><span class="keyword">operator</span><span class="special">...</span></code>
- will generate a compile-time error. <sup>[<a name="id907952" href="#ftn.id907952" class="footnote">19</a>]</sup>
+ will generate a compile-time error. <sup>[<a name="id907762" href="#ftn.id907762" class="footnote">19</a>]</sup>
</p>
<p>
For example, the following code will <span class="bold"><strong>not</strong></span>
@@ -1922,21 +1922,21 @@
</div>
<div class="footnotes">
<br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a id="ftn.id879865" href="#id879865" class="para">15</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id879676" href="#id879676" class="para">15</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This limitation derives from
the fact that <code class="computeroutput"><a class="link" href="../BOOST_LOCAL_FUNCTION_PARAMS.html" title="Macro BOOST_LOCAL_FUNCTION_PARAMS">BOOST_LOCAL_FUNCTION_PARAMS</a></code>
uses preprocessor token concatenation to inspect the parameter type token
to see if the token is a parameter or a bound variable. The C++ preprocessor
does not allow to concatenate non-alphanumeric tokens.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id881223" href="#id881223" class="para">16</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id881034" href="#id881034" class="para">16</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> Using variadic macros,
this extra set of parenthesis could be eliminated requiring only the
parenthesis to invoke the <code class="computeroutput"><a class="link" href="../BOOST_IDENTITY_TYPE.html" title="Macro BOOST_IDENTITY_TYPE">BOOST_IDENTITY_TYPE</a></code>
macro. However, this feature is currently not implemented and the double
parenthesis are always needed when invoking this macro.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id882527" href="#id882527" class="para">17</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id882338" href="#id882338" class="para">17</a>] </sup>
The authors recognize that the use of the <span class="emphasis"><em>identity macros</em></span>
adds extra parenthesis to the already significant number of parenthesis
required by the sequencing macro syntax. However, macro parameters usually
@@ -1944,14 +1944,14 @@
(unless template metaprogramming is being used) so this is usually not
a problem.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id907608" href="#id907608" class="para">18</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id907418" href="#id907418" class="para">18</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This is because a local function
is a functor object declared as a local variable within the enclosing scope.
Therefore, declaring two local functions with the same name within the
same enclosing scope declares two local variables with the same name within
the same scope and that is not allowed in C++.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id907952" href="#id907952" class="para">19</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id907762" href="#id907762" class="para">19</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This is the because a local
function name must be a valid local variable name (the local variable to
hold the local functor object) and operators cannot be used as local variable
Modified: sandbox/local/libs/local/doc/html/boost_local/Alternatives.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost_local/Alternatives.html (original)
+++ sandbox/local/libs/local/doc/html/boost_local/Alternatives.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -42,11 +42,6 @@
<p>
The following table compares local function features.
</p>
-<p>
- @todo From Mathias: Minus of Local compared to Lambdas: - creating a local
- can only be done at statement scope. - locals may not automatically capture
- all context - size of a local function cannot be optimized to be two words.
- </p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
@@ -164,6 +159,8 @@
<p>
Yes, bind by value, constant value, reference, and constant reference
(also bind the object <code class="computeroutput"><span class="keyword">this</span></code>).
+ However, the names of the bound variables must be repeated one
+ by one.
</p>
</td>
<td>
@@ -173,7 +170,9 @@
</td>
<td>
<p>
- Yes, but no bind by constant (value or reference).
+ Yes, plus there is short-hand syntax to bind all variables in scope
+ at once (by value or by reference). However, there is no bind by
+ constant value nor by constant reference.
</p>
</td>
<td>
@@ -183,7 +182,7 @@
</td>
<td>
<p>
- No.
+ Yes.
</p>
</td>
</tr>
@@ -219,6 +218,126 @@
</p>
</td>
</tr>
+<tr>
+<td>
+ <p>
+ Examples
+ </p>
+ </td>
+<td>
+ <p>
+
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">factor</span> <span class="special">=</span> <span class="number">10</span><span class="special">;</span>
+
+ <span class="keyword">void</span> <span class="identifier">BOOST_LOCAL_FUNCTION_PARAMS</span><span class="special">(</span>
+ <span class="special">(</span><span class="keyword">double</span> <span class="identifier">num</span><span class="special">)</span> <span class="special">(</span><span class="identifier">bind</span><span class="special">&</span> <span class="identifier">sum</span><span class="special">)</span>
+ <span class="special">(</span><span class="keyword">const</span> <span class="identifier">bind</span><span class="special">&</span> <span class="identifier">factor</span><span class="special">)</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">factor</span> <span class="special">*</span> <span class="identifier">num</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">clog</span> <span class="special"><<</span> <span class="string">"Summed: "</span> <span class="special"><<</span>
+ <span class="identifier">sum</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span> <span class="identifier">BOOST_LOCAL_FUNCTION_NAME</span><span class="special">(</span><span class="identifier">add</span><span class="special">)</span>
+
+ <span class="keyword">double</span> <span class="identifier">nums</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">nums</span><span class="special">,</span> <span class="identifier">nums</span> <span class="special">+</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">add</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">factor</span> <span class="special">=</span> <span class="number">10</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">local</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">add</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">num</span><span class="special">,</span>
+ <span class="comment">// Unfortunately, cannot bind
+</span> <span class="comment">// (so specify variable types).
+</span> <span class="keyword">double</span><span class="special">&</span> <span class="identifier">sum</span><span class="special">,</span>
+ <span class="keyword">const</span> <span class="keyword">int</span><span class="special">&</span> <span class="identifier">factor</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">factor</span> <span class="special">*</span> <span class="identifier">num</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">clog</span> <span class="special"><<</span> <span class="string">"Summed: "</span> <span class="special"><<</span>
+ <span class="identifier">sum</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">double</span> <span class="identifier">nums</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
+ <span class="comment">// Unfortunately, cannot pass as
+</span> <span class="comment">// template parameter to `std::for_each`.
+</span> <span class="keyword">for</span> <span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">3</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// Unfortunately, explicitly pass
+</span> <span class="comment">// variables `sum` and `factor`.
+</span> <span class="identifier">local</span><span class="special">::</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">nums</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span> <span class="identifier">sum</span><span class="special">,</span> <span class="identifier">factor</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">factor</span> <span class="special">=</span> <span class="number">10</span><span class="special">;</span>
+
+ <span class="keyword">double</span> <span class="identifier">numes</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">nums</span><span class="special">,</span> <span class="identifier">nums</span> <span class="special">+</span> <span class="number">3</span><span class="special">,</span>
+ <span class="comment">// Lambdas are defined at expression
+</span> <span class="comment">// level. Unfortunately, cannot bind
+</span> <span class="comment">// `factor` by `const&`.
+</span> <span class="special">[&</span><span class="identifier">sum</span><span class="special">,</span> <span class="identifier">factor</span><span class="special">](</span><span class="keyword">double</span> <span class="identifier">num</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">factor</span> <span class="special">*</span> <span class="identifier">num</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">clog</span> <span class="special"><<</span> <span class="string">"Summed: "</span> <span class="special"><<</span>
+ <span class="identifier">sum</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+ </td>
+<td>
+ <p>
+ The body of <code class="computeroutput"><span class="identifier">add</span></code>
+ is too complex to be programmed using Boost.Lambda.
+ </p>
+ </td>
+<td>
+ <p>
+
+</p>
+<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">factor</span> <span class="special">=</span> <span class="number">10</span><span class="special">;</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function</span><span class="special"><</span><span class="keyword">void</span><span class="special">(</span><span class="keyword">double</span><span class="special">)></span> <span class="identifier">add</span><span class="special">=(</span>
+ <span class="comment">// Unfortunately, body cannot use
+</span> <span class="comment">// usual C++ syntax.
+</span> <span class="identifier">ref</span><span class="special">(</span><span class="identifier">sum</span><span class="special">)</span> <span class="special">+=</span> <span class="identifier">factor</span> <span class="special">*</span> <span class="identifier">_1</span><span class="special">,</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">clog</span> <span class="special"><<</span> <span class="identifier">var</span><span class="special">(</span><span class="string">"Summed: "</span><span class="special">)</span> <span class="special"><<</span>
+ <span class="identifier">sum</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+ <span class="special">);</span>
+
+ <span class="keyword">double</span> <span class="identifier">nums</span><span class="special">[</span><span class="number">3</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="number">3</span><span class="special">};</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">nums</span><span class="special">,</span> <span class="identifier">nums</span> <span class="special">+</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">add</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ </p>
+ </td>
+</tr>
</tbody>
</table></div>
</div>
Modified: sandbox/local/libs/local/doc/html/boost_local/Getting_Started.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost_local/Getting_Started.html (original)
+++ sandbox/local/libs/local/doc/html/boost_local/Getting_Started.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -45,66 +45,14 @@
</h3></div></div></div>
<p>
Programmers should be ready to use this library, at least at a basic level,
- after reading the following sections of this documentation:
+ after reading this section and the <a class="link" href="Tutorial.html" title="Tutorial">Tutorial</a>
+ section. The <a class="link" href="Advanced_Topics.html" title="Advanced Topics">Advanced Topics</a>
+ and Reference sections can be consulted
+ at a later point to gain a more advanced knowledge of this library features.
+ All the other sections of this documentation are for reference only.
</p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
- The <a class="link" href="../index.html#boost_local.Introduction" title="Introduction">Introduction</a> section
- provides an overview on the library and its features.
- </li>
-<li class="listitem">
- The <span class="underline">_Starting</span>_ section explains
- how to read this documentation, how to install the library to work with
- the supported compilers and platforms.
- </li>
-<li class="listitem">
- The <a class="link" href="Tutorial.html" title="Tutorial">Tutorial</a> section provides
- a good explanation of basic usages of the library with extensive examples.
- </li>
-</ul></div>
-<p>
- The following sections could be consulted at a later point to gain a more
- in-depth knowledge of the library features:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
- The <span class="underline">_Advanced</span>_ section explains
- advanced usages of the library.
- </li>
-<li class="listitem">
- The Reference section is the reference
- manual of the library public API.
- </li>
-<li class="listitem">
- The <a class="link" href="Examples.html" title="Appendix: Examples">Examples</a> section lists
- the source code of a few additional examples that use this library.
- </li>
-<li class="listitem">
- The <a class="link" href="Alternatives.html" title="Appendix: Alternatives">Alternatives</a> section
- describes alternatives to this library to implement local functions.
- </li>
-</ul></div>
-<p>
- The following sections are for reference only:
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc">
-<li class="listitem">
- The <span class="underline">_Releases</span>_ section contains
- short release notes.
- </li>
-<li class="listitem">
- The <a class="link" href="Bibliography.html" title="Bibliography">Bibliography</a> section
- lists references that were consulted in the design and development of
- this library.
- </li>
-<li class="listitem">
- The <a class="link" href="Acknowledgments.html" title="Acknowledgments">Acknowledgments</a>
- section attempts to recognize all the people that contributes directly
- or indirectly to the design and development of this library.
- </li>
-</ul></div>
<p>
- Furthermore, some footnotes are marked by the word "<span class="bold"><strong>Rationale</strong></span>"
+ Some footnotes are marked by the word "<span class="bold"><strong>Rationale</strong></span>"
because they explain reasons behind decisions made during the design and
implementation of this library.
</p>
@@ -168,12 +116,11 @@
<code class="computeroutput"><a class="link" href="../reference.html#header.boost.local.block_hpp" title="Header <boost/local/block.hpp>">boost/local/block.hpp</a></code> <span class="emphasis"><em>local blocks</em></span>
<code class="computeroutput"><a class="link" href="../reference.html#header.boost.local.exit_hpp" title="Header <boost/local/exit.hpp>">boost/local/exit.hpp</a></code> <span class="emphasis"><em>local exits</em></span>
<code class="computeroutput"><a class="link" href="../reference.html#header.boost.local.typeof_hpp" title="Header <boost/local/typeof.hpp>">boost/local/typeof.hpp</a></code> <span class="emphasis"><em>bound variable type deduction</em></span>
-<code class="computeroutput"><a class="link" href="../reference.html#header.boost.local.function_hpp" title="Header <boost/local/function.hpp>">boost/local/function.hpp</a></code> <span class="emphasis"><em>local functors</em></span>
<code class="computeroutput"><a class="link" href="../reference.html#header.boost.local.config_hpp" title="Header <boost/local/config.hpp>">boost/local/config.hpp</a></code> <span class="emphasis"><em>configuration macros</em></span>
</pre>
<p>
The following symbols are part of the library private API, they are not documented,
- and they should not be directly used by programmers: <sup>[<a name="id866442" href="#ftn.id866442" class="footnote">2</a>]</sup>
+ and they should not be directly used by programmers: <sup>[<a name="id866278" href="#ftn.id866278" class="footnote">2</a>]</sup>
</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
@@ -213,7 +160,7 @@
</div>
<div class="footnotes">
<br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a id="ftn.id866442" href="#id866442" class="para">2</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id866278" href="#id866278" class="para">2</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This library concatenates symbols
specified by the programmers (e.g., the local function name) with other
symbols (e.g., special prefixes or preprocessor line numbers) to make internal
Modified: sandbox/local/libs/local/doc/html/boost_local/Implementation.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost_local/Implementation.html (original)
+++ sandbox/local/libs/local/doc/html/boost_local/Implementation.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -28,31 +28,147 @@
</h2></div></div></div>
<div class="toc"><dl>
<dt><span class="section">Local Functions</span></dt>
-<dt><span class="section">Local Blocks</span></dt>
-<dt><span class="section">Local Exits</span></dt>
+<dt><span class="section"><a href="Implementation.html#boost_local.Implementation.local_blocks_and_exits">Local
+ Blocks and Exits</a></span></dt>
</dl></div>
+<p>
+ This section lists source code that should provide a general idea on how this
+ library implements local functions.
+ </p>
+<p>
+ The code listed here should only be used as a reference in trying to understand
+ the library implementation and source code. There is no guarantee that the
+ library implementation will use exactly the code listed here. Refer to the
+ code comments in the library source files for the reasons behind the specific
+ instructions listed here.
+ </p>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_local.Implementation.local_functions"></a><a class="link" href="Implementation.html#boost_local.Implementation.local_functions" title="Local Functions">Local Functions</a>
</h3></div></div></div>
<p>
- [factorial_impl_cpp]
+ The expansion of the local function macros in the <code class="computeroutput"><span class="identifier">factorial</span></code>
+ example presented in the <a class="link" href="Advanced_Topics.html" title="Advanced Topics">Advanced
+ Topics</a> section generates code equivalent to the following:
</p>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost_local.Implementation.local_blocks"></a><a class="link" href="Implementation.html#boost_local.Implementation.local_blocks" title="Local Blocks">Local Blocks</a>
-</h3></div></div></div>
<p>
- [add_block_impl_cpp]
+
+</p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">local</span><span class="special">/</span><span class="identifier">function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">sstream</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span>
+<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
+
+<span class="keyword">int</span> <span class="identifier">main</span> <span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostringstream</span> <span class="identifier">output</span><span class="special">;</span>
+
+ <span class="keyword">int</span> <span class="comment">// The local function result type (just before the `BOOST_LOCAL_FUNCTION_PARAMS` macro).
+</span>
+ <span class="comment">// *BEGIN* The macro
+</span> <span class="comment">// BOOST_LOCAL_FUNCTION_PARAMS( (int n) (bool recursion)(default false)
+</span> <span class="comment">// (bind& output) )
+</span> <span class="comment">// expands (at line 18) to:
+</span>
+ <span class="special">(*</span><span class="identifier">ERROR_missing_result_type_before_the_local_function_parameter_macro_id18</span><span class="special">)();</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">boost_local_auxXdeduce_result_tag18</span><span class="special">)(</span><span class="keyword">int</span> <span class="identifier">ERROR_missing_result_type_before_the_local_function_parameter_macro_id18</span><span class="special">);</span>
+ <span class="keyword">typedef</span> <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">wrap</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">deref</span><span class="special">(</span> <span class="identifier">ERROR_missing_result_type_before_the_local_function_parameter_macro_id18</span><span class="special">,</span> <span class="special">(</span><span class="identifier">boost_local_auxXdeduce_result_tag18</span><span class="special">)</span><span class="number">0</span><span class="special">)))</span> <span class="identifier">boost_loc
al_auxXdeduce_result_wrap18</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_local_auxXdeduce_result_wrap18</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">boost_local_auxXdeduce_result_capture18</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">boost_local_auxXdeduce_result_params18</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_local_auxXdeduce_result_capture18</span> <span class="identifier">function_ptr_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">remove_pointer</span><span class="special"><</span> <span class="identifier">boost_local_auxXdeduce_result_params18</span><span class="special">::</span><span class="identifier">function_ptr_type</span> <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">boost_local_auxXdeduce_result_function_type18</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_traits</span><span class="special"><</span> <span class="identifier">boost_local_auxXdeduce_result_function_type18</span><span class="special">>::</span><span class="identifier">result_type</span> <span class="identifier">boost_local_auxXresult_type18</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="special">(*</span><span class="identifier">boost_se_tag_0_18</span><span class="special">)(</span><span class="keyword">int</span> <span class="special">&</span> <span class="identifier">output</span> <span class="special">);</span>
+ <span class="keyword">typedef</span> <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">wrap</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">deref</span><span class="special">(&</span> <span class="identifier">output</span><span class="special">,</span> <span class="special">(</span><span class="identifier">boost_se_tag_0_18</span><span class="special">)</span><span class="number">0</span><span class="special">)))</span> <span class="identifier">boost_se_wrapped_t_0_18</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_se_wrapped_t_0_18</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">boost_se_capture_t_0_18</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">boost_se_params_t_18</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_se_capture_t_0_18</span> <span class="identifier">boost_se_param_t_0_18</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">member</span><span class="special"><</span> <span class="identifier">boost_se_param_t_0_18</span><span class="special">,</span> <span class="identifier">boost_se_tag_0_18</span> <span class="special">></span> <span class="identifier">boost_se_param_0_18</span><span class="special">;</span>
+ <span class="special">}</span> <span class="identifier">boost_local_auxXparams18</span> <span class="special">=</span> <span class="special">{</span>
+ <span class="special">{</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">deref</span><span class="special">(&</span> <span class="identifier">output</span><span class="special">,</span> <span class="special">(</span><span class="identifier">boost_se_tag_0_18</span><span class="special">)</span><span class="number">0</span><span class="special">)</span> <span class="special">}</span> <span class="comment">// This is for GCC but no extra curly parenthesis on MSVC.
+</span> <span class="special">};</span>
+
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">declared</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">resolve</span><span class="special"><</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">boost_local_auxXargs</span><span class="special">)</span> <span class="special">>::</span><span class="identifier">cmp1</span><span class="special"><</span><span class="number">0</span><span class="special">>::</span><span class="identifier">cmp2</span> <span class="special">></span> <span class="identifier">boost_local_auxXargs</span><span class="speci
al">;</span>
+ <span class="identifier">boost_local_auxXargs</span><span class="special">.</span><span class="identifier">value</span> <span class="special">=</span> <span class="special">&</span><span class="identifier">boost_local_auxXparams18</span><span class="special">;</span>
+
+ <span class="keyword">class</span> <span class="identifier">boost_local_auxXfunctor18</span> <span class="special">:</span> <span class="keyword">public</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">local</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">abstract_function</span><span class="special"><</span> <span class="identifier">boost_local_auxXresult_type18</span> <span class="special">(</span> <span class="keyword">int</span> <span class="identifier">n</span> <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">recursion</span> <span class="special">),</span> <span class="number">1</span> <span class="special">></span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_local_auxXresult_type18</span> <span class="special">(</span><span class="identifier">boost_local_auxXfunction_type</span><span class="special">)</span> <span class="special">(</span> <span class="keyword">int</span> <span class="identifier">n</span> <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">recursion</span> <span class="special">);</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">explicit</span> <span class="identifier">boost_local_auxXfunctor18</span><span class="special">(</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">binding_data</span><span class="special">)</span> <span class="special">:</span>
+ <span class="identifier">boost_local_auxXbinds</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span> <span class="identifier">boost_se_params_t_18</span><span class="special">*>(</span><span class="identifier">binding_data</span><span class="special">))</span> <span class="special">{</span>
+ <span class="identifier">boost_local_auxXinit_recursion</span><span class="special">();</span>
+ <span class="special">}</span>
+
+ <span class="identifier">boost_local_auxXresult_type18</span> <span class="keyword">operator</span><span class="special">()(</span>
+ <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_traits</span><span class="special"><</span> <span class="identifier">boost_local_auxXfunction_type</span><span class="special">>::</span><span class="identifier">arg1_type</span> <span class="identifier">arg1</span> <span class="special">,</span>
+ <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_traits</span><span class="special"><</span> <span class="identifier">boost_local_auxXfunction_type</span><span class="special">>::</span><span class="identifier">arg2_type</span> <span class="identifier">arg2</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost_local_auxXbody</span><span class="special">(</span> <span class="identifier">boost_local_auxXbinds</span><span class="special">-></span> <span class="identifier">boost_se_param_0_18</span><span class="special">.</span><span class="identifier">value</span> <span class="special">,</span> <span class="identifier">arg1</span> <span class="special">,</span> <span class="identifier">arg2</span> <span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">boost_local_auxXresult_type18</span> <span class="keyword">operator</span><span class="special">()(</span>
+ <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">function_traits</span><span class="special"><</span> <span class="identifier">boost_local_auxXfunction_type</span><span class="special">>::</span><span class="identifier">arg1_type</span> <span class="identifier">arg1</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost_local_auxXbody</span><span class="special">(</span> <span class="identifier">boost_local_auxXbinds</span><span class="special">-></span> <span class="identifier">boost_se_param_0_18</span><span class="special">.</span><span class="identifier">value</span> <span class="special">,</span> <span class="identifier">arg1</span> <span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="keyword">private</span><span class="special">:</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">scope_exit</span><span class="special">::</span><span class="identifier">aux</span><span class="special">::</span><span class="identifier">undeclared</span> <span class="identifier">boost_local_auxXargs</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">local</span><span class="special">::</span><span class="identifier">function</span><span class="special"><</span><span class="identifier">boost_local_auxXfunction_type</span><span class="special">,</span> <span class="number">1</span> <span class="special">></span> <span class="identifier">boost_local_auxXfunctor_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost_se_params_t_18</span><span class="special">::</span> <span class="identifier">boost_se_param_t_0_18</span> <span class="special">&</span> <span class="identifier">outputXboost_local_auxXtypeof_type</span> <span class="special">;</span>
+ <span class="identifier">boost_se_params_t_18</span><span class="special">*</span> <span class="identifier">boost_local_auxXbinds</span><span class="special">;</span>
+
+ <span class="identifier">boost_local_auxXresult_type18</span> <span class="identifier">boost_local_auxXbody</span><span class="special">(</span> <span class="identifier">boost_se_params_t_18</span><span class="special">::</span> <span class="identifier">boost_se_param_t_0_18</span> <span class="special">&</span> <span class="identifier">output</span> <span class="special">,</span> <span class="keyword">int</span> <span class="identifier">n</span> <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">recursion</span> <span class="special">=</span> <span class="keyword">false</span> <span class="special">)</span> <span class="keyword">const</span>
+
+ <span class="comment">// *END* The expansion of `BOOST_LOCAL_FUNCTION_PARAMS` ends here.
+</span>
+ <span class="comment">// *BEGIN* The local function body code `{ ... }` as specified by the programmers:
+</span>
+ <span class="special">{</span>
+ <span class="keyword">int</span> <span class="identifier">result</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+
+ <span class="keyword">if</span> <span class="special">(</span><span class="identifier">n</span> <span class="special"><</span> <span class="number">2</span> <span class="special">)</span> <span class="identifier">result</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <span class="keyword">else</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">n</span> <span class="special">*</span> <span class="identifier">factorial</span><span class="special">(</span><span class="identifier">n</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span> <span class="keyword">true</span><span class="special">);</span> <span class="comment">// Recursive call.
+</span>
+ <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">recursion</span><span class="special">)</span> <span class="identifier">output</span> <span class="special"><<</span> <span class="identifier">result</span> <span class="special"><<</span> <span class="string">" "</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">result</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="comment">// *END* The local function body `{ ... }` ends here.
+</span>
+ <span class="comment">// *BEGIN* The macro `BOOST_LOCAL_FUNCTION_NAME(factorial)` expands to:
+</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">boost_local_auxXfunctor_type</span> <span class="identifier">factorial</span><span class="special">;</span>
+
+ <span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">void</span> <span class="identifier">boost_local_auxXinit_recursion</span><span class="special">()</span> <span class="special">{</span>
+ <span class="identifier">factorial</span> <span class="special">=</span> <span class="special">*</span><span class="keyword">this</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="special">}</span> <span class="identifier">boost_local_auxXfunctorXfactorial</span><span class="special">(</span><span class="identifier">boost_local_auxXargs</span><span class="special">.</span><span class="identifier">value</span><span class="special">);</span>
+ <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="identifier">boost_local_auxXfunctorXfactorial</span><span class="special">.</span><span class="identifier">factorial</span><span class="special">)</span> <span class="keyword">const</span> <span class="identifier">factorial</span><span class="special">(</span><span class="identifier">boost_local_auxXfunctorXfactorial</span><span class="special">);</span>
+
+ <span class="comment">// *END* The expansion of `BOOST_LOCAL_FUNCTION_NAME` ends here.
+</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">v</span><span class="special">(</span><span class="number">3</span><span class="special">);</span>
+ <span class="identifier">v</span><span class="special">[</span><span class="number">0</span><span class="special">]</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">v</span><span class="special">[</span><span class="number">1</span><span class="special">]</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span> <span class="identifier">v</span><span class="special">[</span><span class="number">2</span><span class="special">]</span> <span class="special">=</span> <span class="number">7</span><span class="special">;</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">v</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">factorial</span><span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">output</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
</p>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="boost_local.Implementation.local_exits"></a><a class="link" href="Implementation.html#boost_local.Implementation.local_exits" title="Local Exits">Local Exits</a>
+<a name="boost_local.Implementation.local_blocks_and_exits"></a><a class="link" href="Implementation.html#boost_local.Implementation.local_blocks_and_exits" title="Local Blocks and Exits">Local
+ Blocks and Exits</a>
</h3></div></div></div>
<p>
- [add_exit_impl_cpp]
+ Local blocks and local exits are trivially implemented by this library reusing
+ local functions. Local block and local exit implementation code should be
+ obvious from the library source files so it is not listed here.
</p>
</div>
</div>
Modified: sandbox/local/libs/local/doc/html/boost_local/Tutorial.html
==============================================================================
--- sandbox/local/libs/local/doc/html/boost_local/Tutorial.html (original)
+++ sandbox/local/libs/local/doc/html/boost_local/Tutorial.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -115,12 +115,12 @@
<span class="special">...</span> <span class="special">}</span></code>
using the usual C++ syntax. The body is specified outside any of the macros
so eventual compiler error messages and line numbers retain their usual meaning.
- <sup>[<a name="id867132" href="#ftn.id867132" class="footnote">3</a>]</sup>
+ <sup>[<a name="id866968" href="#ftn.id866968" class="footnote">3</a>]</sup>
</p>
<p>
The macro <code class="computeroutput"><a class="link" href="../BOOST_LOCAL_FUNCTION_NAME.html" title="Macro BOOST_LOCAL_FUNCTION_NAME">BOOST_LOCAL_FUNCTION_NAME</a></code>
is used to end the local function definition and to specify the local function
- name. <sup>[<a name="id867168" href="#ftn.id867168" class="footnote">4</a>]</sup>
+ name. <sup>[<a name="id867004" href="#ftn.id867004" class="footnote">4</a>]</sup>
</p>
<p>
For example, let's program a local function named <code class="computeroutput"><span class="identifier">add</span></code>
@@ -366,7 +366,7 @@
This library also allows to specify default values for the local function
parameters. However, the usual C++ syntax for default parameters that uses
the assignment symbol <code class="computeroutput"><span class="special">=</span></code> cannot
- be used. <sup>[<a name="id869094" href="#ftn.id869094" class="footnote">5</a>]</sup> The keyword <code class="computeroutput"><span class="keyword">default</span></code>
+ be used. <sup>[<a name="id868926" href="#ftn.id868926" class="footnote">5</a>]</sup> The keyword <code class="computeroutput"><span class="keyword">default</span></code>
is used instead:
</p>
<div class="informaltable"><table class="table">
@@ -508,7 +508,7 @@
variables, the object <code class="computeroutput"><span class="keyword">this</span></code>,
etc) can be bound to a local function declaration. The types of bound variables
are automatically deduced by this library using Boost.Typeof.
- <sup>[<a name="id870318" href="#ftn.id870318" class="footnote">6</a>]</sup>
+ <sup>[<a name="id870150" href="#ftn.id870150" class="footnote">6</a>]</sup>
</p>
<div class="important"><table border="0" summary="Important">
<tr>
@@ -525,7 +525,7 @@
</table></div>
<p>
This library introduces the new "keyword" <code class="computeroutput"><span class="identifier">bind</span></code>
- <sup>[<a name="id870406" href="#ftn.id870406" class="footnote">7</a>]</sup> which is used in place of the parameter type to specify the name
+ <sup>[<a name="id870238" href="#ftn.id870238" class="footnote">7</a>]</sup> which is used in place of the parameter type to specify the name
of a variable in scope to bind. The variable can be bound by value:
</p>
<pre class="programlisting"><span class="identifier">bind</span> <span class="emphasis"><em>variable-name</em></span> <span class="comment">// Bind by value.
@@ -566,7 +566,7 @@
unless constant binding is forced using <code class="computeroutput"><span class="keyword">const</span>
<span class="identifier">bind</span> <span class="special">...</span></code>
(note that binding by constant reference is not supported by <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions" target="_top">C++0x
- lambda</a> functions). <sup>[<a name="id870660" href="#ftn.id870660" class="footnote">8</a>]</sup> Programmers might want to bind variables of complex types by
+ lambda</a> functions). <sup>[<a name="id870493" href="#ftn.id870493" class="footnote">8</a>]</sup> Programmers might want to bind variables of complex types by
(constant) reference instead than by value to avoid expensive copy operations
when these variables are automatically passed to the local function (as usual
with C++ function parameter passing).
@@ -609,7 +609,7 @@
]
</p>
<a name="boost_local.Tutorial.Binding.binding_the_object__code__phrase_role__keyword__this__phrase___code_"></a><h6>
-<a name="id870852"></a>
+<a name="id870685"></a>
<a class="link" href="Tutorial.html#boost_local.Tutorial.Binding.binding_the_object__code__phrase_role__keyword__this__phrase___code_">Binding
the Object <code class="computeroutput"><span class="keyword">this</span></code></a>
</h6>
@@ -663,12 +663,12 @@
to a local function, the local function <span class="bold"><strong>body must
use the special symbol</strong></span> <code class="computeroutput"><span class="identifier">this_</span></code>
(instead of <code class="computeroutput"><span class="keyword">this</span></code>) to access
- the bound object. <sup>[<a name="id871171" href="#ftn.id871171" class="footnote">9</a>]</sup>
+ the bound object. <sup>[<a name="id871003" href="#ftn.id871003" class="footnote">9</a>]</sup>
</p>
<p>
Unfortunately, mistakenly using <code class="computeroutput"><span class="keyword">this</span></code>
within the local function body instead of <code class="computeroutput"><span class="identifier">this_</span></code>
- will not necessarily generate a compile-time error. <sup>[<a name="id871265" href="#ftn.id871265" class="footnote">10</a>]</sup> Programmers are responsible to make sure that <code class="computeroutput"><span class="keyword">this</span></code> is never used within a local function
+ will not necessarily generate a compile-time error. <sup>[<a name="id871097" href="#ftn.id871097" class="footnote">10</a>]</sup> Programmers are responsible to make sure that <code class="computeroutput"><span class="keyword">this</span></code> is never used within a local function
body which should only use the special symbol <code class="computeroutput"><span class="identifier">this_</span></code>.
</p>
</td></tr>
@@ -838,7 +838,7 @@
A <code class="computeroutput"><span class="keyword">return</span><span class="special">;</span></code>
instruction from within a local block jumps to the end of the local block
body and <span class="bold"><strong>it does not return the enclosing function</strong></span>.
- <sup>[<a name="id873980" href="#ftn.id873980" class="footnote">11</a>]</sup>
+ <sup>[<a name="id873804" href="#ftn.id873804" class="footnote">11</a>]</sup>
</p></td></tr>
</table></div>
<p>
@@ -941,7 +941,7 @@
If multiple local exits are declared within the same scope, their bodies
will be executed in the reverse order in which they have been declared. The
execution of the local exit code can be guaranteed only if the program does
- not terminate because of an uncaught exception. <sup>[<a name="id875184" href="#ftn.id875184" class="footnote">12</a>]</sup>
+ not terminate because of an uncaught exception. <sup>[<a name="id875009" href="#ftn.id875009" class="footnote">12</a>]</sup>
</p>
<p>
Only bound variables specified by <code class="literal"><span class="emphasis"><em>bindings</em></span></code>
@@ -1045,7 +1045,7 @@
Local exits are very similar to the <span class="emphasis"><em>scope exits</em></span> provided
by Boost.ScopeExit
with the addition that they also support constant binding and binding of
- the object <code class="computeroutput"><span class="keyword">this</span></code>. <sup>[<a name="id876436" href="#ftn.id876436" class="footnote">13</a>]</sup> Local exits can be used to emulate the <a href="http://d.digitalmars.com" target="_top">D
+ the object <code class="computeroutput"><span class="keyword">this</span></code>. <sup>[<a name="id876261" href="#ftn.id876261" class="footnote">13</a>]</sup> Local exits can be used to emulate the <a href="http://d.digitalmars.com" target="_top">D
Programming Language</a> <span class="emphasis"><em>scope guards</em></span> (see the
<a class="link" href="Examples.html#boost_local.Examples.Emulating_Ds_Scope_Guards" title="Emulating D's Scope Guards">Emulating
D's Scope Guards</a> example).
@@ -1059,7 +1059,7 @@
When local functions, local blocks, and local exits are programmed within
templates, they need to be declared using the following special macros ending
with the <code class="computeroutput"><span class="identifier">TPL</span></code> postfix (see
- the Reference section): <sup>[<a name="id876718" href="#ftn.id876718" class="footnote">14</a>]</sup>
+ the Reference section): <sup>[<a name="id876540" href="#ftn.id876540" class="footnote">14</a>]</sup>
</p>
<pre class="programlisting"><code class="computeroutput"><a class="link" href="../BOOST_LOCAL_FUNCTION_PARAMS_TPL.html" title="Macro BOOST_LOCAL_FUNCTION_PARAMS_TPL">BOOST_LOCAL_FUNCTION_PARAMS_TPL</a></code><span class="special">(</span><span class="emphasis"><em>parameters</em></span><span class="special">)</span>
<code class="computeroutput"><a class="link" href="../BOOST_LOCAL_BLOCK_TPL.html" title="Macro BOOST_LOCAL_BLOCK_TPL">BOOST_LOCAL_BLOCK_TPL</a></code><span class="special">(</span><span class="emphasis"><em>bindings</em></span><span class="special">)</span>
@@ -1192,20 +1192,20 @@
</div>
<div class="footnotes">
<br><hr width="100" align="left">
-<div class="footnote"><p><sup>[<a id="ftn.id867132" href="#id867132" class="para">3</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id866968" href="#id866968" class="para">3</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> If the local function body
were instead passed as a macro parameter, it would be expanded on a single
line of code (because macros always expand as a single line of code). Therefore,
eventual compiler error line numbers would all have the same value and
would no longer be useful to pinpoint the error.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id867168" href="#id867168" class="para">4</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id867004" href="#id867004" class="para">4</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> The local function name must
be passed to the macro <code class="computeroutput"><a class="link" href="../BOOST_LOCAL_FUNCTION_NAME.html" title="Macro BOOST_LOCAL_FUNCTION_NAME">BOOST_LOCAL_FUNCTION_NAME</a></code>
ending the function definition so this macro can declare a local variable
with the local function name to hold the local functor object.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id869094" href="#id869094" class="para">5</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id868926" href="#id868926" class="para">5</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> The assignment symbol <code class="computeroutput"><span class="special">=</span></code> cannot be used to specify default parameter
values because default values are not part of the parameter type so they
cannot be handled using template metaprogamming. Default parameter values
@@ -1215,7 +1215,7 @@
it counts the number of default values to provide the correct set of call
operators for the local functor object.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id870318" href="#id870318" class="para">6</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id870150" href="#id870150" class="para">6</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> By binding a variable in scope,
the local function declaration is specifying that such a variable should
be accessible within the local function body regardless of its type. Semantically,
@@ -1228,7 +1228,7 @@
This is especially useful for maintenance so if a bound variable type is
changed, the local function declaration does not have to change.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id870406" href="#id870406" class="para">7</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id870238" href="#id870238" class="para">7</a>] </sup>
The token <code class="computeroutput"><span class="identifier">bind</span></code> is not a
real keyword of the C++ language. This library parses <code class="computeroutput"><span class="identifier">bind</span></code>
during macro expansion using preprocessor metaprogramming. Therefore,
@@ -1237,7 +1237,7 @@
within the syntax defined by the macros of this library -- thus it is referred
to as a "keyword" only within quotes.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id870660" href="#id870660" class="para">8</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id870493" href="#id870493" class="para">8</a>] </sup>
An historical note: Constant binding of variables in scope was the main
use case that originally motivated the authors in developing this library.
The authors needed to locally create a chuck of code to assert some correctness
@@ -1252,7 +1252,7 @@
generates an error because the bound variable is of <code class="computeroutput"><span class="keyword">const</span></code>
type within the local function body.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id871171" href="#id871171" class="para">9</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id871003" href="#id871003" class="para">9</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This limitation comes from
the fact that <code class="computeroutput"><span class="keyword">this</span></code> is a
reserved C++ keyword so it cannot be used as the name of the internal
@@ -1266,7 +1266,7 @@
behaviour of <code class="computeroutput"><span class="keyword">static_cast</span></code></a>
(which might not work on all platforms at the cost of portability).
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id871265" href="#id871265" class="para">10</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id871097" href="#id871097" class="para">10</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> The local function body cannot
be a static member function of the local functor object in order to support
recursion (because the local function name is specified by the <code class="computeroutput"><a class="link" href="../BOOST_LOCAL_FUNCTION_NAME.html" title="Macro BOOST_LOCAL_FUNCTION_NAME">BOOST_LOCAL_FUNCTION_NAME</a></code>
@@ -1279,7 +1279,7 @@
is visible but it refers to the local functor object and not to the bound
object.
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id873980" href="#id873980" class="para">11</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id873804" href="#id873804" class="para">11</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> Programmers might expect
<code class="computeroutput"><span class="keyword">return</span><span class="special">;</span></code>
to exit the enclosing function instead of the local block (or local exit),
@@ -1297,7 +1297,7 @@
<code class="computeroutput"><span class="identifier">BOOST_LOCAL_RETURN</span><span class="special">;</span></code>)
to exit local blocks (and local exits).
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id875184" href="#id875184" class="para">12</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id875009" href="#id875009" class="para">12</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This library (as well as Boost.ScopeExit)
uses the destructor of a local variable to automatically execute the local
exit code upon exit of the enclosing scope. However, in C++ it is no possible
@@ -1306,7 +1306,7 @@
different from the D programming language which executes the scope exit
code even if the main program terminates because of an uncaught exception.)
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id876436" href="#id876436" class="para">13</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id876261" href="#id876261" class="para">13</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> This library could be merged
together with Boost.ScopeExit
into a new library named Boost.Scope (from the meaning of the word "scope"
@@ -1333,7 +1333,7 @@
name of "<a href="http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html" target="_top">nested
functions</a>".
</p></div>
-<div class="footnote"><p><sup>[<a id="ftn.id876718" href="#id876718" class="para">14</a>] </sup>
+<div class="footnote"><p><sup>[<a id="ftn.id876540" href="#id876540" class="para">14</a>] </sup>
<span class="bold"><strong>Rationale.</strong></span> Within templates, this library
needs to use <code class="computeroutput"><span class="keyword">typename</span></code> to explicitly
indicate that some expressions evaluate to a type. Because C++ does not
Modified: sandbox/local/libs/local/doc/html/index.html
==============================================================================
--- sandbox/local/libs/local/doc/html/index.html (original)
+++ sandbox/local/libs/local/doc/html/index.html 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -424,7 +424,7 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: March 21, 2011 at 00:39:37 GMT</small></p></td>
+<td align="left"><p><small>Last revised: March 21, 2011 at 02:28:55 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Modified: sandbox/local/libs/local/doc/qbk/alternatives.qbk
==============================================================================
--- sandbox/local/libs/local/doc/qbk/alternatives.qbk (original)
+++ sandbox/local/libs/local/doc/qbk/alternatives.qbk 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -12,11 +12,6 @@
The following table compares local function features.
-_at_todo From Mathias: Minus of Local compared to Lambdas:
- - creating a local can only be done at statement scope.
- - locals may not automatically capture all context
- - size of a local function cannot be optimized to be two words.
-
[table
[
[ Local Function Feature ]
@@ -44,11 +39,13 @@
]
[
[ ['Bind variables in scope] ]
- [ Yes, bind by value, constant value, reference, and constant reference (also bind the object `this`). ]
- [ No. ]
- [ Yes, but no bind by constant (value or reference). ]
+ [ Yes, bind by value, constant value, reference, and constant reference (also bind the object `this`).
+However, the names of the bound variables must be repeated one by one.]
[ No. ]
+ [ Yes, plus there is short-hand syntax to bind all variables in scope at once (by value or by reference).
+However, there is no bind by constant value nor by constant reference. ]
[ No. ]
+ [ Yes. ]
]
[
[ ['Can be defined within expressions] ]
@@ -58,6 +55,93 @@
[ Yes. ]
[ Yes. ]
]
+[
+ [ Examples ]
+ [``
+ int main() {
+ double sum = 0.0;
+ int factor = 10;
+
+ void BOOST_LOCAL_FUNCTION_PARAMS(
+ (double num) (bind& sum)
+ (const bind& factor) ) {
+ sum += factor * num;
+ std::clog << "Summed: " <<
+ sum << std::endl;
+ } BOOST_LOCAL_FUNCTION_NAME(add)
+
+ double nums[3] = {1, 2, 3};
+ std::for_each(nums, nums + 3, add);
+ return 0;
+ }
+ ``]
+ [``
+ int main() {
+ double sum = 0.0;
+ int factor = 10;
+
+ struct local {
+ static void add(double num,
+ // Unfortunately, cannot bind
+ // (so specify variable types).
+ double& sum,
+ const int& factor) {
+ sum += factor * num;
+ std::clog << "Summed: " <<
+ sum << std::endl;
+ }
+ };
+
+ double nums[3] = {1, 2, 3};
+ // Unfortunately, cannot pass as
+ // template parameter to `std::for_each`.
+ for (size_t i = 0; i < 3; ++i) {
+ // Unfortunately, explicitly pass
+ // variables `sum` and `factor`.
+ local::add(nums[i], sum, factor);
+ }
+ return 0;
+ }
+ ``]
+ [``
+ int main() {
+ double sum = 0.0;
+ int factor = 10;
+
+ double numes[3] = {1, 2, 3};
+ std::for_each(nums, nums + 3,
+ // Lambdas are defined at expression
+ // level. Unfortunately, cannot bind
+ // `factor` by `const&`.
+ [&sum, factor](double num) {
+ sum += factor * num;
+ std::clog << "Summed: " <<
+ sum << std::endl;
+ }
+ );
+ return 0;
+ }
+ ``]
+ [ The body of `add` is too complex to be programmed using __Boost_Lambda__. ]
+ [``
+ int main() {
+ double sum = 0.0;
+ int factor = 10;
+
+ boost::function<void(double)> add=(
+ // Unfortunately, body cannot use
+ // usual C++ syntax.
+ ref(sum) += factor * _1,
+ std::clog << var("Summed: ") <<
+ sum << std::endl
+ );
+
+ double nums[3] = {1, 2, 3};
+ std::for_each(nums, nums + 3, add);
+ return 0;
+ }
+ ``]
+]
]
[endsect]
Modified: sandbox/local/libs/local/doc/qbk/getting_started.qbk
==============================================================================
--- sandbox/local/libs/local/doc/qbk/getting_started.qbk (original)
+++ sandbox/local/libs/local/doc/qbk/getting_started.qbk 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -10,26 +10,11 @@
[section This Documentation]
-Programmers should be ready to use this library, at least at a basic level, after reading the following sections of this documentation:
+Programmers should be ready to use this library, at least at a basic level, after reading this section and the __Tutorial__ section.
+The __Advanced_Topics__ and __Reference__ sections can be consulted at a later point to gain a more advanced knowledge of this library features.
+All the other sections of this documentation are for reference only.
-* The __Introduction__ section provides an overview on the library and its features.
-* The __Starting__ section explains how to read this documentation, how to install the library to work with the supported compilers and platforms.
-* The __Tutorial__ section provides a good explanation of basic usages of the library with extensive examples.
-
-The following sections could be consulted at a later point to gain a more in-depth knowledge of the library features:
-
-* The __Advanced__ section explains advanced usages of the library.
-* The __Reference__ section is the reference manual of the library public API.
-* The __Examples__ section lists the source code of a few additional examples that use this library.
-* The __Alternatives__ section describes alternatives to this library to implement local functions.
-
-The following sections are for reference only:
-
-* The __Releases__ section contains short release notes.
-* The __Bibliography__ section lists references that were consulted in the design and development of this library.
-* The __Acknowledgments__ section attempts to recognize all the people that contributes directly or indirectly to the design and development of this library.
-
-Furthermore, some footnotes are marked by the word "*Rationale*" because they explain reasons behind decisions made during the design and implementation of this library.
+Some footnotes are marked by the word "*Rationale*" because they explain reasons behind decisions made during the design and implementation of this library.
[endsect]
@@ -62,7 +47,6 @@
``[headerref boost/local/block.hpp] /local blocks/``
``[headerref boost/local/exit.hpp] /local exits/``
``[headerref boost/local/typeof.hpp] /bound variable type deduction/``
- ``[headerref boost/local/function.hpp] /local functors/``
``[headerref boost/local/config.hpp] /configuration macros/``
The following symbols are part of the library private API, they are not documented, and they should not be directly used by programmers:
Modified: sandbox/local/libs/local/doc/qbk/implementation.qbk
==============================================================================
--- sandbox/local/libs/local/doc/qbk/implementation.qbk (original)
+++ sandbox/local/libs/local/doc/qbk/implementation.qbk 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -1,21 +1,24 @@
[section:Implementation Appendix: Implementation]
-[section Local Functions]
+This section lists source code that should provide a general idea on how this library implements local functions.
-[factorial_impl_cpp]
+The code listed here should only be used as a reference in trying to understand the library implementation and source code.
+There is no guarantee that the library implementation will use exactly the code listed here.
+Refer to the code comments in the library source files for the reasons behind the specific instructions listed here.
-[endsect]
+[section Local Functions]
-[section Local Blocks]
+The expansion of the local function macros in the `factorial` example presented in the __Advanced_Topics__ section generates code equivalent to the following:
-[add_block_impl_cpp]
+[factorial_impl_cpp]
[endsect]
-[section Local Exits]
+[section Local Blocks and Exits]
-[add_exit_impl_cpp]
+Local blocks and local exits are trivially implemented by this library reusing local functions.
+Local block and local exit implementation code should be obvious from the library source files so it is not listed here.
[endsect]
Modified: sandbox/local/libs/local/doc/qbk/local.qbk
==============================================================================
--- sandbox/local/libs/local/doc/qbk/local.qbk (original)
+++ sandbox/local/libs/local/doc/qbk/local.qbk 2011-03-20 22:29:48 EDT (Sun, 20 Mar 2011)
@@ -121,6 +121,7 @@
[import ../../example/this_va.cpp]
[import ../../example/params_all.cpp]
[import ../../example/params_all_va.cpp]
+[import ../../example/factorial_impl.cpp]
The Boost Local library implements local functions, local blocks, and local exits for the C++ programming language.
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk