diff options
Diffstat (limited to 'libs/phoenix/doc/html/phoenix/modules')
36 files changed, 5265 insertions, 0 deletions
diff --git a/libs/phoenix/doc/html/phoenix/modules/bind.html b/libs/phoenix/doc/html/phoenix/modules/bind.html new file mode 100644 index 0000000000..5ae628a60c --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind.html @@ -0,0 +1,80 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Bind</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="scope/lambda.html" title="lambda"> +<link rel="next" href="bind/binding_function_objects.html" title="Binding Function Objects"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="scope/lambda.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bind/binding_function_objects.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.bind"></a><a class="link" href="bind.html" title="Bind">Bind</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="bind/binding_function_objects.html">Binding + Function Objects</a></span></dt> +<dt><span class="section"><a href="bind/binding_functions.html">Binding Functions</a></span></dt> +<dt><span class="section"><a href="bind/binding_member_functions.html">Binding + Member Functions</a></span></dt> +<dt><span class="section"><a href="bind/binding_member_variables.html">Binding + Member Variables</a></span></dt> +<dt><span class="section"><a href="bind/compatibility_with_boost_bind.html">Compatibility + with Boost.Bind</a></span></dt> +</dl></div> +<p> + <span class="emphasis"><em>Binding</em></span> is the act of tying together a function to some + arguments for deferred (lazy) evaluation. Named <a class="link" href="function.html" title="Function">lazy + functions</a> require a bit of typing. Unlike (unnamed) lambda expressions, + we need to write a functor somewhere offline, detached from the call site. + If you wish to transform a plain function, member function or member variable + to a lambda expression, <code class="computeroutput"><span class="identifier">bind</span></code> + is your friend. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Take note that binding functions, member functions or member variables + is monomorphic. Rather than binding functions, the preferred way is to + write true generic and polymorphic <a class="link" href="function.html" title="Function">lazy + functions</a>. + </p></td></tr> +</table></div> +<p> + There is a set of overloaded <code class="computeroutput"><span class="identifier">bind</span></code> + template functions. Each <code class="computeroutput"><span class="identifier">bind</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> + function generates a suitable binder object. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="scope/lambda.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="bind/binding_function_objects.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/bind/binding_function_objects.html b/libs/phoenix/doc/html/phoenix/modules/bind/binding_function_objects.html new file mode 100644 index 0000000000..99e9b5ece0 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind/binding_function_objects.html @@ -0,0 +1,56 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binding Function Objects</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../bind.html" title="Bind"> +<link rel="prev" href="../bind.html" title="Bind"> +<link rel="next" href="binding_functions.html" title="Binding Functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../bind.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.bind.binding_function_objects"></a><a class="link" href="binding_function_objects.html" title="Binding Function Objects">Binding + Function Objects</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">bind</span><span class="special">/</span><span class="identifier">bind_function_object</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Binding function objects serves two purposes: * Partial function application + * Quick adaption of already existing function objects + </p> +<p> + In order to deduce the return type of the function object, it has to implement + the <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm#result_of" target="_top">Boost.Result + Of</a> protocol. If the bound function object is polymorphic, the resulting + binding object is polymorphic. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../bind.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/bind/binding_functions.html b/libs/phoenix/doc/html/phoenix/modules/bind/binding_functions.html new file mode 100644 index 0000000000..3242198701 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind/binding_functions.html @@ -0,0 +1,69 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binding Functions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../bind.html" title="Bind"> +<link rel="prev" href="binding_function_objects.html" title="Binding Function Objects"> +<link rel="next" href="binding_member_functions.html" title="Binding Member Functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_function_objects.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_member_functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.bind.binding_functions"></a><a class="link" href="binding_functions.html" title="Binding Functions">Binding Functions</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">bind</span><span class="special">/</span><span class="identifier">bind_function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Example, given a function <code class="computeroutput"><span class="identifier">foo</span></code>: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">)</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">n</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> +</pre> +<p> + Here's how the function <code class="computeroutput"><span class="identifier">foo</span></code> + may be bound: + </p> +<pre class="programlisting"><span class="identifier">bind</span><span class="special">(&</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)</span> +</pre> +<p> + This is now a full-fledged expression that can finally be evaluated by + another function call invocation. A second function call will invoke the + actual <code class="computeroutput"><span class="identifier">foo</span></code> function. Example: + </p> +<pre class="programlisting"><span class="identifier">bind</span><span class="special">(&</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)(</span><span class="number">4</span><span class="special">);</span> +</pre> +<p> + will print out "4". + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_function_objects.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_member_functions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_functions.html b/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_functions.html new file mode 100644 index 0000000000..3eb567d41c --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_functions.html @@ -0,0 +1,72 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binding Member Functions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../bind.html" title="Bind"> +<link rel="prev" href="binding_functions.html" title="Binding Functions"> +<link rel="next" href="binding_member_variables.html" title="Binding Member Variables"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_member_variables.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.bind.binding_member_functions"></a><a class="link" href="binding_member_functions.html" title="Binding Member Functions">Binding + Member Functions</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">bind</span><span class="special">/</span><span class="identifier">bind_member_function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Binding member functions can be done similarly. A bound member function + takes in a pointer or reference to an object as the first argument. For + instance, given: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">xyz</span> +<span class="special">{</span> + <span class="keyword">void</span> <span class="identifier">foo</span><span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">xyz</span></code>'s <code class="computeroutput"><span class="identifier">foo</span></code> + member function can be bound as: + </p> +<pre class="programlisting"><span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">obj</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)</span> <span class="comment">// obj is an xyz object</span> +</pre> +<p> + Take note that a lazy-member functions expects the first argument to be + a pointer or reference to an object. Both the object (reference or pointer) + and the arguments can be lazily bound. Examples: + </p> +<pre class="programlisting"><span class="identifier">xyz</span> <span class="identifier">obj</span><span class="special">;</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">foo</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="comment">// arg1.foo(arg2)</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">obj</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)</span> <span class="comment">// obj.foo(arg1)</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">obj</span><span class="special">,</span> <span class="number">100</span><span class="special">)</span> <span class="comment">// obj.foo(100)</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="binding_member_variables.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_variables.html b/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_variables.html new file mode 100644 index 0000000000..295fecc874 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind/binding_member_variables.html @@ -0,0 +1,74 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binding Member Variables</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../bind.html" title="Bind"> +<link rel="prev" href="binding_member_functions.html" title="Binding Member Functions"> +<link rel="next" href="compatibility_with_boost_bind.html" title="Compatibility with Boost.Bind"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_member_functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="compatibility_with_boost_bind.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.bind.binding_member_variables"></a><a class="link" href="binding_member_variables.html" title="Binding Member Variables">Binding + Member Variables</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">bind</span><span class="special">/</span><span class="identifier">bind_member_variable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Member variables can also be bound much like member functions. Member variables + are not functions. Yet, like the <a class="link" href="../core/references.html" title="References"><code class="computeroutput"><span class="identifier">ref</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code></a> + that acts like a nullary function returning a reference to the data, member + variables, when bound, act like a unary function, taking in a pointer or + reference to an object as its argument and returning a reference to the + bound member variable. For instance, given: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">xyz</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">v</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">v</span></code> can be bound as: + </p> +<pre class="programlisting"><span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">obj</span><span class="special">)</span> <span class="comment">// obj is an xyz object</span> +</pre> +<p> + As noted, just like the bound member function, a bound member variable + also expects the first (and only) argument to be a pointer or reference + to an object. The object (reference or pointer) can be lazily bound. Examples: + </p> +<pre class="programlisting"><span class="identifier">xyz</span> <span class="identifier">obj</span><span class="special">;</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)</span> <span class="comment">// arg1.v</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">obj</span><span class="special">)</span> <span class="comment">// obj.v</span> +<span class="identifier">bind</span><span class="special">(&</span><span class="identifier">xyz</span><span class="special">::</span><span class="identifier">v</span><span class="special">,</span> <span class="identifier">arg1</span><span class="special">)(</span><span class="identifier">obj</span><span class="special">)</span> <span class="special">=</span> <span class="number">4</span> <span class="comment">// obj.v = 4</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_member_functions.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="compatibility_with_boost_bind.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/bind/compatibility_with_boost_bind.html b/libs/phoenix/doc/html/phoenix/modules/bind/compatibility_with_boost_bind.html new file mode 100644 index 0000000000..706047fa4f --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/bind/compatibility_with_boost_bind.html @@ -0,0 +1,52 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Compatibility with Boost.Bind</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../bind.html" title="Bind"> +<link rel="prev" href="binding_member_variables.html" title="Binding Member Variables"> +<link rel="next" href="../stl.html" title="STL"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_member_variables.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../stl.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.bind.compatibility_with_boost_bind"></a><a class="link" href="compatibility_with_boost_bind.html" title="Compatibility with Boost.Bind">Compatibility + with Boost.Bind</a> +</h4></div></div></div> +<p> + <code class="computeroutput"><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">bind</span></code> passes all testcases of the Boost.Bind + library. It is therefore completely compatible and interchangeable. + </p> +<p> + Given the compatibility with Boost.Bind, we also assume compatibility with + std::tr1::bind and std::bind from the upcoming C++0x standard. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="binding_member_variables.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../bind.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../stl.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/core.html b/libs/phoenix/doc/html/phoenix/modules/core.html new file mode 100644 index 0000000000..aa41232536 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/core.html @@ -0,0 +1,59 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Core</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="../modules.html" title="Modules"> +<link rel="next" href="core/values.html" title="Values"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../modules.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="core/values.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.core"></a><a class="link" href="core.html" title="Core">Core</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="core/values.html">Values</a></span></dt> +<dt><span class="section"><a href="core/references.html">References</a></span></dt> +<dt><span class="section"><a href="core/arguments.html">Arguments</a></span></dt> +<dt><span class="section"><a href="core/nothing.html">Nothing</a></span></dt> +</dl></div> +<p> + Actors are composed to create more complex actors in a tree-like hierarchy. + The primitives are atomic entities that are like the leaves in the tree. + Phoenix is extensible. New primitives can be added anytime. Right out of + the box, there are only a few primitives, these are all defined in the Core + module. + </p> +<p> + This section shall deal with these preset primitives. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../modules.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="core/values.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/core/arguments.html b/libs/phoenix/doc/html/phoenix/modules/core/arguments.html new file mode 100644 index 0000000000..991dd926a7 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/core/arguments.html @@ -0,0 +1,194 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Arguments</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../core.html" title="Core"> +<link rel="prev" href="references.html" title="References"> +<link rel="next" href="nothing.html" title="Nothing"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="references.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nothing.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.core.arguments"></a><a class="link" href="arguments.html" title="Arguments">Arguments</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">argument</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + We use an instance of: + </p> +<pre class="programlisting"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="identifier">N</span><span class="special">>::</span><span class="identifier">type</span> +</pre> +<p> + to represent the Nth function argument. The argument placeholder acts as + an imaginary data-bin where a function argument will be placed. + </p> +<h6> +<a name="phoenix.modules.core.arguments.h0"></a> + <span><a name="phoenix.modules.core.arguments.predefined_arguments"></a></span><a class="link" href="arguments.html#phoenix.modules.core.arguments.predefined_arguments">Predefined + Arguments</a> + </h6> +<p> + There are a few predefined instances of <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="identifier">N</span><span class="special">>::</span><span class="identifier">type</span></code> + named <code class="computeroutput"><span class="identifier">arg1</span></code>..<code class="computeroutput"><span class="identifier">argN</span></code>, and its <a href="http://www.boost.org/libs/lambda/doc/index.html" target="_top">BLL</a> + counterpart <code class="computeroutput"><span class="identifier">_1</span></code>..<code class="computeroutput"><span class="identifier">_N</span></code>. (where N is a predefined maximum). + </p> +<p> + Here are some sample preset definitions of <code class="computeroutput"><span class="identifier">arg1</span></code>..<code class="computeroutput"><span class="identifier">argN</span></code> + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">placeholders</span> +<span class="special">{</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">1</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">arg1</span> <span class="special">=</span> <span class="special">{};</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">2</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">arg2</span> <span class="special">=</span> <span class="special">{};</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">3</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">arg3</span> <span class="special">=</span> <span class="special">{};</span> +<span class="special">}</span> +</pre> +<p> + and its <a href="http://www.boost.org/libs/lambda/doc/index.html" target="_top">BLL</a> + <code class="computeroutput"><span class="identifier">_1</span></code>..<code class="computeroutput"><span class="identifier">_N</span></code> + style counterparts: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">placeholders</span> +<span class="special">{</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">1</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">_1</span> <span class="special">=</span> <span class="special">{};</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">2</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">_2</span> <span class="special">=</span> <span class="special">{};</span> + <span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">3</span><span class="special">>::</span><span class="identifier">type</span> <span class="keyword">const</span> <span class="identifier">_3</span> <span class="special">=</span> <span class="special">{};</span> +<span class="special">}</span> +</pre> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + You can set <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ARG_LIMIT</span></code>, + the predefined maximum placeholder index. By default, <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ARG_LIMIT</span></code> + is set to <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LIMIT</span></code> + (See <a class="link" href="../../actor.html" title="Actor">Actor</a>). + </p></td></tr> +</table></div> +<h6> +<a name="phoenix.modules.core.arguments.h1"></a> + <span><a name="phoenix.modules.core.arguments.user_defined_arguments"></a></span><a class="link" href="arguments.html#phoenix.modules.core.arguments.user_defined_arguments">User Defined + Arguments</a> + </h6> +<p> + When appropriate, you can define your own <code class="computeroutput"><span class="identifier">argument</span></code> + names. For example: + </p> +<pre class="programlisting"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">argument</span><span class="special"><</span><span class="number">1</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">x</span><span class="special">;</span> <span class="comment">// note one based index</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">x</span></code> may now be used as a + parameter to a lazy function: + </p> +<pre class="programlisting"><span class="identifier">add</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="number">6</span><span class="special">)</span> +</pre> +<p> + which is equivalent to: + </p> +<pre class="programlisting"><span class="identifier">add</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="number">6</span><span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.core.arguments.h2"></a> + <span><a name="phoenix.modules.core.arguments.evaluating_an_argument"></a></span><a class="link" href="arguments.html#phoenix.modules.core.arguments.evaluating_an_argument">Evaluating + an Argument</a> + </h6> +<p> + An argument, when evaluated, selects the Nth argument from the those passed + in by the client. + </p> +<p> + For example: + </p> +<pre class="programlisting"><span class="keyword">char</span> <span class="identifier">c</span> <span class="special">=</span> <span class="char">'A'</span><span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">123</span><span class="special">;</span> +<span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">s</span> <span class="special">=</span> <span class="string">"Hello World"</span><span class="special">;</span> + +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Get the 1st argument: c</span> +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">s</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Get the 1st argument: i</span> +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg2</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">s</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Get the 2nd argument: s</span> +</pre> +<p> + will print out: + </p> +<pre class="programlisting"><span class="identifier">A</span> +<span class="number">123</span> +<span class="identifier">Hello</span> <span class="identifier">World</span> +</pre> +<h6> +<a name="phoenix.modules.core.arguments.h3"></a> + <span><a name="phoenix.modules.core.arguments.extra_arguments"></a></span><a class="link" href="arguments.html#phoenix.modules.core.arguments.extra_arguments">Extra + Arguments</a> + </h6> +<p> + In C and C++, a function can have extra arguments that are not at all used + by the function body itself. These extra arguments are simply ignored. + </p> +<p> + Phoenix also allows extra arguments to be passed. For example, recall our + original <code class="computeroutput"><span class="identifier">add</span></code> function: + </p> +<pre class="programlisting"><span class="identifier">add</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">)</span> +</pre> +<p> + We know now that partially applying this function results to a function + that expects 2 arguments. However, the library is a bit more lenient and + allows the caller to supply more arguments than is actually required. Thus, + <code class="computeroutput"><span class="identifier">add</span></code> actually allows 2 + <span class="emphasis"><em>or more</em></span> arguments. For instance, with: + </p> +<pre class="programlisting"><span class="identifier">add</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="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">z</span><span class="special">)</span> +</pre> +<p> + the third argument <code class="computeroutput"><span class="identifier">z</span></code> is + ignored. Taking this further, in-between arguments are also ignored. Example: + </p> +<pre class="programlisting"><span class="identifier">add</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg5</span><span class="special">)(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">e</span><span class="special">)</span> +</pre> +<p> + Here, arguments b, c, and d are ignored. The function <code class="computeroutput"><span class="identifier">add</span></code> + takes in the first argument (<code class="computeroutput"><span class="identifier">arg1</span></code>) + and the fifth argument (<code class="computeroutput"><span class="identifier">arg5</span></code>). + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + There are a few reasons why enforcing strict arity is not desirable. + A case in point is the callback function. Typical callback functions + provide more information than is actually needed. Lambda functions are + often used as callbacks. + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="references.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="nothing.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/core/nothing.html b/libs/phoenix/doc/html/phoenix/modules/core/nothing.html new file mode 100644 index 0000000000..4b5d83cdcb --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/core/nothing.html @@ -0,0 +1,52 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Nothing</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../core.html" title="Core"> +<link rel="prev" href="arguments.html" title="Arguments"> +<link rel="next" href="../function.html" title="Function"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="arguments.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../function.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.core.nothing"></a><a class="link" href="nothing.html" title="Nothing">Nothing</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">nothing</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Finally, the <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">null</span><span class="special"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">void_</span><span class="special">>::</span><span class="identifier">type</span></code> + does nothing; (a "bum", if you will :-) ). There's a sole <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">null</span><span class="special"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">void_</span><span class="special">>::</span><span class="identifier">type</span></code> instance named "nothing". + This actor is actually useful in situations where we don't want to do anything. + (See <a class="link" href="../statement/for_statement.html" title="for_ Statement">for_ Statement</a> + for example). + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="arguments.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../function.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/core/references.html b/libs/phoenix/doc/html/phoenix/modules/core/references.html new file mode 100644 index 0000000000..a1b13ee87b --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/core/references.html @@ -0,0 +1,116 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>References</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../core.html" title="Core"> +<link rel="prev" href="values.html" title="Values"> +<link rel="next" href="arguments.html" title="Arguments"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="values.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="arguments.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.core.references"></a><a class="link" href="references.html" title="References">References</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">reference</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Values are immutable constants. Attempting to modify a value will result + in a compile time error. When we want the function to modify the parameter, + we use a reference instead. For instance, imagine a lazy function <code class="computeroutput"><span class="identifier">add_assign</span></code>: + </p> +<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">add_assign</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">{</span> <span class="identifier">x</span> <span class="special">+=</span> <span class="identifier">y</span><span class="special">;</span> <span class="special">}</span> <span class="comment">// pseudo code</span> +</pre> +<p> + Here, we want the first function argument, x, to be mutable. Obviously, + we cannot write: + </p> +<pre class="programlisting"><span class="identifier">add_assign</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="comment">// error first argument is immutable</span> +</pre> +<p> + In C++, we can pass in a reference to a variable as the first argument + in our example above. Yet, by default, the library forces arguments passed + to partially applied functions to be immutable values (see <a class="link" href="values.html" title="Values">Values</a>). + To achieve our intent, we use: + </p> +<pre class="programlisting"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> +</pre> +<p> + This is similar to <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> + before but instead holds a reference to a variable. + </p> +<p> + We normally don't instantiate <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">reference</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> + objects directly. Instead we use: + </p> +<pre class="programlisting"><span class="identifier">ref</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> +</pre> +<p> + For example (where <code class="computeroutput"><span class="identifier">i</span></code> is + an <code class="computeroutput"><span class="keyword">int</span></code> variable): + </p> +<pre class="programlisting"><span class="identifier">add_assign</span><span class="special">(</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">i</span><span class="special">),</span> <span class="number">2</span><span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.core.references.h0"></a> + <span><a name="phoenix.modules.core.references.evaluating_a_reference"></a></span><a class="link" href="references.html#phoenix.modules.core.references.evaluating_a_reference">Evaluating + a Reference</a> + </h6> +<p> + References are actors. Hence, references can be evaluated. Such invocation + gives the reference's identity. Example: + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> +<span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">s</span> <span class="special">=</span> <span class="string">"Hello World"</span><span class="special">;</span> +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">ref</span><span class="special">(</span><span class="identifier">i</span><span class="special">)()</span> <span class="special"><<</span> <span class="identifier">ref</span><span class="special">(</span><span class="identifier">s</span><span class="special">)();</span> +</pre> +<p> + prints out "3 Hello World" + </p> +<h6> +<a name="phoenix.modules.core.references.h1"></a> + <span><a name="phoenix.modules.core.references.constant_references"></a></span><a class="link" href="references.html#phoenix.modules.core.references.constant_references">Constant + References</a> + </h6> +<p> + Another free function + </p> +<pre class="programlisting"><span class="identifier">cref</span><span class="special">(</span><span class="identifier">cv</span><span class="special">)</span> +</pre> +<p> + may also be used. <code class="computeroutput"><span class="identifier">cref</span><span class="special">(</span><span class="identifier">cv</span><span class="special">)</span></code> + creates an <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">reference</span><span class="special"><</span><span class="identifier">T</span> <span class="keyword">const</span><span class="special">>::</span><span class="identifier">type</span></code> + object. This is similar to <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> + but when the data to be passed as argument to a function is heavy and expensive + to copy by value, the <code class="computeroutput"><span class="identifier">cref</span><span class="special">(</span><span class="identifier">cv</span><span class="special">)</span></code> + offers a lighter alternative. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="values.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="arguments.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/core/values.html b/libs/phoenix/doc/html/phoenix/modules/core/values.html new file mode 100644 index 0000000000..38b9964205 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/core/values.html @@ -0,0 +1,84 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Values</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../core.html" title="Core"> +<link rel="prev" href="../core.html" title="Core"> +<link rel="next" href="references.html" title="References"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../core.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="references.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.core.values"></a><a class="link" href="values.html" title="Values">Values</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Whenever we see a constant in a partially applied function, an + </p> +<pre class="programlisting"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span> +</pre> +<p> + (where T is the type of the constant) is automatically created for us. + For instance: + </p> +<pre class="programlisting"><span class="identifier">add</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="number">6</span><span class="special">)</span> +</pre> +<p> + Passing a second argument, <code class="computeroutput"><span class="number">6</span></code>, + an <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> is implicitly created behind the + scenes. This is also equivalent to <code class="computeroutput"><span class="identifier">add</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">val</span><span class="special">(</span><span class="number">6</span><span class="special">))</span></code>. + </p> +<pre class="programlisting"><span class="identifier">val</span><span class="special">(</span><span class="identifier">v</span><span class="special">)</span> +</pre> +<p> + generates an <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">value</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span></code> + where <code class="computeroutput"><span class="identifier">T</span></code> is the type of + <code class="computeroutput"><span class="identifier">x</span></code>. In most cases, there's + no need to explicitly use <code class="computeroutput"><span class="identifier">val</span></code>, + but, as we'll see later on, there are situations where this is unavoidable. + </p> +<h3> +<a name="phoenix.modules.core.values.h0"></a> + <span><a name="phoenix.modules.core.values.evaluating_a_value"></a></span><a class="link" href="values.html#phoenix.modules.core.values.evaluating_a_value">Evaluating + a Value</a> + </h3> +<p> + Like arguments, values are also actors. As such, values can be evaluated. + Invoking a value gives the value's identity. Example: + </p> +<pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="number">3</span><span class="special">)()</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"Hello World"</span><span class="special">)();</span> +</pre> +<p> + prints out "3 Hello World". + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../core.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../core.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="references.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/function.html b/libs/phoenix/doc/html/phoenix/modules/function.html new file mode 100644 index 0000000000..c9a0a40612 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/function.html @@ -0,0 +1,150 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Function</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="core/nothing.html" title="Nothing"> +<link rel="next" href="function/adapting_functions.html" title="Adapting Functions"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="core/nothing.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="function/adapting_functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.function"></a><a class="link" href="function.html" title="Function">Function</a> +</h3></div></div></div> +<div class="toc"><dl><dt><span class="section"><a href="function/adapting_functions.html">Adapting + Functions</a></span></dt></dl></div> +<p> + The <code class="computeroutput"><span class="identifier">function</span></code> class template + provides a mechanism for implementing lazily evaluated functions. Syntactically, + a lazy function looks like an ordinary C/C++ function. The function call + looks familiar and feels the same as ordinary C++ functions. However, unlike + ordinary functions, the actual function execution is deferred. + </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">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Unlike ordinary function pointers or functor objects that need to be explicitly + bound through the bind function (see <a class="link" href="bind.html" title="Bind">Bind</a>), + the argument types of these functions are automatically lazily bound. + </p> +<p> + In order to create a lazy function, we need to implement a model of the + <a href="http://www.boost.org/doc/libs/release/libs/fusion/doc/html/fusion/functional/concepts/poly.html" target="_top">Polymorphic + Function Object</a> concept. For a function that takes <code class="computeroutput"><span class="identifier">N</span></code> arguments, a model of <a href="http://www.boost.org/doc/libs/release/libs/fusion/doc/html/fusion/functional/concepts/poly.html" target="_top">Polymorphic + Function Object</a> must provide: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + An <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> + that takes <code class="computeroutput"><span class="identifier">N</span></code> arguments, + and implements the function logic. This is also true for ordinary function + pointers. + </li> +<li class="listitem"> + A nested metafunction <code class="computeroutput"><span class="identifier">result</span><span class="special"><</span><span class="identifier">Signature</span><span class="special">></span></code> or nested typedef <code class="computeroutput"><span class="identifier">result_type</span></code>, + following the <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm#result_of" target="_top">Boost.Result + Of</a> Protocol + </li> +</ul></div> +<p> + For example, the following type implements the FunctionEval concept, in order + to provide a lazy factorial function: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">factorial_impl</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Sig</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">;</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Arg</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span><span class="special"><</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">Arg</span> <span class="keyword">const</span> <span class="special">&)></span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="identifier">Arg</span> <span class="identifier">type</span><span class="special">;</span> + <span class="special">};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Arg</span><span class="special">></span> + <span class="identifier">Arg</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">Arg</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">n</span><span class="special">)</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="special">(</span><span class="identifier">n</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">n</span> <span class="special">*</span> <span class="special">(*</span><span class="keyword">this</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="special">}</span> +<span class="special">};</span> +</pre> +<p> + (See <a href="../../../../example/factorial.cpp" target="_top">factorial.cpp</a>) + </p> +<p> + Having implemented the <code class="computeroutput"><span class="identifier">factorial_impl</span></code> + type, we can declare and instantiate a lazy <code class="computeroutput"><span class="identifier">factorial</span></code> + function this way: + </p> +<pre class="programlisting"><span class="identifier">function</span><span class="special"><</span><span class="identifier">factorial_impl</span><span class="special">></span> <span class="identifier">factorial</span><span class="special">;</span> +</pre> +<p> + Invoking a lazy function such as <code class="computeroutput"><span class="identifier">factorial</span></code> + does not immediately execute the function object <code class="computeroutput"><span class="identifier">factorial_impl</span></code>. + Instead, an <a class="link" href="../actor.html" title="Actor">actor</a> object is created + and returned to the caller. Example: + </p> +<pre class="programlisting"><span class="identifier">factorial</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span> +</pre> +<p> + does nothing more than return an actor. A second function call will invoke + the actual factorial function. Example: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">factorial</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)(</span><span class="number">4</span><span class="special">);</span> +</pre> +<p> + will print out "24". + </p> +<p> + Take note that in certain cases (e.g. for function objects with state), an + instance of the model of <a href="http://www.boost.org/doc/libs/release/libs/fusion/doc/html/fusion/functional/concepts/poly.html" target="_top">Polymorphic + Function Object</a> may be passed on to the constructor. Example: + </p> +<pre class="programlisting"><span class="identifier">function</span><span class="special"><</span><span class="identifier">factorial_impl</span><span class="special">></span> <span class="identifier">factorial</span><span class="special">(</span><span class="identifier">ftor</span><span class="special">);</span> +</pre> +<p> + where ftor is an instance of factorial_impl (this is not necessary in this + case as <code class="computeroutput"><span class="identifier">factorial_impl</span></code> does + not require any state). + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../../doc/src/images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Take care though when using function objects with state because they are + often copied repeatedly, and state may change in one of the copies, rather + than the original. + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="core/nothing.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="function/adapting_functions.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/function/adapting_functions.html b/libs/phoenix/doc/html/phoenix/modules/function/adapting_functions.html new file mode 100644 index 0000000000..1263a0afb6 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/function/adapting_functions.html @@ -0,0 +1,370 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Adapting Functions</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../function.html" title="Function"> +<link rel="prev" href="../function.html" title="Function"> +<link rel="next" href="../operator.html" title="Operator"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../function.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../operator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.function.adapting_functions"></a><a class="link" href="adapting_functions.html" title="Adapting Functions">Adapting + Functions</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary">BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY</a></span></dt> +<dt><span class="section"><a href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function">BOOST_PHOENIX_ADAPT_FUNCTION</a></span></dt> +<dt><span class="section"><a href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary">BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY</a></span></dt> +<dt><span class="section"><a href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable">BOOST_PHOENIX_ADAPT_CALLABLE</a></span></dt> +</dl></div> +<p> + If you want to adapt already existing functions or function objects it + will become a repetetive task. Therefor the following boilerplate macros + are provided to help you adapt already exsiting functions, thus reducing + the need to <a class="link" href="../bind.html" title="Bind">phoenix.modules.bind</a> + functions. + </p> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary"></a><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary" title="BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY">BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY</a> +</h5></div></div></div> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.h0"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.description"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.description">Description</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY</span></code> + is a macro that can be used to generate all the necessary boilerplate + to make an arbitrary nullary function a lazy function. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + These macros generate no global objects. The resulting lazy functions + are real functions that create the lazy function expression object + </p></td></tr> +</table></div> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.h1"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.synopsis"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY</span><span class="special">(</span> + <span class="identifier">RETURN_TYPE</span> + <span class="special">,</span> <span class="identifier">LAZY_FUNCTION</span> + <span class="special">,</span> <span class="identifier">FUNCTION</span> +<span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.h2"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.semantics"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.semantics">Semantics</a> + </h6> +<p> + The above macro generates all necessary code to have a nullary lazy function + <code class="computeroutput"><span class="identifier">LAZY_FUNCTION</span></code> which calls + the nullary <code class="computeroutput"><span class="identifier">FUNCTION</span></code> + that has the return type <code class="computeroutput"><span class="identifier">RETURN_TYPE</span></code> + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.h3"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.header"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.header">Header</a> + </h6> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">/</span><span class="identifier">adapt_function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.h4"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.example"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function_nullary.example">Example</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">demo</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">foo</span><span class="special">()</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="number">42</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION_NULLARY</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">foo</span><span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">foo</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="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">placeholders</span><span class="special">::</span><span class="identifier">_1</span><span class="special">;</span> + + <span class="identifier">assert</span><span class="special">((</span><span class="identifier">_1</span> <span class="special">+</span> <span class="identifier">foo</span><span class="special">())(</span><span class="number">1</span><span class="special">)</span> <span class="special">==</span> <span class="number">43</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function"></a><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function" title="BOOST_PHOENIX_ADAPT_FUNCTION">BOOST_PHOENIX_ADAPT_FUNCTION</a> +</h5></div></div></div> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.h0"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.description"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.description">Description</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION</span></code> + is a macro that can be used to generate all the necessary boilerplate + to make an arbitrary function a lazy function. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.h1"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.synopsis"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION</span><span class="special">(</span> + <span class="identifier">RETURN_TYPE</span> + <span class="special">,</span> <span class="identifier">LAZY_FUNCTION</span> + <span class="special">,</span> <span class="identifier">FUNCTION</span> + <span class="special">,</span> <span class="identifier">FUNCTION_ARITY</span> +<span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.h2"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.semantics"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.semantics">Semantics</a> + </h6> +<p> + The above macro generates all necessary code to have a lazy function + <code class="computeroutput"><span class="identifier">LAZY_FUNCTION</span></code> which calls + <code class="computeroutput"><span class="identifier">FUNCTION</span></code> that has the + return type <code class="computeroutput"><span class="identifier">RETURN_TYPE</span></code> + with <code class="computeroutput"><span class="identifier">FUNCTION_ARITY</span></code> number + of arguments. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.h3"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.header"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.header">Header</a> + </h6> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">/</span><span class="identifier">adapt_function</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.h4"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.example"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_function.example">Example</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">demo</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">plus</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">b</span><span class="special">)</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span><span class="special">;</span> + <span class="special">}</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> + <span class="identifier">T</span> + <span class="identifier">plus</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">c</span><span class="special">)</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span> <span class="special">+</span> <span class="identifier">c</span><span class="special">;</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">plus</span><span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">plus</span><span class="special">,</span> <span class="number">2</span><span class="special">)</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_FUNCTION</span><span class="special">(</span> + <span class="keyword">typename</span> <span class="identifier">remove_reference</span><span class="special"><</span><span class="identifier">A0</span><span class="special">>::</span><span class="identifier">type</span> + <span class="special">,</span> <span class="identifier">plus</span> + <span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">plus</span> + <span class="special">,</span> <span class="number">3</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="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg1</span><span class="special">;</span> + <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg2</span><span class="special">;</span> + + <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">123</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">256</span><span class="special">;</span> + + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">plus</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="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">);</span> + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">plus</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="number">3</span><span class="special">)(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">+</span><span class="number">3</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary"></a><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary" title="BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY">BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY</a> +</h5></div></div></div> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.h0"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.description"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.description">Description</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY</span></code> + is a macro that can be used to generate all the necessary boilerplate + to make an arbitrary nullary function object a lazy function. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.h1"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.synopsis"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY</span><span class="special">(</span> + <span class="identifier">LAZY_FUNCTION</span> + <span class="special">,</span> <span class="identifier">CALLABLE</span> +<span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.h2"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.semantics"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.semantics">Semantics</a> + </h6> +<p> + The above macro generates all necessary code to create <code class="computeroutput"><span class="identifier">LAZY_FUNCTION</span></code> which creates a lazy + function object that represents a nullary call to <code class="computeroutput"><span class="identifier">CALLABLE</span></code>. + The return type is specified by <code class="computeroutput"><span class="identifier">CALLABLE</span></code> + conforming to the <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm#result_of" target="_top">Boost.Result + Of</a> protocol. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.h3"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.header"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.header">Header</a> + </h6> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">/</span><span class="identifier">adapt_callable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.h4"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.example"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable_nullary.example">Example</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">demo</span> +<span class="special">{</span> + <span class="keyword">struct</span> <span class="identifier">foo</span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="keyword">int</span> <span class="identifier">result_type</span><span class="special">;</span> + + <span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()()</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="number">42</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">}</span> +<span class="special">}</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE_NULLARY</span><span class="special">(</span><span class="identifier">foo</span><span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">foo</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="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">placeholders</span><span class="special">::</span><span class="identifier">_1</span><span class="special">;</span> + + <span class="identifier">assert</span><span class="special">((</span><span class="identifier">_1</span> <span class="special">+</span> <span class="identifier">foo</span><span class="special">())(</span><span class="number">1</span><span class="special">)</span> <span class="special">==</span> <span class="number">43</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable"></a><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable" title="BOOST_PHOENIX_ADAPT_CALLABLE">BOOST_PHOENIX_ADAPT_CALLABLE</a> +</h5></div></div></div> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.h0"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.description"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.description">Description</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE</span></code> + is a macro that can be used to generate all the necessary boilerplate + to make an arbitrary function object a lazy function. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.h1"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.synopsis"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE</span><span class="special">(</span> + <span class="identifier">LAZY_FUNCTION</span> + <span class="special">,</span> <span class="identifier">FUNCTION_NAME</span> + <span class="special">,</span> <span class="identifier">FUNCTION_ARITY</span> +<span class="special">)</span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.h2"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.semantics"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.semantics">Semantics</a> + </h6> +<p> + The above macro generates all necessary code to create <code class="computeroutput"><span class="identifier">LAZY_FUNCTION</span></code> which creates a lazy + function object that represents a call to <code class="computeroutput"><span class="identifier">CALLABLE</span></code> + with <code class="computeroutput"><span class="identifier">FUNCTION_ARITY</span></code> arguments. + The return type is specified by <code class="computeroutput"><span class="identifier">CALLABLE</span></code> + conforming to the <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm#result_of" target="_top">Boost.Result + Of</a> protocol. + </p> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.h3"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.header"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.header">Header</a> + </h6> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">function</span><span class="special">/</span><span class="identifier">adapt_callable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<h6> +<a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.h4"></a> + <span><a name="phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.example"></a></span><a class="link" href="adapting_functions.html#phoenix.modules.function.adapting_functions.boost_phoenix_adapt_callable.example">Example</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">demo</span> +<span class="special">{</span> + <span class="keyword">struct</span> <span class="identifier">plus</span> + <span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Sig</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span><span class="special">;</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span><span class="special"><</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">A0</span><span class="special">,</span> <span class="identifier">A1</span><span class="special">)></span> + <span class="special">:</span> <span class="identifier">remove_reference</span><span class="special"><</span><span class="identifier">A0</span><span class="special">></span> + <span class="special">{};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">This</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A2</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span><span class="special"><</span><span class="identifier">This</span><span class="special">(</span><span class="identifier">A0</span><span class="special">,</span> <span class="identifier">A1</span><span class="special">,</span> <span class="identifier">A2</span><span class="special">)></span> + <span class="special">:</span> <span class="identifier">remove_reference</span><span class="special"><</span><span class="identifier">A0</span><span class="special">></span> + <span class="special">{};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">></span> + <span class="identifier">A0</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">A0</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">a0</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">a1</span><span class="special">)</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">a0</span> <span class="special">+</span> <span class="identifier">a1</span><span class="special">;</span> + <span class="special">}</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">A0</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A2</span><span class="special">></span> + <span class="identifier">A0</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">A0</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">a0</span><span class="special">,</span> <span class="identifier">A1</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">a1</span><span class="special">,</span> <span class="identifier">A2</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">a2</span><span class="special">)</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">a0</span> <span class="special">+</span> <span class="identifier">a1</span> <span class="special">+</span> <span class="identifier">a2</span><span class="special">;</span> + <span class="special">}</span> + <span class="special">};</span> +<span class="special">}</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE</span><span class="special">(</span><span class="identifier">plus</span><span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">plus</span><span class="special">,</span> <span class="number">2</span><span class="special">)</span> + +<span class="identifier">BOOST_PHOENIX_ADAPT_CALLABLE</span><span class="special">(</span><span class="identifier">plus</span><span class="special">,</span> <span class="identifier">demo</span><span class="special">::</span><span class="identifier">plus</span><span class="special">,</span> <span class="number">3</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="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg1</span><span class="special">;</span> + <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">arg_names</span><span class="special">::</span><span class="identifier">arg2</span><span class="special">;</span> + + <span class="keyword">int</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">123</span><span class="special">;</span> + <span class="keyword">int</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">256</span><span class="special">;</span> + + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">plus</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="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">);</span> + <span class="identifier">assert</span><span class="special">(</span><span class="identifier">plus</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="number">3</span><span class="special">)(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">+</span><span class="number">3</span><span class="special">);</span> +<span class="special">}</span> +</pre> +</div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../function.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../function.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../operator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/object.html b/libs/phoenix/doc/html/phoenix/modules/object.html new file mode 100644 index 0000000000..a4dd9e4686 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/object.html @@ -0,0 +1,55 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Object</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="statement/throw_.html" title="throw_"> +<link rel="next" href="object/construction.html" title="Construction"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="statement/throw_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="object/construction.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.object"></a><a class="link" href="object.html" title="Object">Object</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="object/construction.html">Construction</a></span></dt> +<dt><span class="section"><a href="object/new.html">New</a></span></dt> +<dt><span class="section"><a href="object/delete.html">Delete</a></span></dt> +<dt><span class="section"><a href="object/casts.html">Casts</a></span></dt> +</dl></div> +<p> + The Object module deals with object construction, destruction and conversion. + The module provides <span class="emphasis"><em>"lazy"</em></span> versions of C++'s + object constructor, <code class="computeroutput"><span class="keyword">new</span></code>, <code class="computeroutput"><span class="keyword">delete</span></code>, <code class="computeroutput"><span class="keyword">static_cast</span></code>, + <code class="computeroutput"><span class="keyword">dynamic_cast</span></code>, <code class="computeroutput"><span class="keyword">const_cast</span></code> and <code class="computeroutput"><span class="keyword">reinterpret_cast</span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="statement/throw_.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="object/construction.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/object/casts.html b/libs/phoenix/doc/html/phoenix/modules/object/casts.html new file mode 100644 index 0000000000..1e3fd89257 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/object/casts.html @@ -0,0 +1,71 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Casts</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../object.html" title="Object"> +<link rel="prev" href="delete.html" title="Delete"> +<link rel="next" href="../scope.html" title="Scope"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="delete.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../scope.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.object.casts"></a><a class="link" href="casts.html" title="Casts">Casts</a> +</h4></div></div></div> +<p> + <span class="bold"><strong><span class="emphasis"><em>Lazy casts...</em></span></strong></span> + </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">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">static_cast</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">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">dynamic_cast</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">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">const_cast</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">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">reinterpret_cast</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The set of lazy C++ cast template functions provide a way of lazily casting + an object of a certain type to another type. The syntax resembles the well + known C++ casts. Take note however that the lazy versions have a trailing + underscore. + </p> +<pre class="programlisting"><span class="identifier">static_cast_</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">lambda_expression</span><span class="special">)</span> +<span class="identifier">dynamic_cast_</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">lambda_expression</span><span class="special">)</span> +<span class="identifier">const_cast_</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">lambda_expression</span><span class="special">)</span> +<span class="identifier">reinterpret_cast_</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">lambda_expression</span><span class="special">)</span> +</pre> +<p> + Example: + </p> +<pre class="programlisting"><span class="identifier">static_cast_</span><span class="special"><</span><span class="identifier">Base</span><span class="special">*>(&</span><span class="identifier">arg1</span><span class="special">)</span> +</pre> +<p> + Static-casts the address of <code class="computeroutput"><span class="identifier">arg1</span></code> + to a <code class="computeroutput"><span class="identifier">Base</span><span class="special">*</span></code>. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="delete.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../scope.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/object/construction.html b/libs/phoenix/doc/html/phoenix/modules/object/construction.html new file mode 100644 index 0000000000..1fbcb63256 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/object/construction.html @@ -0,0 +1,80 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Construction</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../object.html" title="Object"> +<link rel="prev" href="../object.html" title="Object"> +<link rel="next" href="new.html" title="New"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../object.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="new.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.object.construction"></a><a class="link" href="construction.html" title="Construction">Construction</a> +</h4></div></div></div> +<p> + <span class="bold"><strong><span class="emphasis"><em>Lazy constructors...</em></span></strong></span> + </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">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="identifier">construct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Lazily construct an object from an arbitrary set of arguments: + </p> +<pre class="programlisting"><span class="identifier">construct</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">ctor_arg1</span><span class="special">,</span> <span class="identifier">ctor_arg2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">ctor_argN</span><span class="special">);</span> +</pre> +<p> + where the given parameters are the parameters to the constructor of the + object of type T (This implies, that type T is expected to have a constructor + with a corresponding set of parameter types.). + </p> +<p> + Example: + </p> +<pre class="programlisting"><span class="identifier">construct</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">)</span> +</pre> +<p> + Constructs a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> from <code class="computeroutput"><span class="identifier">arg1</span></code> + and <code class="computeroutput"><span class="identifier">arg2</span></code>. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The maximum number of actual parameters is limited by the preprocessor + constant BOOST_PHOENIX_COMPOSITE_LIMIT. Note though, that this limit + should not be greater than BOOST_PHOENIX_LIMIT. By default, <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_COMPOSITE_LIMIT</span></code> is set + to <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LIMIT</span></code> + (See <a class="link" href="../../actor.html" title="Actor">Actor</a>). + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../object.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="new.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/object/delete.html b/libs/phoenix/doc/html/phoenix/modules/object/delete.html new file mode 100644 index 0000000000..72a9a27bcd --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/object/delete.html @@ -0,0 +1,61 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Delete</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../object.html" title="Object"> +<link rel="prev" href="new.html" title="New"> +<link rel="next" href="casts.html" title="Casts"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="new.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="casts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.object.delete"></a><a class="link" href="delete.html" title="Delete">Delete</a> +</h4></div></div></div> +<p> + <span class="bold"><strong><span class="emphasis"><em>Lazy delete...</em></span></strong></span> + </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">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">delete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Lazily delete an object, from the heap: + </p> +<pre class="programlisting"><span class="identifier">delete_</span><span class="special">(</span><span class="identifier">arg</span><span class="special">);</span> +</pre> +<p> + where arg is assumed to be a pointer to an object. + </p> +<p> + Example: + </p> +<pre class="programlisting"><span class="identifier">delete_</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>(</span><span class="identifier">arg1</span><span class="special">)</span> <span class="comment">// note the spelling of delete_ (with trailing underscore)</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="new.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="casts.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/object/new.html b/libs/phoenix/doc/html/phoenix/modules/object/new.html new file mode 100644 index 0000000000..1e1cc94386 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/object/new.html @@ -0,0 +1,80 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>New</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../object.html" title="Object"> +<link rel="prev" href="construction.html" title="Construction"> +<link rel="next" href="delete.html" title="Delete"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="construction.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="delete.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.object.new"></a><a class="link" href="new.html" title="New">New</a> +</h4></div></div></div> +<p> + <span class="bold"><strong><span class="emphasis"><em>Lazy new...</em></span></strong></span> + </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">phoenix</span><span class="special">/</span><span class="identifier">object</span><span class="special">/</span><span class="keyword">new</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Lazily construct an object, on the heap, from an arbitrary set of arguments: + </p> +<pre class="programlisting"><span class="identifier">new_</span><span class="special"><</span><span class="identifier">T</span><span class="special">>(</span><span class="identifier">ctor_arg1</span><span class="special">,</span> <span class="identifier">ctor_arg2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">ctor_argN</span><span class="special">);</span> +</pre> +<p> + where the given parameters are the parameters to the contractor of the + object of type T (This implies, that type T is expected to have a constructor + with a corresponding set of parameter types.). + </p> +<p> + Example: + </p> +<pre class="programlisting"><span class="identifier">new_</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</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="comment">// note the spelling of new_ (with trailing underscore)</span> +</pre> +<p> + Creates a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> from <code class="computeroutput"><span class="identifier">arg1</span></code> + and <code class="computeroutput"><span class="identifier">arg2</span></code> on the heap. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The maximum number of actual parameters is limited by the preprocessor + constant BOOST_PHOENIX_COMPOSITE_LIMIT. Note though, that this limit + should not be greater than BOOST_PHOENIX_LIMIT. By default, <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_COMPOSITE_LIMIT</span></code> is set + to <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LIMIT</span></code> + (See <a class="link" href="../../actor.html" title="Actor">Actor</a>). + </p></td></tr> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="construction.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../object.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="delete.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/operator.html b/libs/phoenix/doc/html/phoenix/modules/operator.html new file mode 100644 index 0000000000..9b70a2165a --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/operator.html @@ -0,0 +1,368 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Operator</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="function/adapting_functions.html" title="Adapting Functions"> +<link rel="next" href="statement.html" title="Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="function/adapting_functions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="statement.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.operator"></a><a class="link" href="operator.html" title="Operator">Operator</a> +</h3></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + This facility provides a mechanism for lazily evaluating operators. Syntactically, + a lazy operator looks and feels like an ordinary C/C++ infix, prefix or postfix + operator. The operator application looks the same. However, unlike ordinary + operators, the actual operator execution is deferred. Samples: + </p> +<pre class="programlisting"><span class="identifier">arg1</span> <span class="special">+</span> <span class="identifier">arg2</span> +<span class="number">1</span> <span class="special">+</span> <span class="identifier">arg1</span> <span class="special">*</span> <span class="identifier">arg2</span> +<span class="number">1</span> <span class="special">/</span> <span class="special">-</span><span class="identifier">arg1</span> +<span class="identifier">arg1</span> <span class="special"><</span> <span class="number">150</span> +</pre> +<p> + We have seen the lazy operators in action (see <a class="link" href="../starter_kit/lazy_operators.html" title="Lazy Operators">Quick + Start - Lazy Operators</a>). Let's go back and examine them a little bit + further: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">find_if</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">arg1</span> <span class="special">%</span> <span class="number">2</span> <span class="special">==</span> <span class="number">1</span><span class="special">)</span> +</pre> +<p> + Through operator overloading, the expression <code class="computeroutput"><span class="identifier">arg1</span> + <span class="special">%</span> <span class="number">2</span> <span class="special">==</span> <span class="number">1</span></code> actually + generates an actor. This actor object is passed on to STL's <code class="computeroutput"><span class="identifier">find_if</span></code> function. From the viewpoint of + STL, the expression is simply a function object expecting a single argument + of the containers value_type. For each element in <code class="computeroutput"><span class="identifier">c</span></code>, + the element is passed on as an argument <code class="computeroutput"><span class="identifier">arg1</span></code> + to the actor (function object). The actor checks if this is an odd value + based on the expression <code class="computeroutput"><span class="identifier">arg1</span> <span class="special">%</span> <span class="number">2</span> <span class="special">==</span> + <span class="number">1</span></code> where arg1 is replaced by the container's + element. + </p> +<p> + Like lazy functions (see <a class="link" href="function.html" title="Function">Function</a>), + lazy operators are not immediately executed when invoked. Instead, an actor + (see <a class="link" href="../actor.html" title="Actor">Actor</a>) object is created and returned + to the caller. Example: + </p> +<pre class="programlisting"><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">arg3</span> +</pre> +<p> + does nothing more than return an actor. A second function call will evaluate + the actual operators. Example: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</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">arg3</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">5</span><span class="special">,</span> <span class="number">6</span><span class="special">);</span> +</pre> +<p> + will print out "54". + </p> +<p> + Operator expressions are lazily evaluated following four simple rules: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + A binary operator, except <code class="computeroutput"><span class="special">->*</span></code> + will be lazily evaluated when <span class="emphasis"><em>at least</em></span> one of its + operands is an actor object (see <a class="link" href="../actor.html" title="Actor">Actor</a>). + </li> +<li class="listitem"> + Unary operators are lazily evaluated if their argument is an actor object. + </li> +<li class="listitem"> + Operator <code class="computeroutput"><span class="special">->*</span></code> is lazily + evaluated if the left hand argument is an actor object. + </li> +<li class="listitem"> + The result of a lazy operator is an actor object that can in turn allow + the applications of rules 1, 2 and 3. + </li> +</ol></div> +<p> + For example, to check the following expression is lazily evaluated: + </p> +<pre class="programlisting"><span class="special">-(</span><span class="identifier">arg1</span> <span class="special">+</span> <span class="number">3</span> <span class="special">+</span> <span class="number">6</span><span class="special">)</span> +</pre> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + Following rule 1, <code class="computeroutput"><span class="identifier">arg1</span> <span class="special">+</span> <span class="number">3</span></code> is + lazily evaluated since <code class="computeroutput"><span class="identifier">arg1</span></code> + is an actor (see <a class="link" href="core/arguments.html" title="Arguments">Arguments</a>). + </li> +<li class="listitem"> + The result of this <code class="computeroutput"><span class="identifier">arg1</span> <span class="special">+</span> <span class="number">3</span></code> expression + is an actor object, following rule 4. + </li> +<li class="listitem"> + Continuing, <code class="computeroutput"><span class="identifier">arg1</span> <span class="special">+</span> + <span class="number">3</span> <span class="special">+</span> <span class="number">6</span></code> is again lazily evaluated. Rule 2. + </li> +<li class="listitem"> + By rule 4 again, the result of <code class="computeroutput"><span class="identifier">arg1</span> + <span class="special">+</span> <span class="number">3</span> <span class="special">+</span> <span class="number">6</span></code> is + an actor object. + </li> +<li class="listitem"> + As <code class="computeroutput"><span class="identifier">arg1</span> <span class="special">+</span> + <span class="number">3</span> <span class="special">+</span> <span class="number">6</span></code> is an actor, <code class="computeroutput"><span class="special">-(</span><span class="identifier">arg1</span> <span class="special">+</span> <span class="number">3</span> <span class="special">+</span> <span class="number">6</span><span class="special">)</span></code> is lazily evaluated. Rule 2. + </li> +</ol></div> +<p> + Lazy-operator application is highly contagious. In most cases, a single + <code class="computeroutput"><span class="identifier">argN</span></code> actor infects all its + immediate neighbors within a group (first level or parenthesized expression). + </p> +<p> + Note that at least one operand of any operator must be a valid actor for + lazy evaluation to take effect. To force lazy evaluation of an ordinary expression, + we can use <code class="computeroutput"><span class="identifier">ref</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>, <code class="computeroutput"><span class="identifier">val</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> or <code class="computeroutput"><span class="identifier">cref</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> + to transform an operand into a valid actor object (see <a class="link" href="core.html" title="Core">Core</a>). + For example: + </p> +<pre class="programlisting"><span class="number">1</span> <span class="special"><<</span> <span class="number">3</span><span class="special">;</span> <span class="comment">// Immediately evaluated</span> +<span class="identifier">val</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="number">3</span><span class="special">;</span> <span class="comment">// Lazily evaluated</span> +</pre> +<h5> +<a name="phoenix.modules.operator.h0"></a> + <span><a name="phoenix.modules.operator.supported_operators"></a></span><a class="link" href="operator.html#phoenix.modules.operator.supported_operators">Supported + operators</a> + </h5> +<h5> +<a name="phoenix.modules.operator.h1"></a> + <span><a name="phoenix.modules.operator.unary_operators"></a></span><a class="link" href="operator.html#phoenix.modules.operator.unary_operators">Unary + operators</a> + </h5> +<pre class="programlisting"><span class="identifier">prefix</span><span class="special">:</span> <span class="special">~,</span> <span class="special">!,</span> <span class="special">-,</span> <span class="special">+,</span> <span class="special">++,</span> <span class="special">--,</span> <span class="special">&</span> <span class="special">(</span><span class="identifier">reference</span><span class="special">),</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">dereference</span><span class="special">)</span> +<span class="identifier">postfix</span><span class="special">:</span> <span class="special">++,</span> <span class="special">--</span> +</pre> +<h5> +<a name="phoenix.modules.operator.h2"></a> + <span><a name="phoenix.modules.operator.binary_operators"></a></span><a class="link" href="operator.html#phoenix.modules.operator.binary_operators">Binary + operators</a> + </h5> +<pre class="programlisting"><span class="special">=,</span> <span class="special">[],</span> <span class="special">+=,</span> <span class="special">-=,</span> <span class="special">*=,</span> <span class="special">/=,</span> <span class="special">%=,</span> <span class="special">&=,</span> <span class="special">|=,</span> <span class="special">^=,</span> <span class="special"><<=,</span> <span class="special">>>=</span> +<span class="special">+,</span> <span class="special">-,</span> <span class="special">*,</span> <span class="special">/,</span> <span class="special">%,</span> <span class="special">&,</span> <span class="special">|,</span> <span class="special">^,</span> <span class="special"><<,</span> <span class="special">>></span> +<span class="special">==,</span> <span class="special">!=,</span> <span class="special"><,</span> <span class="special">>,</span> <span class="special"><=,</span> <span class="special">>=</span> +<span class="special">&&,</span> <span class="special">||,</span> <span class="special">->*</span> +</pre> +<h5> +<a name="phoenix.modules.operator.h3"></a> + <span><a name="phoenix.modules.operator.ternary_operator"></a></span><a class="link" href="operator.html#phoenix.modules.operator.ternary_operator">Ternary + operator</a> + </h5> +<pre class="programlisting"><span class="identifier">if_else</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> +</pre> +<p> + The ternary operator deserves special mention. Since C++ does not allow us + to overload the conditional expression: <code class="computeroutput"><span class="identifier">c</span> + <span class="special">?</span> <span class="identifier">a</span> <span class="special">:</span> <span class="identifier">b</span></code>, the + if_else pseudo function is provided for this purpose. The behavior is identical, + albeit in a lazy manner. + </p> +<h5> +<a name="phoenix.modules.operator.h4"></a> + <span><a name="phoenix.modules.operator.member_pointer_operator"></a></span><a class="link" href="operator.html#phoenix.modules.operator.member_pointer_operator">Member + pointer operator</a> + </h5> +<pre class="programlisting"><span class="identifier">a</span><span class="special">->*</span><span class="identifier">member_object_pointer</span> +<span class="identifier">a</span><span class="special">->*</span><span class="identifier">member_function_pointer</span> +</pre> +<p> + The left hand side of the member pointer operator must be an actor returning + a pointer type. The right hand side of the member pointer operator may be + either a pointer to member object or pointer to member function. + </p> +<p> + If the right hand side is a member object pointer, the result is an actor + which, when evaluated, returns a reference to that member. For example: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">A</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">member</span><span class="special">;</span> +<span class="special">};</span> + +<span class="identifier">A</span><span class="special">*</span> <span class="identifier">a</span> <span class="special">=</span> <span class="keyword">new</span> <span class="identifier">A</span><span class="special">;</span> +<span class="special">...</span> + +<span class="special">(</span><span class="identifier">arg1</span><span class="special">->*&</span><span class="identifier">A</span><span class="special">::</span><span class="identifier">member</span><span class="special">)(</span><span class="identifier">a</span><span class="special">);</span> <span class="comment">// returns member a->member</span> +</pre> +<p> + If the right hand side is a member function pointer, the result is an actor + which, when invoked, calls the specified member function. For example: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">A</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">func</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span> +<span class="special">};</span> + +<span class="identifier">A</span><span class="special">*</span> <span class="identifier">a</span> <span class="special">=</span> <span class="keyword">new</span> <span class="identifier">A</span><span class="special">;</span> +<span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> + +<span class="special">(</span><span class="identifier">arg1</span><span class="special">->*&</span><span class="identifier">A</span><span class="special">::</span><span class="identifier">func</span><span class="special">)(</span><span class="identifier">arg2</span><span class="special">)(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">i</span><span class="special">);</span> <span class="comment">// returns a->func(i)</span> +</pre> +<h5> +<a name="phoenix.modules.operator.h5"></a> + <span><a name="phoenix.modules.operator.include_files"></a></span><a class="link" href="operator.html#phoenix.modules.operator.include_files">Include + Files</a> + </h5> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Operators + </p> + </th> +<th> + <p> + File + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">-</span></code>, <code class="computeroutput"><span class="special">+</span></code>, + <code class="computeroutput"><span class="special">++</span></code>, <code class="computeroutput"><span class="special">--</span></code>, <code class="computeroutput"><span class="special">+=</span></code>, + <code class="computeroutput"><span class="special">-=</span></code>, <code class="computeroutput"><span class="special">*=</span></code>, <code class="computeroutput"><span class="special">/=</span></code>, + <code class="computeroutput"><span class="special">%=</span></code>, <code class="computeroutput"><span class="special">*</span></code>, <code class="computeroutput"><span class="special">/</span></code>, + <code class="computeroutput"><span class="special">%</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">arithmetic</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">&=</span></code>, <code class="computeroutput"><span class="special">|=</span></code>, <code class="computeroutput"><span class="special">^=</span></code>, + <code class="computeroutput"><span class="special"><<=</span></code>, <code class="computeroutput"><span class="special">>>=</span></code>, <code class="computeroutput"><span class="special">&</span></code>, + <code class="computeroutput"><span class="special">|</span></code>, <code class="computeroutput"><span class="special">^</span></code>, + <code class="computeroutput"><span class="special"><<</span></code>, <code class="computeroutput"><span class="special">>></span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">bitwise</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">==</span></code>, <code class="computeroutput"><span class="special">!=</span></code>, <code class="computeroutput"><span class="special"><</span></code>, + <code class="computeroutput"><span class="special"><=</span></code>, <code class="computeroutput"><span class="special">></span></code>, <code class="computeroutput"><span class="special">>=</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">comparison</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special"><<</span></code>, <code class="computeroutput"><span class="special">>></span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">io</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">!</span></code>, &&, <code class="computeroutput"><span class="special">||</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">logical</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">&</span><span class="identifier">x</span></code>, + <code class="computeroutput"><span class="special">*</span><span class="identifier">p</span></code>, + <code class="computeroutput"><span class="special">=</span></code>, <code class="computeroutput"><span class="special">[]</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">self</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">if_else</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">if_else</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">->*</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="keyword">operator</span><span class="special">/</span><span class="identifier">member</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="function/adapting_functions.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="statement.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/scope.html b/libs/phoenix/doc/html/phoenix/modules/scope.html new file mode 100644 index 0000000000..7245f2703d --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/scope.html @@ -0,0 +1,66 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Scope</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="object/casts.html" title="Casts"> +<link rel="next" href="scope/local_variables.html" title="Local Variables"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="object/casts.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="scope/local_variables.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.scope"></a><a class="link" href="scope.html" title="Scope">Scope</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="scope/local_variables.html">Local Variables</a></span></dt> +<dt><span class="section"><a href="scope/let.html">let</a></span></dt> +<dt><span class="section"><a href="scope/lambda.html">lambda</a></span></dt> +</dl></div> +<p> + Up until now, the most basic ingredient is missing: creation of and access + to local variables in the stack. When recursion comes into play, you will + soon realize the need to have true local variables. It may seem that we do + not need this at all since an unnamed lambda function cannot call itself + anyway; at least not directly. With some sort of arrangement, situations + will arise where a lambda function becomes recursive. A typical situation + occurs when we store a lambda function in a <a href="http://www.boost.org/libs/function" target="_top">Boost.Function</a>, + essentially naming the unnamed lambda. + </p> +<p> + There will also be situations where a lambda function gets passed as an argument + to another function. This is a more common situation. In this case, the lambda + function assumes a new scope; new arguments and possibly new local variables. + </p> +<p> + This section deals with local variables and nested lambda scopes. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="object/casts.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="scope/local_variables.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/scope/lambda.html b/libs/phoenix/doc/html/phoenix/modules/scope/lambda.html new file mode 100644 index 0000000000..9cd47796c6 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/scope/lambda.html @@ -0,0 +1,194 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>lambda</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../scope.html" title="Scope"> +<link rel="prev" href="let.html" title="let"> +<link rel="next" href="../bind.html" title="Bind"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="let.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../bind.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.scope.lambda"></a><a class="link" href="lambda.html" title="lambda">lambda</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">scope</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + A lot of times, you'd want to write a lazy function that accepts one or + more functions (higher order functions). STL algorithms come to mind, for + example. Consider a lazy version of <code class="computeroutput"><span class="identifier">stl</span><span class="special">::</span><span class="identifier">for_each</span></code>: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">for_each_impl</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span> + <span class="special">};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">></span> + <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">C</span><span class="special">&</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="keyword">const</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">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">f</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">};</span> + +<span class="identifier">function</span><span class="special"><</span><span class="identifier">for_each_impl</span><span class="special">></span> <span class="keyword">const</span> <span class="identifier">for_each</span> <span class="special">=</span> <span class="identifier">for_each_impl</span><span class="special">();</span> +</pre> +<p> + Notice that the function accepts another function, <code class="computeroutput"><span class="identifier">f</span></code> + as an argument. The scope of this function, <code class="computeroutput"><span class="identifier">f</span></code>, + is limited within the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>. When <code class="computeroutput"><span class="identifier">f</span></code> + is called inside <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code>, it exists in a new scope, along + with new arguments and, possibly, local variables. This new scope is not + at all related to the outer scopes beyond the <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code>. + </p> +<p> + Simple syntax: + </p> +<pre class="programlisting"><span class="identifier">lambda</span> +<span class="special">[</span> + <span class="identifier">lambda</span><span class="special">-</span><span class="identifier">body</span> +<span class="special">]</span> +</pre> +<p> + Like <code class="computeroutput"><span class="identifier">let</span></code>, local variables + may be declared, allowing 1..N local variable declarations (where N == + <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LOCAL_LIMIT</span></code>): + </p> +<pre class="programlisting"><span class="identifier">lambda</span><span class="special">(</span><span class="identifier">local</span><span class="special">-</span><span class="identifier">declarations</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">lambda</span><span class="special">-</span><span class="identifier">body</span> +<span class="special">]</span> +</pre> +<p> + The same restrictions apply with regard to scope and visibility. The RHS + (right hand side lambda-expression) of each local-declaration cannot refer + to any LHS local-id. The local-ids are not in scope yet; they will be in + scope only in the lambda-body: + </p> +<pre class="programlisting"><span class="identifier">lambda</span><span class="special">(</span> + <span class="identifier">_a</span> <span class="special">=</span> <span class="number">1</span> + <span class="special">,</span> <span class="identifier">_b</span> <span class="special">=</span> <span class="identifier">_a</span> <span class="comment">// Error: _a is not in scope yet</span> +<span class="special">)</span> +</pre> +<p> + See <a class="link" href="let.html#phoenix.modules.scope.let.visibility"><code class="computeroutput"><span class="identifier">let</span></code> Visibility</a> for more information. + </p> +<p> + Example: Using our lazy <code class="computeroutput"><span class="identifier">for_each</span></code> + let's print all the elements in a container: + </p> +<pre class="programlisting"><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">lambda</span><span class="special">[</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span><span class="special">])</span> +</pre> +<p> + As far as the arguments are concerned (arg1..argN), the scope in which + the lambda-body exists is totally new. The left <code class="computeroutput"><span class="identifier">arg1</span></code> + refers to the argument passed to <code class="computeroutput"><span class="identifier">for_each</span></code> + (a container). The right <code class="computeroutput"><span class="identifier">arg1</span></code> + refers to the argument passed by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code> + when we finally get to call <code class="computeroutput"><span class="keyword">operator</span><span class="special">()</span></code> in our <code class="computeroutput"><span class="identifier">for_each_impl</span></code> + above (a container element). + </p> +<p> + Yet, we may wish to get information from outer scopes. While we do not + have access to arguments in outer scopes, what we still have is access + to local variables from outer scopes. We may only be able to pass argument + related information from outer <code class="computeroutput"><span class="identifier">lambda</span></code> + scopes through the local variables. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + This is a crucial difference between <code class="computeroutput"><span class="identifier">let</span></code> + and <code class="computeroutput"><span class="identifier">lambda</span></code>: <code class="computeroutput"><span class="identifier">let</span></code> does not introduce new arguments; + <code class="computeroutput"><span class="identifier">lambda</span></code> does. + </p></td></tr> +</table></div> +<p> + Another example: Using our lazy <code class="computeroutput"><span class="identifier">for_each</span></code>, + and a lazy <code class="computeroutput"><span class="identifier">push_back</span></code>: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">push_back_impl</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">result</span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span> + <span class="special">};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> + <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">C</span><span class="special">&</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">const</span> + <span class="special">{</span> + <span class="identifier">c</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">};</span> + +<span class="identifier">function</span><span class="special"><</span><span class="identifier">push_back_impl</span><span class="special">></span> <span class="keyword">const</span> <span class="identifier">push_back</span> <span class="special">=</span> <span class="identifier">push_back_impl</span><span class="special">();</span> +</pre> +<p> + write a lambda expression that accepts: + </p> +<div class="orderedlist"><ol class="orderedlist" type="1"> +<li class="listitem"> + a 2-dimensional container (e.g. <code class="computeroutput"><span class="identifier">vector</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="special">></span></code>) + </li> +<li class="listitem"> + a container element (e.g. <code class="computeroutput"><span class="keyword">int</span></code>) + </li> +</ol></div> +<p> + and pushes-back the element to each of the <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span></code>. + </p> +<p> + Solution: + </p> +<pre class="programlisting"><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> + <span class="identifier">lambda</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="identifier">arg2</span><span class="special">)</span> + <span class="special">[</span> + <span class="identifier">push_back</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">_a</span><span class="special">)</span> + <span class="special">]</span> +<span class="special">)</span> +</pre> +<p> + Since we do not have access to the arguments of the outer scopes beyond + the lambda-body, we introduce a local variable <code class="computeroutput"><span class="identifier">_a</span></code> + that captures the second outer argument: <code class="computeroutput"><span class="identifier">arg2</span></code>. + Hence: _a = arg2. This local variable is visible inside the lambda scope. + </p> +<p> + (See <a href="../../../../../example/lambda.cpp" target="_top">lambda.cpp</a>) + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="let.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../bind.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/scope/let.html b/libs/phoenix/doc/html/phoenix/modules/scope/let.html new file mode 100644 index 0000000000..68a985a23d --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/scope/let.html @@ -0,0 +1,182 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>let</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../scope.html" title="Scope"> +<link rel="prev" href="local_variables.html" title="Local Variables"> +<link rel="next" href="lambda.html" title="lambda"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="local_variables.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="lambda.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.scope.let"></a><a class="link" href="let.html" title="let">let</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">scope</span><span class="special">/</span><span class="identifier">let</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + You declare local variables using the syntax: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span><span class="identifier">local</span><span class="special">-</span><span class="identifier">declarations</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">let</span><span class="special">-</span><span class="identifier">body</span> +<span class="special">]</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">let</span></code> allows 1..N local variable + declarations (where N == <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LOCAL_LIMIT</span></code>). + Each declaration follows the form: + </p> +<pre class="programlisting"><span class="identifier">local</span><span class="special">-</span><span class="identifier">id</span> <span class="special">=</span> <span class="identifier">lambda</span><span class="special">-</span><span class="identifier">expression</span> +</pre> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + You can set <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LOCAL_LIMIT</span></code>, + the predefined maximum local variable declarations in a let expression. + By default, <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LOCAL_LIMIT</span></code> + is set to <code class="computeroutput"><span class="identifier">BOOST_PHOENIX_LIMIT</span></code>. + </p></td></tr> +</table></div> +<p> + Example: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="number">123</span><span class="special">,</span> <span class="identifier">_b</span> <span class="special">=</span> <span class="number">456</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">_a</span> <span class="special">+</span> <span class="identifier">_b</span> +<span class="special">]</span> +</pre> +<p> + <span class="bold"><strong>Reference Preservation</strong></span> + </p> +<p> + The type of the local variable assumes the type of the lambda- expression. + Type deduction is reference preserving. For example: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">_b</span> <span class="special">=</span> <span class="number">456</span><span class="special">)</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">_a</span></code> assumes the type of + <code class="computeroutput"><span class="identifier">arg1</span></code>: a reference to an + argument, while <code class="computeroutput"><span class="identifier">_b</span></code> has + type <code class="computeroutput"><span class="keyword">int</span></code>. + </p> +<p> + Consider this: + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + +<span class="identifier">let</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="identifier">arg1</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="special">--</span><span class="identifier">_a</span> <span class="special"><<</span> <span class="char">' '</span> +<span class="special">]</span> +<span class="special">(</span><span class="identifier">i</span><span class="special">);</span> + +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + the output of above is : 0 0 + </p> +<p> + While with this: + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> + +<span class="identifier">let</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">))</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="special">--</span><span class="identifier">_a</span> <span class="special"><<</span> <span class="char">' '</span> +<span class="special">]</span> +<span class="special">(</span><span class="identifier">i</span><span class="special">);</span> + +<span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> +</pre> +<p> + the output is : 0 1 + </p> +<p> + Reference preservation is necessary because we need to have L-value access + to outer lambda-scopes (especially the arguments). <code class="computeroutput"><span class="identifier">arg</span></code>s + and <code class="computeroutput"><span class="identifier">ref</span></code>s are L-values. + <code class="computeroutput"><span class="identifier">val</span></code>s are R-values. + </p> +<p> + <span class="bold"><strong>Visibility</strong></span> <a name="phoenix.modules.scope.let.visibility"></a> + </p> +<p> + The scope and lifetimes of the local variables is limited within the let-body. + <code class="computeroutput"><span class="identifier">let</span></code> blocks can be nested. + A local variable may hide an outer local variable. For example: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span><span class="identifier">_x</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">_y</span> <span class="special">=</span> <span class="string">", World"</span><span class="special">)</span> +<span class="special">[</span> + <span class="comment">// _x here is an int: 1</span> + + <span class="identifier">let</span><span class="special">(</span><span class="identifier">_x</span> <span class="special">=</span> <span class="string">"Hello"</span><span class="special">)</span> <span class="comment">// hides the outer _x</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">_x</span> <span class="special"><<</span> <span class="identifier">_y</span> <span class="comment">// prints "Hello, World"</span> + <span class="special">]</span> +<span class="special">]</span> +</pre> +<p> + The RHS (right hand side lambda-expression) of each local-declaration cannot + refer to any LHS local-id. At this point, the local-ids are not in scope + yet; they will only be in scope in the let-body. The code below is in error: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span> + <span class="identifier">_a</span> <span class="special">=</span> <span class="number">1</span> + <span class="special">,</span> <span class="identifier">_b</span> <span class="special">=</span> <span class="identifier">_a</span> <span class="comment">// Error: _a is not in scope yet</span> +<span class="special">)</span> +<span class="special">[</span> + <span class="comment">// _a and _b's scope starts here</span> + <span class="comment">/*. body .*/</span> +<span class="special">]</span> +</pre> +<p> + However, if an outer let scope is available, this will be searched. Since + the scope of the RHS of a local-declaration is the outer scope enclosing + the let, the RHS of a local-declaration can refer to a local variable of + an outer scope: + </p> +<pre class="programlisting"><span class="identifier">let</span><span class="special">(</span><span class="identifier">_a</span> <span class="special">=</span> <span class="number">1</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">let</span><span class="special">(</span> + <span class="identifier">_a</span> <span class="special">=</span> <span class="number">1</span> + <span class="special">,</span> <span class="identifier">_b</span> <span class="special">=</span> <span class="identifier">_a</span> <span class="comment">// Ok. _a refers to the outer _a</span> + <span class="special">)</span> + <span class="special">[</span> + <span class="comment">/*. body .*/</span> + <span class="special">]</span> +<span class="special">]</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="local_variables.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="lambda.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/scope/local_variables.html b/libs/phoenix/doc/html/phoenix/modules/scope/local_variables.html new file mode 100644 index 0000000000..28748b94a2 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/scope/local_variables.html @@ -0,0 +1,69 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Local Variables</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../scope.html" title="Scope"> +<link rel="prev" href="../scope.html" title="Scope"> +<link rel="next" href="let.html" title="let"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../scope.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="let.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.scope.local_variables"></a><a class="link" href="local_variables.html" title="Local Variables">Local Variables</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">scope</span><span class="special">/</span><span class="identifier">local_variable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + We use an instance of: + </p> +<pre class="programlisting"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">local_variable</span><span class="special"><</span><span class="identifier">Key</span><span class="special">>::</span><span class="identifier">type</span> +</pre> +<p> + to represent a local variable. The local variable acts as an imaginary + data-bin where a local, stack based data will be placed. <code class="computeroutput"><span class="identifier">Key</span></code> is an arbitrary type that is used + to identify the local variable. Example: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">size_key</span><span class="special">;</span> +<span class="identifier">expression</span><span class="special">::</span><span class="identifier">local_variable</span><span class="special"><</span><span class="identifier">size_key</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">size</span><span class="special">;</span> +</pre> +<p> + <span class="bold"><strong>Predefined Local Variables</strong></span> + </p> +<p> + There are a few predefined instances of <code class="computeroutput"><span class="identifier">expression</span><span class="special">::</span><span class="identifier">local_variable</span><span class="special"><</span><span class="identifier">Key</span><span class="special">>::</span><span class="identifier">type</span></code> + named <code class="computeroutput"><span class="identifier">_a</span></code>..<code class="computeroutput"><span class="identifier">_z</span></code> that you can already use. To make + use of them, simply use the <code class="computeroutput"><span class="keyword">namespace</span> + <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">local_names</span></code>: + </p> +<pre class="programlisting"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">local_names</span><span class="special">;</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../scope.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../scope.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="let.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement.html b/libs/phoenix/doc/html/phoenix/modules/statement.html new file mode 100644 index 0000000000..d699a79b9e --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement.html @@ -0,0 +1,114 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Statement</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="operator.html" title="Operator"> +<link rel="next" href="statement/block_statement.html" title="Block Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="operator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="statement/block_statement.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.statement"></a><a class="link" href="statement.html" title="Statement">Statement</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="statement/block_statement.html">Block Statement</a></span></dt> +<dt><span class="section"><a href="statement/if__statement.html">if_ Statement</a></span></dt> +<dt><span class="section"><a href="statement/___if_else_____statement.html">if_else_ Statement</a></span></dt> +<dt><span class="section"><a href="statement/switch__statement.html">switch_ + Statement</a></span></dt> +<dt><span class="section"><a href="statement/while__statement.html">while_ + Statement</a></span></dt> +<dt><span class="section"><a href="statement/___do_while_____statement.html">do_while_ Statement</a></span></dt> +<dt><span class="section"><a href="statement/for_statement.html">for_ Statement</a></span></dt> +<dt><span class="section"><a href="statement/try__catch__statement.html">try_ + catch_ Statement</a></span></dt> +<dt><span class="section"><a href="statement/throw_.html">throw_</a></span></dt> +</dl></div> +<p> + <span class="bold"><strong><span class="emphasis"><em>Lazy statements...</em></span></strong></span> + </p> +<p> + The expressions presented so far are sufficiently powerful to construct quite + elaborate structures. We have presented lazy-functions and lazy-operators. + How about lazy-statements? First, an appetizer: + </p> +<p> + Print all odd-numbered contents of an STL container using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span></code> + (<a href="../../../../example/all_odds.cpp" target="_top">all_odds.cpp</a>): + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="identifier">if_</span><span class="special">(</span><span class="identifier">arg1</span> <span class="special">%</span> <span class="number">2</span> <span class="special">==</span> <span class="number">1</span><span class="special">)</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="char">' '</span> + <span class="special">]</span> +<span class="special">);</span> +</pre> +<p> + Huh? Is that valid C++? Read on... + </p> +<p> + Yes, it is valid C++. The sample code above is as close as you can get to + the syntax of C++. This stylized C++ syntax differs from actual C++ code. + First, the <code class="computeroutput"><span class="keyword">if</span></code> has a trailing + underscore. Second, the block uses square brackets instead of the familiar + curly braces {}. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + <span class="bold"><strong>C++ in C++?</strong></span> + </p> +<p> + In as much as <a href="http://spirit.sourceforge.net" target="_top">Spirit</a> + attempts to mimic EBNF in C++, Phoenix attempts to mimic C++ in C++!!! + </p> +</td></tr> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../doc/src/images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Unlike lazy functions and lazy operators, lazy statements always return + void. + </p></td></tr> +</table></div> +<p> + Here are more examples with annotations. The code almost speaks for itself. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="operator.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="statement/block_statement.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/___do_while_____statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/___do_while_____statement.html new file mode 100644 index 0000000000..271be2c453 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/___do_while_____statement.html @@ -0,0 +1,73 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>do_while_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="while__statement.html" title="while_ Statement"> +<link rel="next" href="for_statement.html" title="for_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="while__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="for_statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.___do_while_____statement"></a><a class="link" href="___do_while_____statement.html" title="do_while_ Statement">do_while_ Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="identifier">do_while</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">do_</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">while_</span><span class="special">(</span><span class="identifier">conditional_expression</span><span class="special">)</span> +</pre> +<p> + Again, take note that <code class="computeroutput"><span class="keyword">while</span></code> + has a leading dot and a trailing underscore: <code class="computeroutput"><span class="special">.</span><span class="identifier">while_</span></code> + </p> +<p> + Example: This code is almost the same as the previous example above with + a slight twist in logic. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="special">(</span> + <span class="identifier">do_</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">", "</span> + <span class="special">]</span> + <span class="special">.</span><span class="identifier">while_</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">--),</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"\n"</span><span class="special">)</span> + <span class="special">)</span> +<span class="special">);</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="while__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="for_statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/___if_else_____statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/___if_else_____statement.html new file mode 100644 index 0000000000..991df896df --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/___if_else_____statement.html @@ -0,0 +1,88 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>if_else_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="if__statement.html" title="if_ Statement"> +<link rel="next" href="switch__statement.html" title="switch_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="if__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="switch__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.___if_else_____statement"></a><a class="link" href="___if_else_____statement.html" title="if_else_ Statement">if_else_ Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">if</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is + </p> +<pre class="programlisting"><span class="identifier">if_</span><span class="special">(</span><span class="identifier">conditional_expression</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">else_</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +</pre> +<p> + Take note that <code class="computeroutput"><span class="keyword">else</span></code> has a + leading dot and a trailing underscore: <code class="computeroutput"><span class="special">.</span><span class="identifier">else_</span></code> + </p> +<p> + Example: This code prints out all the elements and appends <code class="computeroutput"><span class="string">" > 5"</span></code>, <code class="computeroutput"><span class="string">" + == 5"</span></code> or <code class="computeroutput"><span class="string">" < 5"</span></code> + depending on the element's actual value: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="identifier">if_</span><span class="special">(</span><span class="identifier">arg1</span> <span class="special">></span> <span class="number">5</span><span class="special">)</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">" > 5\n"</span> + <span class="special">]</span> + <span class="special">.</span><span class="identifier">else_</span> + <span class="special">[</span> + <span class="identifier">if_</span><span class="special">(</span><span class="identifier">arg1</span> <span class="special">==</span> <span class="number">5</span><span class="special">)</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">" == 5\n"</span> + <span class="special">]</span> + <span class="special">.</span><span class="identifier">else_</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">" < 5\n"</span> + <span class="special">]</span> + <span class="special">]</span> +<span class="special">);</span> +</pre> +<p> + Notice how the <code class="computeroutput"><span class="identifier">if_else_</span></code> + statement is nested. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="if__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="switch__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/block_statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/block_statement.html new file mode 100644 index 0000000000..62ee942f60 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/block_statement.html @@ -0,0 +1,91 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Block Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="../statement.html" title="Statement"> +<link rel="next" href="if__statement.html" title="if_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="if__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.block_statement"></a><a class="link" href="block_statement.html" title="Block Statement">Block Statement</a> +</h4></div></div></div> +<p> + Syntax: + </p> +<pre class="programlisting"><span class="identifier">statement</span><span class="special">,</span> +<span class="identifier">statement</span><span class="special">,</span> +<span class="special">....</span> +<span class="identifier">statement</span> +</pre> +<p> + Basically, these are comma separated statements. Take note that unlike + the C/C++ semicolon, the comma is a separator put <span class="bold"><strong>in-between</strong></span> + statements. This is like Pascal's semicolon separator, rather than C/C++'s + semicolon terminator. For example: + </p> +<pre class="programlisting"><span class="identifier">statement</span><span class="special">,</span> +<span class="identifier">statement</span><span class="special">,</span> +<span class="identifier">statement</span><span class="special">,</span> <span class="comment">// ERROR!</span> +</pre> +<p> + Is an error. The last statement should not have a comma. Block statements + can be grouped using the parentheses. Again, the last statement in a group + should not have a trailing comma. + </p> +<pre class="programlisting"><span class="identifier">statement</span><span class="special">,</span> +<span class="identifier">statement</span><span class="special">,</span> +<span class="special">(</span> + <span class="identifier">statement</span><span class="special">,</span> + <span class="identifier">statement</span> +<span class="special">),</span> +<span class="identifier">statement</span> +</pre> +<p> + Outside the square brackets, block statements should be grouped. For example: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="special">(</span> + <span class="identifier">do_this</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">),</span> + <span class="identifier">do_that</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span> + <span class="special">)</span> +<span class="special">);</span> +</pre> +<p> + Wrapping a comma operator chain around a parentheses pair blocks the interpretation + as an argument separator. The reason for the exception for the square bracket + operator is that the operator always takes exactly one argument, so it + "transforms" any attempt at multiple arguments with a comma operator + chain (and spits out an error for zero arguments). + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="if__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/for_statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/for_statement.html new file mode 100644 index 0000000000..232fa356a2 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/for_statement.html @@ -0,0 +1,81 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>for_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="___do_while_____statement.html" title="do_while_ Statement"> +<link rel="next" href="try__catch__statement.html" title="try_ catch_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="___do_while_____statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="try__catch__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.for_statement"></a><a class="link" href="for_statement.html" title="for_ Statement">for_ Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">for</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">for_</span><span class="special">(</span><span class="identifier">init_statement</span><span class="special">,</span> <span class="identifier">conditional_expression</span><span class="special">,</span> <span class="identifier">step_statement</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +</pre> +<p> + It is again very similar to the C++ for statement. Take note that the init_statement, + conditional_expression and step_statement are separated by the comma instead of the semi-colon + and each must be present (i.e. <code class="computeroutput"><span class="identifier">for_</span><span class="special">(,,)</span></code> is invalid). This is a case where the + <a class="link" href="../core/nothing.html" title="Nothing"><code class="computeroutput"><span class="identifier">nothing</span></code></a> + actor can be useful. + </p> +<p> + Example: This code prints each element N times where N is the element's + value. A newline terminates the printout of each value. + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">iii</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">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="special">(</span> + <span class="identifier">for_</span><span class="special">(</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">iii</span><span class="special">)</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">ref</span><span class="special">(</span><span class="identifier">iii</span><span class="special">)</span> <span class="special"><</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="special">++</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">iii</span><span class="special">))</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">", "</span> + <span class="special">],</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"\n"</span><span class="special">)</span> + <span class="special">)</span> +<span class="special">);</span> +</pre> +<p> + As before, all these are lazily evaluated. The result of such statements + are in fact expressions that are passed on to STL's for_each function. + In the viewpoint of <code class="computeroutput"><span class="identifier">for_each</span></code>, + what was passed is just a functor, no more, no less. + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="___do_while_____statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="try__catch__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/if__statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/if__statement.html new file mode 100644 index 0000000000..a36dc49dff --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/if__statement.html @@ -0,0 +1,54 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>if_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="block_statement.html" title="Block Statement"> +<link rel="next" href="___if_else_____statement.html" title="if_else_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="block_statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="___if_else_____statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.if__statement"></a><a class="link" href="if__statement.html" title="if_ Statement">if_ Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">if</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + We have seen the <code class="computeroutput"><span class="identifier">if_</span></code> statement. + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">if_</span><span class="special">(</span><span class="identifier">conditional_expression</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="block_statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="___if_else_____statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/switch__statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/switch__statement.html new file mode 100644 index 0000000000..811ff36c18 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/switch__statement.html @@ -0,0 +1,74 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>switch_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="___if_else_____statement.html" title="if_else_ Statement"> +<link rel="next" href="while__statement.html" title="while_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="___if_else_____statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="while__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.switch__statement"></a><a class="link" href="switch__statement.html" title="switch_ Statement">switch_ + Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">switch</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">switch_</span><span class="special">(</span><span class="identifier">integral_expression</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">case_</span><span class="special"><</span><span class="identifier">integral_value</span><span class="special">>(</span><span class="identifier">sequenced_statements</span><span class="special">),</span> + <span class="special">...</span> + <span class="identifier">default_</span><span class="special"><</span><span class="identifier">integral_value</span><span class="special">>(</span><span class="identifier">sequenced_statements</span><span class="special">)</span> +<span class="special">]</span> +</pre> +<p> + A comma separated list of cases, and an optional default can be provided. + Note unlike a normal switch statement, cases do not fall through. + </p> +<p> + Example: This code prints out <code class="computeroutput"><span class="string">"one"</span></code>, + <code class="computeroutput"><span class="string">"two"</span></code> or <code class="computeroutput"><span class="string">"other value"</span></code> depending on the + element's actual value: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="identifier">switch_</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span> + <span class="special">[</span> + <span class="identifier">case_</span><span class="special"><</span><span class="number">1</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">val</span><span class="special">(</span><span class="string">"one"</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'\n'</span><span class="special">),</span> + <span class="identifier">case_</span><span class="special"><</span><span class="number">2</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">val</span><span class="special">(</span><span class="string">"two"</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'\n'</span><span class="special">),</span> + <span class="identifier">default_</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">val</span><span class="special">(</span><span class="string">"other value"</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'\n'</span><span class="special">)</span> + <span class="special">]</span> +<span class="special">);</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="___if_else_____statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="while__statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/throw_.html b/libs/phoenix/doc/html/phoenix/modules/statement/throw_.html new file mode 100644 index 0000000000..c115029cbf --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/throw_.html @@ -0,0 +1,84 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>throw_</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="try__catch__statement.html" title="try_ catch_ Statement"> +<link rel="next" href="../object.html" title="Object"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="try__catch__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../object.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.throw_"></a><a class="link" href="throw_.html" title="throw_">throw_</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">throw</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + As a natural companion to the try/catch support, the statement module provides + lazy throwing and re-throwing of exceptions. + </p> +<p> + The syntax to throw an exception is: + </p> +<pre class="programlisting"><span class="identifier">throw_</span><span class="special">(</span><span class="identifier">exception_expression</span><span class="special">)</span> +</pre> +<p> + The syntax to re-throw an exception is: + </p> +<pre class="programlisting"><span class="identifier">throw_</span><span class="special">()</span> +</pre> +<p> + Example: This code extends the try/catch example, re-throwing exceptions + derived from runtime_error or exception, and translating other exception + types to runtime_errors. + </p> +<pre class="programlisting"><span class="identifier">try_</span> +<span class="special">[</span> + <span class="identifier">f</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_</span><span class="special"><</span><span class="identifier">runtime_error</span><span class="special">>()</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught runtime error or derived\n"</span><span class="special">),</span> + <span class="identifier">throw_</span><span class="special">()</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_</span><span class="special"><</span><span class="identifier">exception</span><span class="special">>()</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught exception or derived\n"</span><span class="special">),</span> + <span class="identifier">throw_</span><span class="special">()</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_all</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught some other type of exception\n"</span><span class="special">),</span> + <span class="identifier">throw_</span><span class="special">(</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="string">"translated exception"</span><span class="special">))</span> +<span class="special">]</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="try__catch__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../object.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/try__catch__statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/try__catch__statement.html new file mode 100644 index 0000000000..e97ab4606f --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/try__catch__statement.html @@ -0,0 +1,89 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>try_ catch_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="for_statement.html" title="for_ Statement"> +<link rel="next" href="throw_.html" title="throw_"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="for_statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="throw_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.try__catch__statement"></a><a class="link" href="try__catch__statement.html" title="try_ catch_ Statement">try_ + catch_ Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="identifier">try_catch</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">try_</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_</span><span class="special"><</span><span class="identifier">exception_type</span><span class="special">>()</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +<span class="special">...</span> +<span class="special">.</span><span class="identifier">catch_all</span> +<span class="special">[</span> + <span class="identifier">sequenced_statement</span> +<span class="special">]</span> +</pre> +<p> + Note the usual underscore after try and catch, and the extra parentheses + required after the catch. + </p> +<p> + Example: The following code calls the (lazy) function <code class="computeroutput"><span class="identifier">f</span></code> + for each element, and prints messages about different exception types it + catches. + </p> +<pre class="programlisting"><span class="identifier">try_</span> +<span class="special">[</span> + <span class="identifier">f</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_</span><span class="special"><</span><span class="identifier">runtime_error</span><span class="special">>()</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught runtime error or derived\n"</span><span class="special">)</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_</span><span class="special"><</span><span class="identifier">exception</span><span class="special">>()</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught exception or derived\n"</span><span class="special">)</span> +<span class="special">]</span> +<span class="special">.</span><span class="identifier">catch_all</span> +<span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"caught some other type of exception\n"</span><span class="special">)</span> +<span class="special">]</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="for_statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="throw_.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/statement/while__statement.html b/libs/phoenix/doc/html/phoenix/modules/statement/while__statement.html new file mode 100644 index 0000000000..1668aa7804 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/statement/while__statement.html @@ -0,0 +1,69 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>while_ Statement</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../statement.html" title="Statement"> +<link rel="prev" href="switch__statement.html" title="switch_ Statement"> +<link rel="next" href="___do_while_____statement.html" title="do_while_ Statement"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="switch__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="___do_while_____statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.statement.while__statement"></a><a class="link" href="while__statement.html" title="while_ Statement">while_ + Statement</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">statement</span><span class="special">/</span><span class="keyword">while</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The syntax is: + </p> +<pre class="programlisting"><span class="identifier">while_</span><span class="special">(</span><span class="identifier">conditional_expression</span><span class="special">)</span> +<span class="special">[</span> + <span class="identifier">sequenced_statements</span> +<span class="special">]</span> +</pre> +<p> + Example: This code decrements each element until it reaches zero and prints + out the number at each step. A newline terminates the printout of each + value. + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> + <span class="special">(</span> + <span class="identifier">while_</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">--)</span> + <span class="special">[</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">arg1</span> <span class="special"><<</span> <span class="string">", "</span> + <span class="special">],</span> + <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"\n"</span><span class="special">)</span> + <span class="special">)</span> +<span class="special">);</span> +</pre> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="switch__statement.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../statement.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="___do_while_____statement.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/stl.html b/libs/phoenix/doc/html/phoenix/modules/stl.html new file mode 100644 index 0000000000..4494441527 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/stl.html @@ -0,0 +1,52 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>STL</title> +<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../modules.html" title="Modules"> +<link rel="prev" href="bind/compatibility_with_boost_bind.html" title="Compatibility with Boost.Bind"> +<link rel="next" href="stl/container.html" title="Container"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="bind/compatibility_with_boost_bind.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stl/container.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h3 class="title"> +<a name="phoenix.modules.stl"></a><a class="link" href="stl.html" title="STL">STL</a> +</h3></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="stl/container.html">Container</a></span></dt> +<dt><span class="section"><a href="stl/algorithm.html">Algorithm</a></span></dt> +</dl></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + This section summarizes the lazy equivalents of C++ Standard Library functionality + </p> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="bind/compatibility_with_boost_bind.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../modules.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="stl/container.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/stl/algorithm.html b/libs/phoenix/doc/html/phoenix/modules/stl/algorithm.html new file mode 100644 index 0000000000..93ce039bd2 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/stl/algorithm.html @@ -0,0 +1,1141 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Algorithm</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../stl.html" title="STL"> +<link rel="prev" href="container.html" title="Container"> +<link rel="next" href="../../inside.html" title="Inside Phoenix"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="container.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../inside.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.stl.algorithm"></a><a class="link" href="algorithm.html" title="Algorithm">Algorithm</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The algorithm module provides wrappers for the standard algorithms in the + <code class="computeroutput"><span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span></code> and <code class="computeroutput"><span class="special"><</span><span class="identifier">numeric</span><span class="special">></span></code> + headers. + </p> +<p> + The algorithms are divided into the categories iteration, transformation + and querying, modeling the <a href="http://boost.org/libs/mpl/doc/index.html" target="_top">Boost.MPL</a> + library. The different algorithm classes can be included using the headers: + </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">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">iteration</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">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">transformation</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">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">querying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The functions of the algorithm module take ranges as arguments where appropriate. + This is different to the standard library, but easy enough to pick up. + Ranges are described in detail in the <a href="http://boost.org/libs/range/index.html" target="_top">Boost.Range</a> + library. + </p> +<p> + For example, using the standard copy algorithm to copy between 2 arrays: + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">array</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="keyword">int</span> <span class="identifier">output</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">copy</span><span class="special">(</span><span class="identifier">array</span><span class="special">,</span> <span class="identifier">array</span> <span class="special">+</span> <span class="number">3</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span> <span class="comment">// We have to provide iterators</span> + <span class="comment">// to both the start and end of array</span> +</pre> +<p> + The analogous code using the phoenix algorithm module is: + </p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">array</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="keyword">int</span> <span class="identifier">output</span><span class="special">[</span><span class="number">3</span><span class="special">];</span> +<span class="identifier">copy</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="identifier">array</span><span class="special">,</span> <span class="identifier">output</span><span class="special">);</span> <span class="comment">// Notice only 2 arguments, the end of</span> + <span class="comment">// array is established automatically</span> +</pre> +<p> + The <a href="http://boost.org/libs/range/index.html" target="_top">Boost.Range</a> + library provides support for standard containers, strings and arrays, and + can be extended to support additional types. + </p> +<p> + The following tables describe the different categories of algorithms, and + their semantics. + </p> +<div class="sidebar"> +<div class="titlepage"></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/tip.png" alt="tip"></span> Arguments in brackets denote optional parameters. + </p> +</div> +<div class="table"> +<a name="phoenix.modules.stl.algorithm.t0"></a><p class="title"><b>Table 1.6. Iteration Algorithms</b></p> +<div class="table-contents"><table class="table" summary="Iteration Algorithms"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Function + </p> + </th> +<th> + <p> + stl Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">accumulate</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">accumulate</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="phoenix.modules.stl.algorithm.t1"></a><p class="title"><b>Table 1.7. Querying Algorithms</b></p> +<div class="table-contents"><table class="table" summary="Querying Algorithms"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Function + </p> + </th> +<th> + <p> + stl Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">find</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">find</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_if</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> + <span class="identifier">r2</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_end</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_first_of</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">find_first_of</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">adjacent_find</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">adjacent_find</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">count</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">count</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">count_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">count_if</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">distance</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">))</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">mismatch</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">i</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">mismatch</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">i</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">equal</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">i</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">equal</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">i</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">search</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> + <span class="identifier">r2</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">search</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lower_bound</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">lower_bound</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">upper_bound</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">upper_bound</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">equal_range</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">equal_range</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">binary_search</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">a</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">binary_search</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">a</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">includes</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> + <span class="identifier">r2</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">includes</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">min_element</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">min_element</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">max_element</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">max_element</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lexicographical_compare</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">lexicographical_compare</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><div class="table"> +<a name="phoenix.modules.stl.algorithm.t2"></a><p class="title"><b>Table 1.8. Transformation Algorithms</b></p> +<div class="table-contents"><table class="table" summary="Transformation Algorithms"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Function + </p> + </th> +<th> + <p> + stl Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">copy_backward</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">copy_backward</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">transform</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">transform</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">transform</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">i</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">transform</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">i</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">,</span> + <span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace_copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace_copy_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">replace_copy_if</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">fill</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">fill</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">fill_n</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">n</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">fill_n</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">n</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">generate</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">generate</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">generate_n</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">n</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">generate_n</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">n</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_if</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_copy_if</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">remove_copy_if</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">unique</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unique</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">unique_copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unique_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">reverse</span><span class="special">(</span><span class="identifier">r</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">reverse</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">))</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">reverse_copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">reverse_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rotate</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">m</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">rotate</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">m</span><span class="special">,</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">))</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rotate_copy</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">m</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">rotate_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">m</span><span class="special">,</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">random_shuffle</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">random_shuffle</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">partition</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">partition</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stable_partition</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">stable_partition</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sort</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">sort</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stable_sort</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">stable_sort</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sort</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">m</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sort</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sort_copy</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sort_copy</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">nth_element</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">n</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">nth_element</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">n</span><span class="special">,</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">merge</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> + <span class="identifier">r2</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">merge</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">inplace_merge</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">m</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">inplace_merge</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_union</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> + <span class="identifier">r2</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_union</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> + <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_intersection</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">,</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_intersection</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_difference</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">,</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_difference</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_symmetric_difference</span><span class="special">(</span><span class="identifier">r1</span><span class="special">,</span> <span class="identifier">r2</span><span class="special">,</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">set_symmetric_difference</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r1</span><span class="special">),</span> <span class="identifier">begin</span><span class="special">(</span><span class="identifier">r2</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r2</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">push_heap</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">push_heap</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">pop_heap</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">pop_heap</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">make_heap</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">make_heap</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sort_heap</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">sort_heap</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">next_permutation</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">next_permutation</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">prev_permutation</span><span class="special">(</span><span class="identifier">r</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">prev_permutation</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">)[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">inner_product</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">,</span> <span class="identifier">a</span><span class="special">[,</span> <span class="identifier">f1</span><span class="special">,</span> <span class="identifier">f2</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">inner_product</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f1</span><span class="special">,</span> <span class="identifier">f2</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sum</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">partial_sum</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> + <span class="identifier">o</span><span class="special">[,</span> + <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">adjacent_difference</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">adjacent_difference</span><span class="special">(</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">end</span><span class="special">(</span><span class="identifier">r</span><span class="special">),</span> <span class="identifier">o</span><span class="special">[,</span> <span class="identifier">f</span><span class="special">])</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="container.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../../inside.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/phoenix/doc/html/phoenix/modules/stl/container.html b/libs/phoenix/doc/html/phoenix/modules/stl/container.html new file mode 100644 index 0000000000..b224139983 --- /dev/null +++ b/libs/phoenix/doc/html/phoenix/modules/stl/container.html @@ -0,0 +1,601 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Container</title> +<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="../../../index.html" title="Chapter 1. Phoenix 3.0"> +<link rel="up" href="../stl.html" title="STL"> +<link rel="prev" href="../stl.html" title="STL"> +<link rel="next" href="algorithm.html" title="Algorithm"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table cellpadding="2" width="100%"><tr> +<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> +<td align="center"><a href="../../../../../../../index.html">Home</a></td> +<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> +<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> +<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> +<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../stl.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="algorithm.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h4 class="title"> +<a name="phoenix.modules.stl.container"></a><a class="link" href="container.html" title="Container">Container</a> +</h4></div></div></div> +<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">phoenix</span><span class="special">/</span><span class="identifier">stl</span><span class="special">/</span><span class="identifier">container</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The container module predefines a set of lazy functions that work on STL + containers. These functions provide a mechanism for the lazy evaluation + of the public member functions of the STL containers. The lazy functions + are thin wrappers that simply forward to their respective counterparts + in the STL library. + </p> +<p> + Lazy functions are provided for all of the member functions of the following + containers: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + deque + </li> +<li class="listitem"> + list + </li> +<li class="listitem"> + map + </li> +<li class="listitem"> + multimap + </li> +<li class="listitem"> + vector + </li> +</ul></div> +<p> + Indeed, should your class have member functions with the same names and + signatures as those listed below, then it will automatically be supported. + To summarize, lazy functions are provided for member functions: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + assign + </li> +<li class="listitem"> + at + </li> +<li class="listitem"> + back + </li> +<li class="listitem"> + begin + </li> +<li class="listitem"> + capacity + </li> +<li class="listitem"> + clear + </li> +<li class="listitem"> + empty + </li> +<li class="listitem"> + end + </li> +<li class="listitem"> + erase + </li> +<li class="listitem"> + front + </li> +<li class="listitem"> + get_allocator + </li> +<li class="listitem"> + insert + </li> +<li class="listitem"> + key_comp + </li> +<li class="listitem"> + max_size + </li> +<li class="listitem"> + pop_back + </li> +<li class="listitem"> + pop_front + </li> +<li class="listitem"> + push_back + </li> +<li class="listitem"> + push_front + </li> +<li class="listitem"> + rbegin + </li> +<li class="listitem"> + rend + </li> +<li class="listitem"> + reserve + </li> +<li class="listitem"> + resize + </li> +<li class="listitem"> + size + </li> +<li class="listitem"> + splice + </li> +<li class="listitem"> + value_comp + </li> +</ul></div> +<p> + The lazy functions' names are the same as the corresponding member function. + The difference is that the lazy functions are free functions and therefore + does not use the member "dot" syntax. + </p> +<div class="table"> +<a name="phoenix.modules.stl.container.t0"></a><p class="title"><b>Table 1.4. Sample usage</b></p> +<div class="table-contents"><table class="table" summary="Sample usage"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + "Normal" version + </p> + </th> +<th> + <p> + "Lazy" version + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">my_vector</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="number">5</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">at</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> + <span class="number">5</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">my_list</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">my_vector1</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">my_vector2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">swap</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> + <span class="identifier">arg2</span><span class="special">)</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"><p> + Notice that member functions with names that clash with stl algorithms + are absent. This will be provided in Phoenix's algorithm module. + </p> +<p> + No support is provided here for lazy versions of <code class="computeroutput"><span class="keyword">operator</span><span class="special">+=</span></code>, <code class="computeroutput"><span class="keyword">operator</span><span class="special">[]</span></code> etc. Such operators are not specific + to STL containers and lazy versions can therefore be found in <a class="link" href="../operator.html" title="Operator">operators</a>. + </p> +<p> + The following table describes the container functions and their semantics. + </p> +<div class="sidebar"> +<div class="titlepage"></div> +<p> + <span class="inlinemediaobject"><img src="../../../images/tip.png" alt="tip"></span> Arguments in brackets denote optional parameters. + </p> +</div> +<div class="table"> +<a name="phoenix.modules.stl.container.t1"></a><p class="title"><b>Table 1.5. Lazy STL Container Functions</b></p> +<div class="table-contents"><table class="table" summary="Lazy STL Container Functions"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Function + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">assign</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">at</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">i</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="identifier">i</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">back</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">back</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">begin</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">begin</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">capacity</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">clear</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">empty</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">empty</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">end</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">end</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">erase</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">front</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">front</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">get_allocator</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">get_allocator</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">insert</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">key_comp</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">key_comp</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">max_size</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">max_size</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">pop_back</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">pop_back</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">pop_front</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">pop_front</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">push_front</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">push_front</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">pop_front</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">pop_front</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rbegin</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">rbegin</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">rend</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">rend</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">n</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">resize</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">resize</span><span class="special">(</span><span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">size</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">splice</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> + <span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">,</span> + <span class="identifier">d</span><span class="special">])</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">splice</span><span class="special">(</span><span class="identifier">a</span><span class="special">[,</span> + <span class="identifier">b</span><span class="special">,</span> + <span class="identifier">c</span><span class="special">,</span> + <span class="identifier">d</span><span class="special">])</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">value_comp</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">c</span><span class="special">.</span><span class="identifier">value_comp</span><span class="special">()</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +</div> +<br class="table-break"> +</div> +<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> +<td align="left"></td> +<td align="right"><div class="copyright-footer">Copyright © 2002-2005, 2010 Joel de Guzman, Dan Marsden, Thomas Heller<p> + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) + </p> +</div></td> +</tr></table> +<hr> +<div class="spirit-nav"> +<a accesskey="p" href="../stl.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stl.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="algorithm.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> |