diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /libs/spirit/doc/html/spirit/karma/reference | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'libs/spirit/doc/html/spirit/karma/reference')
59 files changed, 20840 insertions, 0 deletions
diff --git a/libs/spirit/doc/html/spirit/karma/reference/action.html b/libs/spirit/doc/html/spirit/karma/reference/action.html new file mode 100755 index 0000000000..791756630a --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/action.html @@ -0,0 +1,296 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Semantic Actions with Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="generate_api/create_generator.html" title="API for Automatic Generator Creation"> +<link rel="next" href="auto.html" title="Auto Generator"> +</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="generate_api/create_generator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auto.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="spirit.karma.reference.action"></a><a class="link" href="action.html" title="Semantic Actions with Generators">Semantic Actions with + Generators</a> +</h4></div></div></div> +<h6> +<a name="spirit.karma.reference.action.h0"></a> + <span><a name="spirit.karma.reference.action.description"></a></span><a class="link" href="action.html#spirit.karma.reference.action.description">Description</a> + </h6> +<p> + Semantic actions may be attached to any point in the grammar specification. + They allow to call a function or function object in order to provide the + value output by the generator attached to the semantic action. Semantic + actions are associated with a generator using the syntax <code class="computeroutput"><span class="identifier">g</span><span class="special">[]</span></code>, + where <code class="computeroutput"><span class="identifier">g</span></code> is an arbitrary + generator expression. + </p> +<h6> +<a name="spirit.karma.reference.action.h1"></a> + <span><a name="spirit.karma.reference.action.header"></a></span><a class="link" href="action.html#spirit.karma.reference.action.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/action.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_action</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.action.h2"></a> + <span><a name="spirit.karma.reference.action.model_of"></a></span><a class="link" href="action.html#spirit.karma.reference.action.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code>, <code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + Instances of a generator, <code class="computeroutput"><span class="identifier">G</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type exposed by a generator, <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">fa</span></code></span></dt> +<dd><p> + A (semantic action) function with signature <code class="computeroutput"><span class="keyword">void</span><span class="special">(</span><span class="identifier">Attrib</span><span class="special">&,</span> <span class="identifier">Context</span><span class="special">&,</span> <span class="keyword">bool</span><span class="special">&)</span></code>. The third parameter is a boolean + flag that can be set to false to force the generator to fail. Both + <code class="computeroutput"><span class="identifier">Context</span></code> and the boolean + flag are optional. For more information see below. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Attrib</span></code></span></dt> +<dd><p> + The attribute to be used to generate output from. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Context</span></code></span></dt> +<dd><p> + The type of the generator execution context. For more information + see below. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.action.h3"></a> + <span><a name="spirit.karma.reference.action.expression_semantics"></a></span><a class="link" href="action.html#spirit.karma.reference.action.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or is + not defined in <a class="link" href="generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">[</span><span class="identifier">fa</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Call semantic action, <code class="computeroutput"><span class="identifier">fa</span></code> + <span class="emphasis"><em>before</em></span> invoking <code class="computeroutput"><span class="identifier">g</span></code>. + The function or function object <code class="computeroutput"><span class="identifier">fa</span></code> + is expected to provide the value to generate output from to the + generator <code class="computeroutput"><span class="identifier">g</span></code>. + </p> + </td> +</tr></tbody> +</table></div> +<p> + The possible signatures for functions to be used as semantic actions are: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attrib</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">fa</span><span class="special">(</span><span class="identifier">Attrib</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attrib</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Context</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">fa</span><span class="special">(</span><span class="identifier">Attrib</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">,</span> <span class="identifier">Context</span><span class="special">&</span> <span class="identifier">context</span><span class="special">);</span> + +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attrib</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Context</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">fa</span><span class="special">(</span><span class="identifier">Attrib</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">,</span> <span class="identifier">Context</span><span class="special">&</span> <span class="identifier">context</span><span class="special">,</span> <span class="keyword">bool</span><span class="special">&</span> <span class="identifier">pass</span><span class="special">);</span> +</pre> +<p> + The function or function object is expected to return the value to generate + output from by assigning it to the first parameter, <code class="computeroutput"><span class="identifier">attr</span></code>. + Here <code class="computeroutput"><span class="identifier">Attrib</span></code> is the attribute + type of the generator attached to the semantic action. + </p> +<p> + The type <code class="computeroutput"><span class="identifier">Context</span></code> is the + type of the generator execution context. This type is unspecified and depends + on the context the generator is invoked in. The value <code class="computeroutput"><span class="identifier">context</span></code> + is used by semantic actions written using <a href="../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> + to access various context dependent attributes and values. For more information + about <a href="../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> placeholder + expressions usable in semantic actions see <a class="link" href="generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> +<p> + The third parameter, <code class="computeroutput"><span class="identifier">pass</span></code>, + can be used by the semantic action to force the associated generator to + fail. If pass is set to <code class="computeroutput"><span class="keyword">false</span></code> + the action generator will immediately return <code class="computeroutput"><span class="keyword">false</span></code> + as well, while not invoking <code class="computeroutput"><span class="identifier">g</span></code> + and not generating any output. + </p> +<h6> +<a name="spirit.karma.reference.action.h4"></a> + <span><a name="spirit.karma.reference.action.attributes"></a></span><a class="link" href="action.html#spirit.karma.reference.action.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">[</span><span class="identifier">fa</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</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="identifier">fa</span><span class="special">]:</span> + <span class="identifier">A</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.action.h5"></a> + <span><a name="spirit.karma.reference.action.complexity"></a></span><a class="link" href="action.html#spirit.karma.reference.action.complexity">Complexity</a> + </h6> +<p> + The complexity of the action generator is defined by the complexity of + the generator the semantic action is attached to and the complexity of + the function or function object used as the semantic action. + </p> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + Please note that the use of semantic actions in <span class="emphasis"><em>Spirit.Karma</em></span> + generally forces the library to create a <span class="emphasis"><em>copy</em></span> of + the attribute, which might be a costly operation. Always consider using + other means of associating a value with a particular generator first. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.action.h6"></a> + <span><a name="spirit.karma.reference.action.example"></a></span><a class="link" href="action.html#spirit.karma.reference.action.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="basics.html#spirit.karma.reference.basics.examples">Basics + Examples</a> section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">string</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">_1</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">ref</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">val</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Some examples: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">42</span><span class="special">;</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"42"</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">[</span><span class="identifier">_1</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="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">string</span><span class="special">[</span><span class="identifier">_1</span> <span class="special">=</span> <span class="identifier">val</span><span class="special">(</span><span class="string">"abc"</span><span class="special">)]);</span> +</pre> +<p> + </p> +<p> + More examples for semantic actions can be found here: <a class="link" href="../tutorials/semantic_actions.html#spirit.karma.tutorials.semantic_actions.examples_of_semantic_actions">Examples + of Semantic Actions</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="generate_api/create_generator.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auto.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auto.html b/libs/spirit/doc/html/spirit/karma/reference/auto.html new file mode 100755 index 0000000000..72b3e5302d --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auto.html @@ -0,0 +1,572 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Auto Generator</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="action.html" title="Semantic Actions with Generators"> +<link rel="next" href="auxiliary.html" title="Auxiliary Generators"> +</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="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary.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="spirit.karma.reference.auto"></a><a class="link" href="auto.html" title="Auto Generator">Auto Generator</a> +</h4></div></div></div> +<h6> +<a name="spirit.karma.reference.auto.h0"></a> + <span><a name="spirit.karma.reference.auto.description"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.description">Description</a> + </h6> +<p> + This module includes the description of the <code class="computeroutput"><span class="identifier">auto_</span></code> + generator. This generator can be used to automatically create a generator + based on the supplied attribute type. + </p> +<h6> +<a name="spirit.karma.reference.auto.h1"></a> + <span><a name="spirit.karma.reference.auto.header"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auto.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.auto.h2"></a> + <span><a name="spirit.karma.reference.auto.namespace"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">auto_</span> <span class="comment">// alias: + boost::spirit::karma::auto_</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auto.h3"></a> + <span><a name="spirit.karma.reference.auto.model_of"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt> +<dd><p> + A variable instance of any type for which a mapping to a generator + type is defined (the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator_exists</span></code> + returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>) or a <a class="link" href="basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to any type for which a mapping to + a generator type is defined (the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator_exists</span></code> + returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>). + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.auto.h4"></a> + <span><a name="spirit.karma.reference.auto.expression_semantics"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or is + not defined in <a class="link" href="generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">auto_</span></code> + </p> + </td> +<td> + <p> + Create a generator instance compatible with the supplied attribute + type and use it for output generation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">auto_</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Create a generator instance compatible with the supplied literal + value. This generator never fails (unless the underlying output + stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auto.h5"></a> + <span><a name="spirit.karma.reference.auto.additional_requirements"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.additional_requirements">Additional + Requirements</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">auto_</span></code> generators can + be used to emit output for any data type for which a mapping to a generator + type is defined (the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator_exists</span></code> + returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>). The following table outlines + the predefined mapping rules from the attribute type to the generator type. + These rules are applied recursively to create the generator type which + can be used to generate output from the given attribute type. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Attribute type + </p> + </th> +<th> + <p> + Generator type + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">wchar_t</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">standard</span><span class="special">::</span><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">standard_wide</span><span class="special">::</span><span class="identifier">char_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">ushort_</span></code>, <code class="computeroutput"><span class="identifier">uint_</span></code>, <code class="computeroutput"><span class="identifier">ulong_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code>, <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">float_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, <code class="computeroutput"><span class="identifier">long_double</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> + <span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_long</span></code>, <code class="computeroutput"><span class="identifier">ulong_long</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + Any string (<code class="computeroutput"><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>, etc.) + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">string</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + Any (STL) container + </p> + </td> +<td> + <p> + Kleene Star (unary <code class="computeroutput"><span class="char">'*'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + Any Fusion sequence + </p> + </td> +<td> + <p> + Sequence operator (<code class="computeroutput"><span class="char">'<<'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> + </p> + </td> +<td> + <p> + Optional operator (unary <code class="computeroutput"><span class="char">'-'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special"><></span></code> + </p> + </td> +<td> + <p> + Alternative operator (<code class="computeroutput"><span class="char">'|'</span></code>) + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + It is possible to add support for any custom data type by implementing + a specialization of the customization point <a class="link" href="../../advanced/customize/auto/create_generator.html" title="Define a Custom Attribute Mapping for a Generator"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator</span></code></a>. This customization + can be used also to redefined any of the predefined mappings. + </p> +<h6> +<a name="spirit.karma.reference.auto.h6"></a> + <span><a name="spirit.karma.reference.auto.attributes"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">auto_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">hold_any</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">auto_</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The attribute type <code class="computeroutput"><span class="identifier">hold_any</span></code> + exposed by some of the <code class="computeroutput"><span class="identifier">auto_</span></code> + generators is semantically and syntactically equivalent to the type implemented + by <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. It has + been added to <span class="emphasis"><em>Spirit</em></span> as it has better a performance + and a smaller footprint if compared to <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. + </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="../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Attrib</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Attrib</span></code> and emit the value stored in + the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.auto.h7"></a> + <span><a name="spirit.karma.reference.auto.complexity"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The complexity of the <code class="computeroutput"><span class="identifier">auto_</span></code> + generator depends on the attribute type. Each attribute type results + in a different generator type to be instantiated which defines the overall + complexity. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.auto.h8"></a> + <span><a name="spirit.karma.reference.auto.example"></a></span><a class="link" href="auto.html#spirit.karma.reference.auto.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="basics.html#spirit.karma.reference.basics.examples">Basics + Examples</a> section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">auto_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + And a class definition used in the examples: + </p> +<p> +</p> +<pre class="programlisting"><span class="comment">// a simple complex number representation z = a + bi</span> +<span class="keyword">struct</span> <span class="identifier">complex</span> +<span class="special">{</span> + <span class="identifier">complex</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">double</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">a</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> + <span class="special">{}</span> + + <span class="keyword">double</span> <span class="identifier">a</span><span class="special">;</span> + <span class="keyword">double</span> <span class="identifier">b</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + </p> +<p> + The following construct is required to allow the <code class="computeroutput"><span class="identifier">complex</span></code> + data structure to be utilized as a <a href="../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence. This is required as we will emit output for this data structure + with a <span class="emphasis"><em>Spirit.Karma</em></span> sequence: <code class="computeroutput"><span class="char">'{'</span> + <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">'}'</span></code>. + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">BOOST_FUSION_ADAPT_STRUCT</span><span class="special">(</span> + <span class="identifier">complex</span><span class="special">,</span> + <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span> + <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> +<span class="special">)</span> +</pre> +<p> + </p> +<p> + We add a specialization for the create_generator customization point defining + a custom output format for the complex type. Generally, any specialization + for create_generator is expected to return the proto expression to be used + to generate output for the type the customization point has been specialized + for. + </p> +<p> + We need to utilize <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span></code> + as the expression contains literals (the <code class="computeroutput"><span class="char">'{'</span></code>, + <code class="computeroutput"><span class="char">','</span></code>, and <code class="computeroutput"><span class="char">'}'</span></code>) + which normally get embedded in the proto expression by reference only. + The deep copy converts the proto tree to hold this by value. The deep copy + operation can be left out for simpler proto expressions (not containing + references to temporaries). Alternatively you could use the <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">make_expr</span></code> facility to build the required + proto expression. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">traits</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><></span> + <span class="keyword">struct</span> <span class="identifier">create_generator</span><span class="special"><</span><span class="identifier">complex</span><span class="special">></span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special"><</span> + <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="char">'{'</span> <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">'}'</span><span class="special">)</span> + <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span> + + <span class="keyword">static</span> <span class="identifier">type</span> <span class="identifier">call</span><span class="special">()</span> + <span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special">(</span> + <span class="char">'{'</span> <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">'}'</span><span class="special">);</span> + <span class="special">}</span> + <span class="special">};</span> +<span class="special">}}}</span> +</pre> +<p> + </p> +<p> + Some usage examples of <code class="computeroutput"><span class="identifier">auto_</span></code> + generators: + </p> +<p> + Emit a simple string using the <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">string</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">(</span><span class="string">"abc"</span><span class="special">));</span> +</pre> +<p> + </p> +<p> + Emit instances of the <code class="computeroutput"><span class="identifier">complex</span></code> + data type as defined above using the generator defined by the customization + point for <code class="computeroutput"><span class="identifier">complex</span></code>: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="identifier">complex</span><span class="special">(</span><span class="number">1.2</span><span class="special">,</span> <span class="number">2.4</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">(</span><span class="identifier">complex</span><span class="special">(</span><span class="number">1.2</span><span class="special">,</span> <span class="number">2.4</span><span class="special">)));</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auxiliary.html b/libs/spirit/doc/html/spirit/karma/reference/auxiliary.html new file mode 100755 index 0000000000..3b405a7223 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auxiliary.html @@ -0,0 +1,70 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Auxiliary Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="auto.html" title="Auto Generator"> +<link rel="next" href="auxiliary/attr_cast.html" title="Attribute Transformation Pseudo Generator (attr_cast)"> +</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="auto.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary/attr_cast.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="spirit.karma.reference.auxiliary"></a><a class="link" href="auxiliary.html" title="Auxiliary Generators">Auxiliary Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="auxiliary/attr_cast.html">Attribute + Transformation Pseudo Generator (<code class="computeroutput"><span class="identifier">attr_cast</span></code>)</a></span></dt> +<dt><span class="section"><a href="auxiliary/eol.html">End of Line + Generator (<code class="computeroutput"><span class="identifier">eol</span></code>)</a></span></dt> +<dt><span class="section"><a href="auxiliary/eps.html">Epsilon Generator + (<code class="computeroutput"><span class="identifier">eps</span></code>)</a></span></dt> +<dt><span class="section"><a href="auxiliary/lazy.html">Lazy Generator + (<code class="computeroutput"><span class="identifier">lazy</span></code>)</a></span></dt> +</dl></div> +<p> + This module includes different auxiliary generators not fitting into any + of the other categories. It includes the <code class="computeroutput"><span class="identifier">attr_cast</span></code>, + <code class="computeroutput"><span class="identifier">eol</span></code>, <code class="computeroutput"><span class="identifier">eps</span></code>, + and <code class="computeroutput"><span class="identifier">lazy</span></code> generators. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.h0"></a> + <span><a name="spirit.karma.reference.auxiliary.module_header"></a></span><a class="link" href="auxiliary.html#spirit.karma.reference.auxiliary.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auxiliary.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_auxiliary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="auto.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary/attr_cast.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auxiliary/attr_cast.html b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/attr_cast.html new file mode 100755 index 0000000000..73d5bee1cd --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/attr_cast.html @@ -0,0 +1,427 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Attribute Transformation Pseudo Generator (attr_cast)</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="Spirit 2.5.2"> +<link rel="up" href="../auxiliary.html" title="Auxiliary Generators"> +<link rel="prev" href="../auxiliary.html" title="Auxiliary Generators"> +<link rel="next" href="eol.html" title="End of Line Generator (eol)"> +</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="../auxiliary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="eol.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.auxiliary.attr_cast"></a><a class="link" href="attr_cast.html" title="Attribute Transformation Pseudo Generator (attr_cast)">Attribute + Transformation Pseudo Generator (<code class="computeroutput"><span class="identifier">attr_cast</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h0"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.description"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> + <span class="identifier">Transformed</span><span class="special">>()</span></code> + component invokes the embedded generator while supplying an attribute + of type <code class="computeroutput"><span class="identifier">Transformed</span></code>. + The supplied attribute gets created from the original attribute (of type + <code class="computeroutput"><span class="identifier">Exposed</span></code>) passed to this + component using the customization point <a class="link" href="../../../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h1"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.header"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auxiliary/attr_cast.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_attr_cast</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h2"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.namespace"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">attr_cast</span> <span class="comment">// + alias: boost::spirit::karma::attr_cast</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h3"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.synopsis"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">></span> +<span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> <span class="identifier">attr_cast</span><span class="special">(<</span><span class="identifier">unspecified</span><span class="special">>);</span> +</pre> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h4"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.template_parameters"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Exposed</span></code> + </p> + </td> +<td> + <p> + The type of the attribute supplied to the <code class="computeroutput"><span class="identifier">attr_cast</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Transformed</span></code> + </p> + </td> +<td> + <p> + The type of the attribute expected by the embedded generator + <code class="computeroutput"><span class="identifier">g</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + The <code class="computeroutput"><span class="identifier">attr_cast</span></code> is a function + template. It is possible to invoke it using the following schemes: + </p> +<pre class="programlisting"><span class="identifier">attr_cast</span><span class="special">(</span><span class="identifier">g</span><span class="special">)</span> +<span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span> +<span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> <span class="identifier">Transformed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span> +</pre> +<p> + depending on which of the attribute types can be deduced properly if + not explicitly specified. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h5"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.model_of"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A generator object. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h6"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.expression_semantics"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special">(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Create a component invoking the generator <code class="computeroutput"><span class="identifier">g</span></code> + while passing an attribute of the type as normally expected + by <code class="computeroutput"><span class="identifier">g</span></code>. The type + of the supplied attribute will be transformed to the type + <code class="computeroutput"><span class="identifier">g</span></code> exposes as + its attribute type (by using the attribute customization point + <a class="link" href="../../../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>). + This generator does not fail unless <code class="computeroutput"><span class="identifier">g</span></code> + fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Create a component invoking the generator <code class="computeroutput"><span class="identifier">g</span></code> + while passing an attribute of the type as normally expected + by <code class="computeroutput"><span class="identifier">g</span></code>. The supplied + attribute is expected to be of the type <code class="computeroutput"><span class="identifier">Exposed</span></code>, + it will be transformed to the type <code class="computeroutput"><span class="identifier">g</span></code> + exposes as its attribute type (using the attribute customization + point <a class="link" href="../../../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>). + This generator does not fail unless <code class="computeroutput"><span class="identifier">g</span></code> + fails. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> + <span class="identifier">Transformed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Create a component invoking the generator <code class="computeroutput"><span class="identifier">g</span></code> + while passing an attribute of type <code class="computeroutput"><span class="identifier">Transformed</span></code>. + The supplied attribute is expected to be of the type <code class="computeroutput"><span class="identifier">Exposed</span></code>, it will be transformed + to the type <code class="computeroutput"><span class="identifier">Transformed</span></code> + (using the attribute customization point <a class="link" href="../../../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>). + This generator does not fail unless <code class="computeroutput"><span class="identifier">g</span></code> + fails. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h7"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.attributes"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special">(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="identifier">attr_cast</span><span class="special">(</span><span class="identifier">g</span><span class="special">):</span> + <span class="identifier">A</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">):</span> + <span class="identifier">Exposed</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> + <span class="identifier">Transformed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="identifier">attr_cast</span><span class="special"><</span><span class="identifier">Exposed</span><span class="special">,</span> + <span class="identifier">Transformed</span><span class="special">>(</span><span class="identifier">g</span><span class="special">):</span> + <span class="identifier">Exposed</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h8"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.complexity"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The complexity of this component is fully defined by the complexity + of the embedded generator <code class="computeroutput"><span class="identifier">g</span></code>. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.auxiliary.attr_cast.h9"></a> + <span><a name="spirit.karma.reference.auxiliary.attr_cast.example"></a></span><a class="link" href="attr_cast.html#spirit.karma.reference.auxiliary.attr_cast.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + The example references data structure <code class="computeroutput"><span class="identifier">int_data</span></code> + which needs a specialization of the customization point <a class="link" href="../../../advanced/customize/transform.html" title="Transform an Attribute to a Different Type (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">transform_attribute</span></code></a>: + </p> +<p> +</p> +<pre class="programlisting"><span class="comment">// this is just a test structure we want to use in place of an int</span> +<span class="keyword">struct</span> <span class="identifier">int_data</span> +<span class="special">{</span> + <span class="keyword">int</span> <span class="identifier">i</span><span class="special">;</span> +<span class="special">};</span> + +<span class="comment">// we provide a custom attribute transformation to allow its use as an int</span> +<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">traits</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><></span> + <span class="keyword">struct</span> <span class="identifier">transform_attribute</span><span class="special"><</span><span class="identifier">int_data</span> <span class="keyword">const</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">domain</span><span class="special">></span> + <span class="special">{</span> + <span class="keyword">typedef</span> <span class="keyword">int</span> <span class="identifier">type</span><span class="special">;</span> + <span class="keyword">static</span> <span class="keyword">int</span> <span class="identifier">pre</span><span class="special">(</span><span class="identifier">int_data</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">d</span><span class="special">.</span><span class="identifier">i</span><span class="special">;</span> <span class="special">}</span> + <span class="special">};</span> +<span class="special">}}}</span> +</pre> +<p> + </p> +<p> + Now we use the <code class="computeroutput"><span class="identifier">attr_cast</span></code> + pseudo generator to invoke the attribute transformation: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">int_data</span> <span class="identifier">d</span> <span class="special">=</span> <span class="special">{</span> <span class="number">1</span> <span class="special">};</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1"</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">attr_cast</span><span class="special">(</span><span class="identifier">int_</span><span class="special">),</span> <span class="identifier">d</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../auxiliary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="eol.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eol.html b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eol.html new file mode 100755 index 0000000000..9e52df8b29 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eol.html @@ -0,0 +1,225 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>End of Line Generator (eol)</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="Spirit 2.5.2"> +<link rel="up" href="../auxiliary.html" title="Auxiliary Generators"> +<link rel="prev" href="attr_cast.html" title="Attribute Transformation Pseudo Generator (attr_cast)"> +<link rel="next" href="eps.html" title="Epsilon Generator (eps)"> +</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="attr_cast.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="eps.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.auxiliary.eol"></a><a class="link" href="eol.html" title="End of Line Generator (eol)">End of Line + Generator (<code class="computeroutput"><span class="identifier">eol</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h0"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.description"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">eol</span></code> component generates + a single newline character. It is equivalent to <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="char">'\n'</span><span class="special">)</span></code> + or simply '\n' (please see the <a class="link" href="../char/char_generator.html" title="Character Generators (char_, lit)"><code class="computeroutput"><span class="identifier">char_</span></code></a> generator module for more + details). + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h1"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.header"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auxiliary/eol.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_eol</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h2"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.namespace"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">eol</span> <span class="comment">// alias: + boost::spirit::karma::eol</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h3"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.model_of"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h4"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.expression_semantics"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eol</span></code> + </p> + </td> +<td> + <p> + Create a component generating a single end of line character + in the output. This generator never fails (unless the underlying + output stream reports an error). + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h5"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.attributes"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eol</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h6"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.complexity"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(1) + </p></blockquote></div> +<p> + The complexity is constant as a single character is generated in the + output. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eol.h7"></a> + <span><a name="spirit.karma.reference.auxiliary.eol.example"></a></span><a class="link" href="eol.html#spirit.karma.reference.auxiliary.eol.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">eol</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">eol</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"\n"</span><span class="special">,</span> <span class="identifier">eol</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc\n"</span><span class="special">,</span> <span class="string">"abc"</span> <span class="special"><<</span> <span class="identifier">eol</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="attr_cast.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="eps.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eps.html b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eps.html new file mode 100755 index 0000000000..358870d67c --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/eps.html @@ -0,0 +1,346 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Epsilon Generator (eps)</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="Spirit 2.5.2"> +<link rel="up" href="../auxiliary.html" title="Auxiliary Generators"> +<link rel="prev" href="eol.html" title="End of Line Generator (eol)"> +<link rel="next" href="lazy.html" title="Lazy Generator (lazy)"> +</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="eol.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="lazy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.auxiliary.eps"></a><a class="link" href="eps.html" title="Epsilon Generator (eps)">Epsilon Generator + (<code class="computeroutput"><span class="identifier">eps</span></code>)</a> +</h5></div></div></div> +<p> + The family of <code class="computeroutput"><span class="identifier">eps</span></code> components + allows to create pseudo generators generating an empty string. This feature + is sometimes useful either to force a generator to fail or to succeed + or to insert semantic actions into the generation process. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h0"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.description"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.description">Description</a> + </h6> +<p> + The Epsilon (<code class="computeroutput"><span class="identifier">eps</span></code>) is + a multi-purpose generator that emits a zero length string. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h1"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.simple_form"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.simple_form">Simple Form</a> + </h6> +<p> + In its simplest form, <code class="computeroutput"><span class="identifier">eps</span></code> + creates a component generating an empty string while always succeeding: + </p> +<pre class="programlisting"><span class="identifier">eps</span> <span class="comment">// always emits a zero-length string</span> +</pre> +<p> + This form is usually used to trigger a semantic action unconditionally. + For example, it is useful in triggering error messages when a set of + alternatives fail: + </p> +<pre class="programlisting"><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> <span class="identifier">c</span> <span class="special">|</span> <span class="identifier">eps</span><span class="special">[</span><span class="identifier">error</span><span class="special">()];</span> <span class="comment">// Call error if a, b, and c fail to generate</span> +</pre> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h2"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.semantic_predicate"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.semantic_predicate">Semantic + Predicate</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + component generates an empty string as well, but succeeds only if <code class="computeroutput"><span class="identifier">b</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> + and fails otherwise. It's lazy variant <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">fb</span><span class="special">)</span></code> is equivalent to <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> except it evaluates the supplied function + <code class="computeroutput"><span class="identifier">fb</span></code> at generate time, + while using the return value as the criteria to succeed. + </p> +<p> + Semantic predicates allow you to attach a conditional function anywhere + in the grammar. In this role, the epsilon takes a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that returns <code class="computeroutput"><span class="keyword">true</span></code> + or <code class="computeroutput"><span class="keyword">false</span></code>. The <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> is typically a test that is called to resolve ambiguity + in the grammar. A generator failure will be reported when the <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> result evaluates to <code class="computeroutput"><span class="keyword">false</span></code>. + Otherwise an empty string will be emitted. The general form is: + </p> +<pre class="programlisting"><span class="identifier">eps_p</span><span class="special">(</span><span class="identifier">fb</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">rest</span><span class="special">;</span> +</pre> +<p> + The <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> <code class="computeroutput"><span class="identifier">fb</span></code> is + called to do a semantic test. If the test returns true, <code class="computeroutput"><span class="identifier">rest</span></code> will be evaluated. Otherwise, + the production will return early without ever touching rest. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h3"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.header"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auxiliary/eps.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_eps</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h4"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.namespace"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">eps</span> <span class="comment">// alias: + boost::spirit::karma::eps</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h5"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.model_of"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">b</span></code></span></dt> +<dd><p> + A boolean value. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">fb</span></code></span></dt> +<dd><p> + A <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a boolean value. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h6"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.expression_semantics"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</span></code> + </p> + </td> +<td> + <p> + Creates a component generating an empty string. Succeeds always. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Creates a component generating an empty string. Succeeds if + <code class="computeroutput"><span class="identifier">b</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">fb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Creates a component generating an empty string. Succeeds if + <code class="computeroutput"><span class="identifier">fb</span></code> returns + <code class="computeroutput"><span class="keyword">true</span></code> at generate + time (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h7"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.attributes"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">eps</span><span class="special">(</span><span class="identifier">fb</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h8"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.complexity"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(1) + </p></blockquote></div> +<p> + The complexity is constant as no output is generated. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.eps.h9"></a> + <span><a name="spirit.karma.reference.auxiliary.eps.example"></a></span><a class="link" href="eps.html#spirit.karma.reference.auxiliary.eps.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">eps</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">val</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">eps</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">eps</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">"starting eps example"</span><span class="special">)]</span> <span class="special"><<</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">eps</span><span class="special">(</span><span class="keyword">true</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">eps</span><span class="special">(</span><span class="keyword">false</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span><span class="special">);</span> <span class="comment">// fails as eps expression is 'false'</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="eol.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="lazy.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/auxiliary/lazy.html b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/lazy.html new file mode 100755 index 0000000000..2ca1962229 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/auxiliary/lazy.html @@ -0,0 +1,295 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Lazy Generator (lazy)</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="Spirit 2.5.2"> +<link rel="up" href="../auxiliary.html" title="Auxiliary Generators"> +<link rel="prev" href="eps.html" title="Epsilon Generator (eps)"> +<link rel="next" href="../binary.html" title="Binary Generators"> +</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="eps.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="../binary.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.auxiliary.lazy"></a><a class="link" href="lazy.html" title="Lazy Generator (lazy)">Lazy Generator + (<code class="computeroutput"><span class="identifier">lazy</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h0"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.description"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.description">Description</a> + </h6> +<p> + The family of <code class="computeroutput"><span class="identifier">lazy</span></code> components + allows to use a dynamically returned generator component for output generation. + It calls the provided function or function object at generate time using + its return value as the actual generator to produce the output. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h1"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.header"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auxiliary/lazy.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_lazy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h2"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.namespace"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lazy</span> <span class="comment">// alias: + boost::spirit::karma::lazy</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h3"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.model_of"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">fg</span></code></span></dt> +<dd><p> + A function or function object that evaluates to a generator object + (an object exposing the <a class="link" href="../generator_concepts/generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>). This function + will be invoked at generate time. + </p></dd> +</dl> +</div> +<p> + The signature of <code class="computeroutput"><span class="identifier">fg</span></code> is + expected to be + </p> +<pre class="programlisting"><span class="identifier">G</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">Context</span><span class="special">)</span> +</pre> +<p> + where <code class="computeroutput"><span class="identifier">G</span></code>, the function's + return value, is the type of the generator to be invoked, and <code class="computeroutput"><span class="identifier">Context</span></code> is the generator's Context + type (The first argument is <code class="computeroutput"><span class="identifier">unused</span></code> + to make the <code class="computeroutput"><span class="identifier">Context</span></code> the + second argument. This is done for uniformity with <a class="link" href="../../tutorials/semantic_actions.html" title="Generator Semantic Actions">Semantic + Actions</a>). + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h4"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.expression_semantics"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">fg</span></code> + </p> + </td> +<td> + <p> + The <a href="../../../../../../../../libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a> + function object <code class="computeroutput"><span class="identifier">fg</span></code> + will be invoked at generate time. It is expected to return + a generator instance. This generator is then invoked in order + to generate the output. This generator will succeed as long + as the invoked generated succeeds as well (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lazy</span><span class="special">(</span><span class="identifier">fg</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + The function or function object will be invoked at generate + time. It is expected to return a generator instance (note this + version of <code class="computeroutput"><span class="identifier">lazy</span></code> + does not require <code class="computeroutput"><span class="identifier">fg</span></code> + to be a <a href="../../../../../../../../libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a> + function object). This generator is then invoked in order to + generate the output. This generator will succeed as long as + the invoked generated succeeds as well (except if the underlying + output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h5"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.attributes"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">fg</span></code> + </p> + </td> +<td> + <p> + The attribute type <code class="computeroutput"><span class="identifier">G</span></code> + as exposed by the generator <code class="computeroutput"><span class="identifier">g</span></code> + returned from <code class="computeroutput"><span class="identifier">fg</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lazy</span><span class="special">(</span><span class="identifier">fg</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + The attribute type <code class="computeroutput"><span class="identifier">G</span></code> + as exposed by the generator <code class="computeroutput"><span class="identifier">g</span></code> + returned from <code class="computeroutput"><span class="identifier">fg</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h6"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.complexity"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.complexity">Complexity</a> + </h6> +<p> + The complexity of the <code class="computeroutput"><span class="identifier">lazy</span></code> + component is determined by the complexity of the generator returned from + <code class="computeroutput"><span class="identifier">fg</span></code>. + </p> +<h6> +<a name="spirit.karma.reference.auxiliary.lazy.h7"></a> + <span><a name="spirit.karma.reference.auxiliary.lazy.example"></a></span><a class="link" href="lazy.html#spirit.karma.reference.auxiliary.lazy.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">karma</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">_1</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">string</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">val</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">lazy</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">lazy</span><span class="special">(</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">string</span><span class="special">)),</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">lazy</span><span class="special">(</span><span class="identifier">val</span><span class="special">(</span><span class="identifier">string</span><span class="special">))[</span><span class="identifier">_1</span> <span class="special">=</span> <span class="string">"abc"</span><span class="special">]);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="eps.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="../binary.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/basics.html b/libs/spirit/doc/html/spirit/karma/reference/basics.html new file mode 100755 index 0000000000..f2e7113a17 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/basics.html @@ -0,0 +1,295 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Basics</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="generator_concepts/nonterminal.html" title="Nonterminal"> +<link rel="next" href="generate_api.html" title="Generator API"> +</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="generator_concepts/nonterminal.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generate_api.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="spirit.karma.reference.basics"></a><a class="link" href="basics.html" title="Generator Basics">Generator Basics</a> +</h4></div></div></div> +<h6> +<a name="spirit.karma.reference.basics.h0"></a> + <span><a name="spirit.karma.reference.basics.lazy_argument"></a></span><a class="link" href="basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> + </h6> +<p> + Some generators (e.g. primitives and non-terminals) may take in additional + attributes. Such generators take the form: + </p> +<pre class="programlisting"><span class="identifier">g</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="identifier">aN</span><span class="special">)</span> +</pre> +<p> + where <code class="computeroutput"><span class="identifier">g</span></code> is a generator. + Each of the arguments (a1 ... aN) can either be an immediate value, or + a function, <code class="computeroutput"><span class="identifier">f</span></code>, with signature: + </p> +<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">Context</span><span class="special">)</span> +</pre> +<p> + where <code class="computeroutput"><span class="identifier">T</span></code>, the function's + return value, is compatible with the argument type expected and <code class="computeroutput"><span class="identifier">Context</span></code> is the generator's Context type + (The first argument is <code class="computeroutput"><span class="identifier">unused</span></code> + to make the <code class="computeroutput"><span class="identifier">Context</span></code> the + second argument. This is done for uniformity with <a class="link" href="../tutorials/semantic_actions.html" title="Generator Semantic Actions">Semantic + Actions</a>). + </p> +<h6> +<a name="spirit.karma.reference.basics.h1"></a> + <span><a name="spirit.karma.reference.basics.character_encoding_namespace"></a></span><a class="link" href="basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> + </h6> +<p> + Some generators need to know which character set a <code class="computeroutput"><span class="keyword">char</span></code> + or <code class="computeroutput"><span class="keyword">wchar_t</span></code> is operating on. + For example, the <code class="computeroutput"><span class="identifier">alnum</span></code> + generator works differently with ISO8859.1 and ASCII encodings. Where necessary, + Spirit encodes (tags) the generator with the character set. + </p> +<p> + We have a namespace for each character set Spirit will be supporting. That + includes <code class="computeroutput"><span class="identifier">ascii</span></code>, <code class="computeroutput"><span class="identifier">iso8859_1</span></code>, <code class="computeroutput"><span class="identifier">standard</span></code> + and <code class="computeroutput"><span class="identifier">standard_wide</span></code> (and + in the future, <code class="computeroutput"><span class="identifier">unicode</span></code>). + In each of the character encoding namespaces, we place tagged versions + of generators such as <code class="computeroutput"><span class="identifier">alnum</span></code>, + <code class="computeroutput"><span class="identifier">space</span></code> etc. + </p> +<p> + Example: + </p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> <span class="comment">// use the ASCII space generator</span> +</pre> +<p> + Namespaces: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + boost::spirit::ascii + </li> +<li class="listitem"> + boost::spirit::iso8859_1 + </li> +<li class="listitem"> + boost::spirit::standard + </li> +<li class="listitem"> + boost::spirit::standard_wide + </li> +</ul></div> +<p> + For ease of use, the components in this namespaces are also brought into + the karma sub-namespaces with the same names: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + boost::spirit::karma::ascii + </li> +<li class="listitem"> + boost::spirit::karma::iso8859_1 + </li> +<li class="listitem"> + boost::spirit::karma::standard + </li> +<li class="listitem"> + boost::spirit::karma::standard_wide + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.basics.h2"></a> + <span><a name="spirit.karma.reference.basics.examples"></a></span><a class="link" href="basics.html#spirit.karma.reference.basics.examples">Examples</a> + </h6> +<p> + All sections in the reference present some real world examples. The examples + use a common test harness to keep the example code as minimal and direct + to the point as possible. The test harness is presented below. + </p> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + The used output iterator: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">output_iterator_type</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Our test functions: + </p> +<p> + This one tests the generators without attributes. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">test_generator</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">s</span> <span class="special">==</span> <span class="identifier">expected</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<p> + These test the generators with one or more user supplied attributes. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</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="identifier">test_generator_attr</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">s</span> <span class="special">==</span> <span class="identifier">expected</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">test_generator_attr</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">T1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> + <span class="identifier">T2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">attr2</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">s</span> <span class="special">==</span> <span class="identifier">expected</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<p> + This tests the generators with one attribute and while using delimited + output. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</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="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate_delimited</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">s</span> <span class="special">==</span> <span class="identifier">expected</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<p> + The examples of the binary generators use one or more of the following + tests. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</span><span class="special">></span> +<span class="keyword">void</span> <span class="identifier">test_binary_generator</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">memcmp</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">(),</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">size</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">G</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="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">G</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">T</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> + <span class="keyword">if</span> <span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">memcmp</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">c_str</span><span class="special">(),</span> <span class="identifier">expected</span><span class="special">,</span> <span class="identifier">size</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="string">"ok"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> + <span class="keyword">else</span> + <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"fail"</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> + </p> +<h6> +<a name="spirit.karma.reference.basics.h3"></a> + <span><a name="spirit.karma.reference.basics.models"></a></span><a class="link" href="basics.html#spirit.karma.reference.basics.models">Models</a> + </h6> +<p> + Predefined models include: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + any literal string, e.g. "Hello, World", + </li> +<li class="listitem"> + a pointer/reference to a null-terminated array of characters + </li> +<li class="listitem"> + a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">Char</span><span class="special">></span></code> + </li> +</ul></div> +<p> + The namespace <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">traits</span></code> is open for users to provide their + own specializations. The customization points implemented by <span class="emphasis"><em>Spirit.Karma</em></span> + usable to customize the behavior of generators are described in the section + <a class="link" href="../../advanced/customize.html" title="Customization of Spirit's Attribute Handling">Customization of Attribute Handling</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="generator_concepts/nonterminal.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generate_api.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/binary.html b/libs/spirit/doc/html/spirit/karma/reference/binary.html new file mode 100755 index 0000000000..916d6d7ed5 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/binary.html @@ -0,0 +1,68 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binary Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="auxiliary/lazy.html" title="Lazy Generator (lazy)"> +<link rel="next" href="binary/binary_native.html" title="Binary Native Endianness Generators"> +</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="auxiliary/lazy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="binary/binary_native.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="spirit.karma.reference.binary"></a><a class="link" href="binary.html" title="Binary Generators">Binary Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="binary/binary_native.html">Binary + Native Endianness Generators</a></span></dt> +<dt><span class="section"><a href="binary/binary_little.html">Binary + Little Endianness Generators</a></span></dt> +<dt><span class="section"><a href="binary/binary_big.html">Binary + Big Endianness Generators</a></span></dt> +</dl></div> +<p> + This module includes different generators allowing to output binary data. + It includes generators for default, little, and big endian binary output + and a <code class="computeroutput"><span class="identifier">pad</span></code> generator allowing + to control padding of the generated output stream. + </p> +<h6> +<a name="spirit.karma.reference.binary.h0"></a> + <span><a name="spirit.karma.reference.binary.module_header"></a></span><a class="link" href="binary.html#spirit.karma.reference.binary.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/binary.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_binary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="auxiliary/lazy.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="binary/binary_native.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/binary/binary_big.html b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_big.html new file mode 100755 index 0000000000..3fba69add2 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_big.html @@ -0,0 +1,549 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binary Big Endianness Generators</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="Spirit 2.5.2"> +<link rel="up" href="../binary.html" title="Binary Generators"> +<link rel="prev" href="binary_little.html" title="Binary Little Endianness Generators"> +<link rel="next" href="../char.html" title="Char Generators"> +</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="binary_little.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="../char.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.binary.binary_big"></a><a class="link" href="binary_big.html" title="Binary Big Endianness Generators">Binary + Big Endianness Generators</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h0"></a> + <span><a name="spirit.karma.reference.binary.binary_big.description"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.description">Description</a> + </h6> +<p> + The big native endianness generators described in this section are used + to emit binary byte streams laid out conforming to the big endianness + byte order. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h1"></a> + <span><a name="spirit.karma.reference.binary.binary_big.header"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/binary.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_binary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h2"></a> + <span><a name="spirit.karma.reference.binary.binary_big.namespace"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_word</span> <span class="comment">// + alias: boost::spirit::karma::big_word</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_dword</span> <span class="comment">// + alias: boost::spirit::karma::big_dword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_qword</span> <span class="comment">// + alias: boost::spirit::karma::big_qword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_bin_float</span> <span class="comment">// + alias: boost::spirit::karma::big_bin_float</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">big_bin_double</span> <span class="comment">// + alias: boost::spirit::karma::big_bin_double</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">big_qword</span></code> + and <code class="computeroutput"><span class="identifier">big_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + are only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">long</span> <span class="keyword">long</span></code> + (64 bit) integer types). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h3"></a> + <span><a name="spirit.karma.reference.binary.binary_big.model_of"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">w</span></code></span></dt> +<dd><p> + A 16 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 16 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">dw</span></code></span></dt> +<dd><p> + A 32 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 32 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">qw</span></code></span></dt> +<dd><p> + A 64 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 64 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> +<dd><p> + A float binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a float binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">d</span></code></span></dt> +<dd><p> + A double binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a double binary value. This value + is always interpreted using native endianness. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h4"></a> + <span><a name="spirit.karma.reference.binary.binary_big.expression_semantics"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_word</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the mandatory attribute in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_dword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the mandatory attribute in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_qword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the mandatory attribute in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_float</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory float attribute + in big endian representation. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_double</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory double attribute + in big endian representation. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the immediate parameter in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the immediate parameter in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the immediate parameter in big endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_float</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate float parameter + in big endian representation. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_double</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate double parameter + in big endian representation. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h5"></a> + <span><a name="spirit.karma.reference.binary.binary_big.attributes"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_word</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least16_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_dword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least32_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_qword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least64_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_float</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_float</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">big_bin_double</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">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h6"></a> + <span><a name="spirit.karma.reference.binary.binary_big.complexity"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where N is the number of bytes emitted by the binary generator + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.binary.binary_big.h7"></a> + <span><a name="spirit.karma.reference.binary.binary_big.example"></a></span><a class="link" href="binary_big.html#spirit.karma.reference.binary.binary_big.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">big_word</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">big_dword</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">big_qword</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the big binary generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x02\x01"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">big_word</span><span class="special">(</span><span class="number">0x0201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">big_dword</span><span class="special">(</span><span class="number">0x04030201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x08\x07\x06\x05\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">big_qword</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">));</span> + +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x02\x01"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">big_word</span><span class="special">,</span> <span class="number">0x0201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">big_dword</span><span class="special">,</span> <span class="number">0x04030201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x08\x07\x06\x05\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">big_qword</span><span class="special">,</span> <span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="binary_little.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="../char.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/binary/binary_little.html b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_little.html new file mode 100755 index 0000000000..827c3d200e --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_little.html @@ -0,0 +1,550 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binary Little Endianness Generators</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="Spirit 2.5.2"> +<link rel="up" href="../binary.html" title="Binary Generators"> +<link rel="prev" href="binary_native.html" title="Binary Native Endianness Generators"> +<link rel="next" href="binary_big.html" title="Binary Big Endianness Generators"> +</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="binary_native.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="binary_big.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.binary.binary_little"></a><a class="link" href="binary_little.html" title="Binary Little Endianness Generators">Binary + Little Endianness Generators</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h0"></a> + <span><a name="spirit.karma.reference.binary.binary_little.description"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.description">Description</a> + </h6> +<p> + The little native endianness generators described in this section are + used to emit binary byte streams laid out conforming to the little endianness + byte order. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h1"></a> + <span><a name="spirit.karma.reference.binary.binary_little.header"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/binary.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_binary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h2"></a> + <span><a name="spirit.karma.reference.binary.binary_little.namespace"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">little_word</span> <span class="comment">// + alias: boost::spirit::karma::little_word</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">little_dword</span> <span class="comment">// + alias: boost::spirit::karma::little_dword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">little_qword</span> <span class="comment">// + alias: boost::spirit::karma::little_qword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">little_bin_float</span> <span class="comment">// + alias: boost::spirit::karma::little_bin_float</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">little_bin_double</span> <span class="comment">// + alias: boost::spirit::karma::little_bin_double</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">little_qword</span></code> + and <code class="computeroutput"><span class="identifier">little_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + are only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">long</span> <span class="keyword">long</span></code> + (64 bit) integer types). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h3"></a> + <span><a name="spirit.karma.reference.binary.binary_little.model_of"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">w</span></code></span></dt> +<dd><p> + A 16 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 16 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">dw</span></code></span></dt> +<dd><p> + A 32 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 32 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">qw</span></code></span></dt> +<dd><p> + A 64 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 64 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> +<dd><p> + A float binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a float binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">d</span></code></span></dt> +<dd><p> + A double binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a double binary value. This value + is always interpreted using native endianness. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h4"></a> + <span><a name="spirit.karma.reference.binary.binary_little.expression_semantics"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_word</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the mandatory attribute in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_dword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the mandatory attribute in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_qword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the mandatory attribute in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_float</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory float attribute + in little endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_double</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory double attribute + in little endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the immediate parameter in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the immediate parameter in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the immediate parameter in little endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_float</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate float parameter + in little endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_double</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate double parameter + in little endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h5"></a> + <span><a name="spirit.karma.reference.binary.binary_little.attributes"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_word</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least16_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_dword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least32_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_qword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least64_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_float</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_float</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">little_bin_double</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">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h6"></a> + <span><a name="spirit.karma.reference.binary.binary_little.complexity"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where N is the number of bytes emitted by the binary generator + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.binary.binary_little.h7"></a> + <span><a name="spirit.karma.reference.binary.binary_little.example"></a></span><a class="link" href="binary_little.html#spirit.karma.reference.binary.binary_little.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">little_word</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">little_dword</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">little_qword</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the little binary generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">little_word</span><span class="special">(</span><span class="number">0x0201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">little_dword</span><span class="special">(</span><span class="number">0x04030201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">little_qword</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">));</span> + +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">little_word</span><span class="special">,</span> <span class="number">0x0201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">little_dword</span><span class="special">,</span> <span class="number">0x04030201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">little_qword</span><span class="special">,</span> <span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="binary_native.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="binary_big.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/binary/binary_native.html b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_native.html new file mode 100755 index 0000000000..2a08ed7bd9 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/binary/binary_native.html @@ -0,0 +1,649 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Binary Native Endianness Generators</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="Spirit 2.5.2"> +<link rel="up" href="../binary.html" title="Binary Generators"> +<link rel="prev" href="../binary.html" title="Binary Generators"> +<link rel="next" href="binary_little.html" title="Binary Little Endianness Generators"> +</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="../binary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="binary_little.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.binary.binary_native"></a><a class="link" href="binary_native.html" title="Binary Native Endianness Generators">Binary + Native Endianness Generators</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h0"></a> + <span><a name="spirit.karma.reference.binary.binary_native.description"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.description">Description</a> + </h6> +<p> + The binary native endianness generators described in this section are + used to emit binary byte streams laid out conforming to the native endianness + (byte order) of the target architecture. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h1"></a> + <span><a name="spirit.karma.reference.binary.binary_native.header"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/binary.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_binary</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h2"></a> + <span><a name="spirit.karma.reference.binary.binary_native.namespace"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">byte_</span> <span class="comment">// + alias: boost::spirit::karma::byte_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">word</span> <span class="comment">// alias: + boost::spirit::karma::word</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">dword</span> <span class="comment">// + alias: boost::spirit::karma::dword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qword</span> <span class="comment">// + alias: boost::spirit::karma::qword</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">bin_float</span> <span class="comment">// + alias: boost::spirit::karma::bin_float</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">bin_double</span> <span class="comment">// + alias: boost::spirit::karma::bin_double</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">qword</span></code> + and <code class="computeroutput"><span class="identifier">qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + are only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">long</span> <span class="keyword">long</span></code> + (64 bit) integer types). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h3"></a> + <span><a name="spirit.karma.reference.binary.binary_native.model_of"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">b</span></code></span></dt> +<dd><p> + A single byte (8 bit binary value) or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a single byte + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">w</span></code></span></dt> +<dd><p> + A 16 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 16 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">dw</span></code></span></dt> +<dd><p> + A 32 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 32 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">qw</span></code></span></dt> +<dd><p> + A 64 bit binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a 64 bit binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> +<dd><p> + A float binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a float binary value. This value + is always interpreted using native endianness. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">d</span></code></span></dt> +<dd><p> + A double binary value or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a double binary value. This value + is always interpreted using native endianness. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h4"></a> + <span><a name="spirit.karma.reference.binary.binary_native.expression_semantics"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">byte_</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant byte + of the mandatory attribute. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">word</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the mandatory attribute in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">dword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the mandatory attribute in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">qword</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the mandatory attribute in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_float</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory float attribute + in native endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_double</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the mandatory double attribute + in native endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">byte_</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant byte + of the immediate parameter. This generator never fails (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 16 + bits of the immediate parameter in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 32 + bits of the immediate parameter in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the least significant 64 + bits of the immediate parameter in native endian representation. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_float</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate float parameter + in native endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_double</span><span class="special">(</span><span class="identifier">d</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Output the binary representation of the immediate double parameter + in native endian representation. This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h5"></a> + <span><a name="spirit.karma.reference.binary.binary_native.attributes"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">byte_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least8_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">word</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least16_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">dword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least32_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">qword</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint_least64_t</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_float</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">byte_</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">word</span><span class="special">(</span><span class="identifier">w</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">dword</span><span class="special">(</span><span class="identifier">dw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">qword</span><span class="special">(</span><span class="identifier">qw</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_float</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bin_double</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">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Attrib</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Attrib</span></code> and emit the value stored + in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h6"></a> + <span><a name="spirit.karma.reference.binary.binary_native.complexity"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where N is the number of bytes emitted by the binary generator + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.binary.binary_native.h7"></a> + <span><a name="spirit.karma.reference.binary.binary_native.example"></a></span><a class="link" href="binary_native.html#spirit.karma.reference.binary.binary_native.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">byte_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">word</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">dword</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">qword</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the native binary generators with some results for little + endian platforms: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01"</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">byte_</span><span class="special">(</span><span class="number">0x01</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">word</span><span class="special">(</span><span class="number">0x0201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">dword</span><span class="special">(</span><span class="number">0x04030201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">qword</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">));</span> + +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01"</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">byte_</span><span class="special">,</span> <span class="number">0x01</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="number">0x0201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">dword</span><span class="special">,</span> <span class="number">0x04030201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01\x02\x03\x04\x05\x06\x07\x08"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">qword</span><span class="special">,</span> <span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + Basic usage of the native binary generators with some results for big + endian platforms: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x01"</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">byte_</span><span class="special">(</span><span class="number">0x01</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x02\x01"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">word</span><span class="special">(</span><span class="number">0x0201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">dword</span><span class="special">(</span><span class="number">0x04030201</span><span class="special">));</span> +<span class="identifier">test_binary_generator</span><span class="special">(</span><span class="string">"\x08\x07\x06\x05\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">qword</span><span class="special">(</span><span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">));</span> + +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x01"</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">byte_</span><span class="special">,</span> <span class="number">0x01</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x02\x01"</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">word</span><span class="special">,</span> <span class="number">0x0201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">4</span><span class="special">,</span> <span class="identifier">dword</span><span class="special">,</span> <span class="number">0x04030201</span><span class="special">);</span> +<span class="identifier">test_binary_generator_attr</span><span class="special">(</span><span class="string">"\x08\x07\x06\x05\x04\x03\x02\x01"</span><span class="special">,</span> <span class="number">8</span><span class="special">,</span> <span class="identifier">qword</span><span class="special">,</span> <span class="number">0</span><span class="identifier">x0807060504030201LL</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../binary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../binary.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="binary_little.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/char.html b/libs/spirit/doc/html/spirit/karma/reference/char.html new file mode 100755 index 0000000000..d3ad03a91e --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/char.html @@ -0,0 +1,69 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Char Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="binary/binary_big.html" title="Binary Big Endianness Generators"> +<link rel="next" href="char/char_generator.html" title="Character Generators (char_, lit)"> +</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="binary/binary_big.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="char/char_generator.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="spirit.karma.reference.char"></a><a class="link" href="char.html" title="Char Generators">Char Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="char/char_generator.html">Character + Generators (<code class="computeroutput"><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a></span></dt> +<dt><span class="section"><a href="char/char_class.html">Character + Classification Generators (<code class="computeroutput"><span class="identifier">alnum</span></code>, + <code class="computeroutput"><span class="identifier">digit</span></code>, etc.)</a></span></dt> +</dl></div> +<p> + This module includes different character oriented generators allowing to + output single characters. Currently, it includes literal chars (e.g. <code class="computeroutput"><span class="char">'x'</span></code>, <code class="computeroutput"><span class="identifier">L</span><span class="char">'x'</span></code>), <code class="computeroutput"><span class="identifier">char_</span></code> + (single characters, ranges and character sets) and the encoding specific + character classifiers (<code class="computeroutput"><span class="identifier">alnum</span></code>, + <code class="computeroutput"><span class="identifier">alpha</span></code>, <code class="computeroutput"><span class="identifier">digit</span></code>, + <code class="computeroutput"><span class="identifier">xdigit</span></code>, etc.). + </p> +<h6> +<a name="spirit.karma.reference.char.h0"></a> + <span><a name="spirit.karma.reference.char.module_header"></a></span><a class="link" href="char.html#spirit.karma.reference.char.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/char.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="binary/binary_big.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="char/char_generator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/char/char_class.html b/libs/spirit/doc/html/spirit/karma/reference/char/char_class.html new file mode 100755 index 0000000000..d7048e27be --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/char/char_class.html @@ -0,0 +1,503 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Character Classification Generators (alnum, digit, etc.)</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="Spirit 2.5.2"> +<link rel="up" href="../char.html" title="Char Generators"> +<link rel="prev" href="char_generator.html" title="Character Generators (char_, lit)"> +<link rel="next" href="../directive.html" title="Generator Directives"> +</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="char_generator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="../directive.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.char.char_class"></a><a class="link" href="char_class.html" title="Character Classification Generators (alnum, digit, etc.)">Character + Classification Generators (<code class="computeroutput"><span class="identifier">alnum</span></code>, + <code class="computeroutput"><span class="identifier">digit</span></code>, etc.)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.char.char_class.h0"></a> + <span><a name="spirit.karma.reference.char.char_class.description"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.description">Description</a> + </h6> +<p> + The library has the full repertoire of single character generators for + character classification. This includes the usual <code class="computeroutput"><span class="identifier">alnum</span></code>, + <code class="computeroutput"><span class="identifier">alpha</span></code>, <code class="computeroutput"><span class="identifier">digit</span></code>, <code class="computeroutput"><span class="identifier">xdigit</span></code>, + etc. generators. These generators have an associated <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. This is needed when doing basic operations + such as forcing lower or upper case. + </p> +<h6> +<a name="spirit.karma.reference.char.char_class.h1"></a> + <span><a name="spirit.karma.reference.char.char_class.header"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/char/char_class.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_char_class</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.char.char_class.h2"></a> + <span><a name="spirit.karma.reference.char.char_class.namespace"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">alnum</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">alpha</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">blank</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">cntrl</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">digit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">graph</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">print</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">punct</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">space</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">xdigit</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<p> + In the table above, <code class="computeroutput"><span class="identifier">ns</span></code> + represents a <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> used by the corresponding character class generator. + All listed generators have a mandatory attribute <code class="computeroutput"><span class="identifier">Ch</span></code> + and will not compile if no attribute is associated. + </p> +<h6> +<a name="spirit.karma.reference.char.char_class.h3"></a> + <span><a name="spirit.karma.reference.char.char_class.model_of"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt> +<dd><p> + A <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.char.char_class.h4"></a> + <span><a name="spirit.karma.reference.char.char_class.expression_semantics"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">alnum</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isalnum</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">alpha</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isalpha</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">blank</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isblank</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">cntrl</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iscntrl</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">digit</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isdigit</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">graph</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isgraph</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">print</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isprint</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">punct</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ispunct</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">xdigit</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isxdigit</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">islower</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span></code> + </p> + </td> +<td> + <p> + If the mandatory attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isupper</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">space</span></code> + </p> + </td> +<td> + <p> + If the optional attribute satisfies the concept of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isspace</span></code> in the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> the generator succeeds after emitting + its attribute (unless the underlying output stream reports + an error). This generator fails otherwise while not generating + anything.If no attribute is supplied this generator emits a + single space character in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Possible values for <code class="computeroutput"><span class="identifier">ns</span></code> + are described in the section <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The generators <code class="computeroutput"><span class="identifier">alpha</span></code> + and <code class="computeroutput"><span class="identifier">alnum</span></code> might seem + to behave unexpected if used inside a <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> directive. Both directives additionally + apply the semantics of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">islower</span></code> + or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">isupper</span></code> to the respective character + class. Some examples: +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">s</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert_iterator</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">out</span><span class="special">(</span><span class="identifier">s</span><span class="special">);</span> +<span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">lower</span><span class="special">[</span><span class="identifier">alpha</span><span class="special">],</span> <span class="char">'a'</span><span class="special">);</span> <span class="comment">// succeeds emitting 'a'</span> +<span class="identifier">generate</span><span class="special">(</span><span class="identifier">out</span><span class="special">,</span> <span class="identifier">lower</span><span class="special">[</span><span class="identifier">alpha</span><span class="special">],</span> <span class="char">'A'</span><span class="special">);</span> <span class="comment">// fails </span> +</pre> +<p> + The generator directive <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> behaves correspondingly. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.char.char_class.h5"></a> + <span><a name="spirit.karma.reference.char.char_class.attributes"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.attributes">Attributes</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + All listed character class generators can take any attribute <code class="computeroutput"><span class="identifier">Ch</span></code>. All character class generators + (except <code class="computeroutput"><span class="identifier">space</span></code>) require + an attribute and will fail compiling otherwise. + </p></blockquote></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Ch</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Ch</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Ch</span></code> and emit the value stored in the + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.char.char_class.h6"></a> + <span><a name="spirit.karma.reference.char.char_class.complexity"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(1) + </p></blockquote></div> +<p> + The complexity is constant as the generators emit not more than one character + per invocation. + </p> +<h6> +<a name="spirit.karma.reference.char.char_class.h7"></a> + <span><a name="spirit.karma.reference.char.char_class.example"></a></span><a class="link" href="char_class.html#spirit.karma.reference.char.char_class.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">alpha</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">upper</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an <code class="computeroutput"><span class="identifier">alpha</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"a"</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">,</span> <span class="char">'a'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">,</span> <span class="char">'A'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">,</span> <span class="char">'1'</span><span class="special">);</span> <span class="comment">// fails (as isalpha('1') is false)</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">upper</span><span class="special">[</span><span class="identifier">alpha</span><span class="special">],</span> <span class="char">'A'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">upper</span><span class="special">[</span><span class="identifier">alpha</span><span class="special">],</span> <span class="char">'a'</span><span class="special">);</span> <span class="comment">// fails (as isupper('a') is false)</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="char_generator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="../directive.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/char/char_generator.html b/libs/spirit/doc/html/spirit/karma/reference/char/char_generator.html new file mode 100755 index 0000000000..6e9f28d549 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/char/char_generator.html @@ -0,0 +1,767 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Character Generators (char_, lit)</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="Spirit 2.5.2"> +<link rel="up" href="../char.html" title="Char Generators"> +<link rel="prev" href="../char.html" title="Char Generators"> +<link rel="next" href="char_class.html" title="Character Classification Generators (alnum, digit, etc.)"> +</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="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.char.char_generator"></a><a class="link" href="char_generator.html" title="Character Generators (char_, lit)">Character + Generators (<code class="computeroutput"><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.char.char_generator.h0"></a> + <span><a name="spirit.karma.reference.char.char_generator.description"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.description">Description</a> + </h6> +<p> + The character generators described in this section are: + </p> +<p> + The <code class="computeroutput"><span class="identifier">char_</span></code> generator emits + single characters. The <code class="computeroutput"><span class="identifier">char_</span></code> + generator has an associated <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. This is needed when doing basic operations + such as forcing lower or upper case and dealing with character ranges. + </p> +<p> + There are various forms of <code class="computeroutput"><span class="identifier">char_</span></code>. + </p> +<h6> +<a name="spirit.karma.reference.char.char_generator.h1"></a> + <span><a name="spirit.karma.reference.char.char_generator.char_"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.char_">char_</a> + </h6> +<p> + The no argument form of <code class="computeroutput"><span class="identifier">char_</span></code> + emits any character in the associated <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p> +<pre class="programlisting"><span class="identifier">char_</span> <span class="comment">// emits any character as supplied by the attribute</span> +</pre> +<h6> +<a name="spirit.karma.reference.char.char_generator.h2"></a> + <span><a name="spirit.karma.reference.char.char_generator.char__ch_"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.char__ch_">char_(ch)</a> + </h6> +<p> + The single argument form of <code class="computeroutput"><span class="identifier">char_</span></code> + (with a character argument) emits the supplied character. + </p> +<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span> <span class="comment">// emits 'x'</span> +<span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span> <span class="comment">// emits L'x'</span> +<span class="identifier">char_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="comment">// emits x (a char)</span> +</pre> +<h6> +<a name="spirit.karma.reference.char.char_generator.h3"></a> + <span><a name="spirit.karma.reference.char.char_generator.char__first__last_"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.char__first__last_">char_(first, + last)</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">char_</span></code> with two arguments, + emits any character from a range of characters as supplied by the attribute. + </p> +<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">,</span><span class="char">'z'</span><span class="special">)</span> <span class="comment">// alphabetic characters</span> +<span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'0'</span><span class="special">,</span><span class="identifier">L</span><span class="char">'9'</span><span class="special">)</span> <span class="comment">// digits</span> +</pre> +<p> + A range of characters is created from a low-high character pair. Such + a generator emits a single character that is in the range, including + both endpoints. Note, the first character must be <span class="emphasis"><em>before</em></span> + the second, according to the underlying <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p> +<p> + Character mapping is inherently platform dependent. It is not guaranteed + in the standard for example that <code class="computeroutput"><span class="char">'A'</span> + <span class="special"><</span> <span class="char">'Z'</span></code>, + that is why in Spirit2, we purposely attach a specific <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> (such as ASCII, ISO-8859-1) to the <code class="computeroutput"><span class="identifier">char_</span></code> generator to eliminate such ambiguities. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + <span class="bold"><strong>Sparse bit vectors</strong></span> + </p> +<p> + To accommodate 16/32 and 64 bit characters, the char-set statically + switches from a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bitset</span></code> + implementation when the character type is not greater than 8 bits, + to a sparse bit/boolean set which uses a sorted vector of disjoint + ranges (<code class="computeroutput"><span class="identifier">range_run</span></code>). + The set is constructed from ranges such that adjacent or overlapping + ranges are coalesced. + </p> +<p> + <code class="computeroutput"><span class="identifier">range_runs</span></code> are very + space-economical in situations where there are lots of ranges and a + few individual disjoint values. Searching is O(log n) where n is the + number of ranges. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.char.char_generator.h4"></a> + <span><a name="spirit.karma.reference.char.char_generator.char__def_"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.char__def_">char_(def)</a> + </h6> +<p> + Lastly, when given a string (a plain C string, a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>, + etc.), the string is regarded as a char-set definition string following + a syntax that resembles posix style regular expression character sets + (except that double quotes delimit the set elements instead of square + brackets and there is no special negation ^ character). Examples: + </p> +<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="string">"a-zA-Z"</span><span class="special">)</span> <span class="comment">// alphabetic characters</span> +<span class="identifier">char_</span><span class="special">(</span><span class="string">"0-9a-fA-F"</span><span class="special">)</span> <span class="comment">// hexadecimal characters</span> +<span class="identifier">char_</span><span class="special">(</span><span class="string">"actgACTG"</span><span class="special">)</span> <span class="comment">// DNA identifiers</span> +<span class="identifier">char_</span><span class="special">(</span><span class="string">"\x7f\x7e"</span><span class="special">)</span> <span class="comment">// Hexadecimal 0x7F and 0x7E</span> +</pre> +<p> + These generators emit any character from a range of characters as supplied + by the attribute. + </p> +<h6> +<a name="spirit.karma.reference.char.char_generator.h5"></a> + <span><a name="spirit.karma.reference.char.char_generator.lit_ch_"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.lit_ch_">lit(ch)</a> + </h6> +<p> + <code class="computeroutput"><span class="identifier">lit</span></code>, when passed a single + character, behaves like the single argument <code class="computeroutput"><span class="identifier">char_</span></code> + except that <code class="computeroutput"><span class="identifier">lit</span></code> does + not consume an attribute. A plain <code class="computeroutput"><span class="keyword">char</span></code> + or <code class="computeroutput"><span class="keyword">wchar_t</span></code> is equivalent + to a <code class="computeroutput"><span class="identifier">lit</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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">lit</span></code> is reused by the + <a class="link" href="../string.html" title="String Generators">String Generators</a>, + the char generators, and the Numeric Generators (see <a class="link" href="../numeric/signed_int.html" title="Signed Integer Number Generators (int_, etc.)">signed + integer</a>, <a class="link" href="../numeric/unsigned_int.html" title="Unsigned Integer Number Generators (uint_, etc.)">unsigned + integer</a>, and <a class="link" href="../numeric/real_number.html" title="Real Number Generators (float_, double_, etc.)">real + number</a> generators). In general, a char generator is created + when you pass in a character, a string generator is created when you + pass in a string, and a numeric generator is created when you use a + numeric literal. The exception is when you pass a single element literal + string, e.g. <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="string">"x"</span><span class="special">)</span></code>. + In this case, we optimize this to create a char generator instead of + a string generator. + </p></td></tr> +</table></div> +<p> + Examples: + </p> +<pre class="programlisting"><span class="char">'x'</span> +<span class="identifier">lit</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span> +<span class="identifier">lit</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span> +<span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span> <span class="comment">// c is a char</span> +</pre> +<h6> +<a name="spirit.karma.reference.char.char_generator.h6"></a> + <span><a name="spirit.karma.reference.char.char_generator.header"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/char/char.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_char_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.char.char_generator.h7"></a> + <span><a name="spirit.karma.reference.char.char_generator.namespace"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<p> + In the table above, <code class="computeroutput"><span class="identifier">ns</span></code> + represents a <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p> +<h6> +<a name="spirit.karma.reference.char.char_generator.h8"></a> + <span><a name="spirit.karma.reference.char.char_generator.model_of"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">ch</span></code>, <code class="computeroutput"><span class="identifier">ch1</span></code>, <code class="computeroutput"><span class="identifier">ch2</span></code></span></dt> +<dd><p> + Character-class specific character (See Character Class Types), + or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a character-class specific character + value + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">cs</span></code></span></dt> +<dd><p> + Character-set specifier string (See Character Class Types), or + a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a character-set specifier string, + or a pointer/reference to a null-terminated array of characters. + This string specifies a char-set definition string following a + syntax that resembles posix style regular expression character + sets (except the square brackets and the negation <code class="computeroutput"><span class="special">^</span></code> character). + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt> +<dd><p> + A <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">cg</span></code></span></dt> +<dd><p> + A char generator, a char range generator, or a char set generator. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.char.char_generator.h9"></a> + <span><a name="spirit.karma.reference.char.char_generator.expression_semantics"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ch</span></code> + </p> + </td> +<td> + <p> + Generate the character literal <code class="computeroutput"><span class="identifier">ch</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the character literal <code class="computeroutput"><span class="identifier">ch</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code> + </p> + </td> +<td> + <p> + Generate the character provided by a mandatory attribute interpreted + in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the character <code class="computeroutput"><span class="identifier">ch</span></code> + as provided by the immediate literal value the generator is + initialized from. If this generator has an associated attribute + it succeeds only as long as the attribute is equal to the immediate + literal (unless the underlying output stream reports an error). + Otherwise this generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="string">"c"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the character <code class="computeroutput"><span class="identifier">c</span></code> + as provided by the immediate literal value the generator is + initialized from. If this generator has an associated attribute + it succeeds only as long as the attribute is equal to the immediate + literal (unless the underlying output stream reports an error). + Otherwise this generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch1</span><span class="special">,</span> + <span class="identifier">ch2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the character provided by a mandatory attribute interpreted + in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + The generator succeeds as long as the attribute belongs to + the character range <code class="computeroutput"><span class="special">[</span><span class="identifier">ch1</span><span class="special">,</span> + <span class="identifier">ch2</span><span class="special">]</span></code> + (unless the underlying output stream reports an error). Otherwise + this generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the character provided by a mandatory attribute interpreted + in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + The generator succeeds as long as the attribute belongs to + the character set <code class="computeroutput"><span class="identifier">cs</span></code> + (unless the underlying output stream reports an error). Otherwise + this generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">~</span><span class="identifier">cg</span></code> + </p> + </td> +<td> + <p> + Negate <code class="computeroutput"><span class="identifier">cg</span></code>. + The result is a negated char generator that inverts the test + condition of the character generator it is attached to. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + A character <code class="computeroutput"><span class="identifier">ch</span></code> is assumed + to belong to the character range defined by <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch1</span><span class="special">,</span> <span class="identifier">ch2</span><span class="special">)</span></code> if its character value (binary representation) + interpreted in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code> + is not smaller than the character value of <code class="computeroutput"><span class="identifier">ch1</span></code> + and not larger then the character value of <code class="computeroutput"><span class="identifier">ch2</span></code> + (i.e. <code class="computeroutput"><span class="identifier">ch1</span> <span class="special"><=</span> + <span class="identifier">ch</span> <span class="special"><=</span> + <span class="identifier">ch2</span></code>). + </p> +<p> + The <code class="computeroutput"><span class="identifier">charset</span></code> parameter + passed to <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">charset</span><span class="special">)</span></code> + must be a string containing more than one character. Every single character + in this string is assumed to belong to the character set defined by this + expression. An exception to this is the <code class="computeroutput"><span class="char">'-'</span></code> + character which has a special meaning if it is not specified as the first + and not the last character in <code class="computeroutput"><span class="identifier">charset</span></code>. + If the <code class="computeroutput"><span class="char">'-'</span></code> is used in between + to characters it is interpreted as spanning a character range. A character + <code class="computeroutput"><span class="identifier">ch</span></code> is considered to belong + to the defined character set <code class="computeroutput"><span class="identifier">charset</span></code> + if it matches one of the characters as specified by the string parameter + described above. For example + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Example + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">char_</span><span class="special">(</span><span class="string">"abc"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + 'a', 'b', and 'c' + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">char_</span><span class="special">(</span><span class="string">"a-z"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + all characters (and including) from 'a' to 'z' + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">char_</span><span class="special">(</span><span class="string">"a-zA-Z"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + all characters (and including) from 'a' to 'z' and 'A' and + 'Z' + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">char_</span><span class="special">(</span><span class="string">"-1-9"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + '-' and all characters (and including) from '1' to '9' + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.char.char_generator.h10"></a> + <span><a name="spirit.karma.reference.char.char_generator.attributes"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ch</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Ch</span></code>, attribute + is mandatory (otherwise compilation will fail). <code class="computeroutput"><span class="identifier">Ch</span></code> is the character type + of the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Ch</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">ch</span></code> + and succeeds only if both are equal, failing otherwise. <code class="computeroutput"><span class="identifier">Ch</span></code> is the character type + of the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="string">"c"</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Ch</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">c</span></code> + and succeeds only if both are equal, failing otherwise. <code class="computeroutput"><span class="identifier">Ch</span></code> is the character type + of the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch1</span><span class="special">,</span> + <span class="identifier">ch2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Ch</span></code>, attribute + is mandatory (otherwise compilation will fail), the generator + succeeds if the attribute belongs to the character range <code class="computeroutput"><span class="special">[</span><span class="identifier">ch1</span><span class="special">,</span> <span class="identifier">ch2</span><span class="special">]</span></code> interpreted in the character + set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + <code class="computeroutput"><span class="identifier">Ch</span></code> is the character + type of the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Ch</span></code>, attribute + is mandatory (otherwise compilation will fail), the generator + succeeds if the attribute belongs to the character set <code class="computeroutput"><span class="identifier">cs</span></code>, interpreted in the character + set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + <code class="computeroutput"><span class="identifier">Ch</span></code> is the character + type of the <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="special">~</span><span class="identifier">cg</span></code> + </p> + </td> +<td> + <p> + Attribute of <code class="computeroutput"><span class="identifier">cg</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Ch</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Ch</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Ch</span></code> and emit the value stored in the + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.char.char_generator.h11"></a> + <span><a name="spirit.karma.reference.char.char_generator.complexity"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(1) + </p></blockquote></div> +<p> + The complexity of <code class="computeroutput"><span class="identifier">ch</span></code>, + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code>, + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch</span><span class="special">)</span></code>, and <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="string">"c"</span><span class="special">)</span></code> is constant as all generators emit exactly + one character per invocation. + </p> +<p> + The character range generator (<code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">ch1</span><span class="special">,</span> <span class="identifier">ch2</span><span class="special">)</span></code>) additionally requires constant lookup + time for the verification whether the attribute belongs to the character + range. + </p> +<p> + The character set generator (<code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code>) additionally requires O(log N) lookup + time for the verification whether the attribute belongs to the character + set, where N is the number of characters in the character set. + </p> +<h6> +<a name="spirit.karma.reference.char.char_generator.h12"></a> + <span><a name="spirit.karma.reference.char.char_generator.example"></a></span><a class="link" href="char_generator.html#spirit.karma.reference.char.char_generator.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">char_</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="char">'A'</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="char">'A'</span><span class="special">));</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"a"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">,</span> <span class="char">'a'</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'A'</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'A'</span><span class="special">),</span> <span class="char">'A'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'A'</span><span class="special">),</span> <span class="char">'B'</span><span class="special">);</span> <span class="comment">// fails (as 'A' != 'B')</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"A"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'A'</span><span class="special">,</span> <span class="char">'Z'</span><span class="special">),</span> <span class="char">'A'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'A'</span><span class="special">,</span> <span class="char">'Z'</span><span class="special">),</span> <span class="char">'a'</span><span class="special">);</span> <span class="comment">// fails (as 'a' does not belong to 'A'...'Z')</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"k"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="string">"a-z0-9"</span><span class="special">),</span> <span class="char">'k'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="string">"a-z0-9"</span><span class="special">),</span> <span class="char">'A'</span><span class="special">);</span> <span class="comment">// fails (as 'A' does not belong to "a-z0-9")</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive.html b/libs/spirit/doc/html/spirit/karma/reference/directive.html new file mode 100755 index 0000000000..2b199061fa --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive.html @@ -0,0 +1,85 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="char/char_class.html" title="Character Classification Generators (alnum, digit, etc.)"> +<link rel="next" href="directive/alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])"> +</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="char/char_class.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="directive/alignment.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="spirit.karma.reference.directive"></a><a class="link" href="directive.html" title="Generator Directives">Generator Directives</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="directive/alignment.html">Alignment + Generator Directives (<code class="computeroutput"><span class="identifier">left_align</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/repeat.html">Repetition + Generator Directive (<code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/delimit.html">Generator + Directives Controlling Automatic Delimiting (<code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/upperlower.html">Generator + Directives Controlling Case Sensitivity (<code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/maxwidth.html">Generator + Directives Controlling the Maximum Field Width (<code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/buffer.html">Generator + Directive for Temporary Output Buffering (<code class="computeroutput"><span class="identifier">buffer</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/omit.html">Generator + Directives Consuming Attributes (<code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/duplicate.html">Generator + Directive Duplicating Attributes (<code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/columns.html">Generator + Directive Separating Output Into Columns (<code class="computeroutput"><span class="identifier">columns</span><span class="special">[]</span></code>)</a></span></dt> +<dt><span class="section"><a href="directive/as.html">Generator Directives + Forcing Atomic Extraction (<code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">as_string</span><span class="special">[],</span> <span class="identifier">as_wstring</span><span class="special">[]</span></code>)</a></span></dt> +</dl></div> +<p> + This module includes different generator directives. It includes alignment + directives (<code class="computeroutput"><span class="identifier">left_align</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code>, and <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code>), repetition (<code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code>), directives controlling automatic delimiting + (<code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code>, + <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code>, + and <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code>), + controlling case sensitivity (<code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code>), field width (<code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code>), buffering (<code class="computeroutput"><span class="identifier">buffer</span><span class="special">[]</span></code>), splitting into columns (<code class="computeroutput"><span class="identifier">columns</span><span class="special">[]</span></code>) + and attribute handling (<code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code>, and <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code>). + </p> +<h6> +<a name="spirit.karma.reference.directive.h0"></a> + <span><a name="spirit.karma.reference.directive.module_header"></a></span><a class="link" href="directive.html#spirit.karma.reference.directive.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_directive</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="char/char_class.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="directive/alignment.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/alignment.html b/libs/spirit/doc/html/spirit/karma/reference/directive/alignment.html new file mode 100755 index 0000000000..bc4efe983c --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/alignment.html @@ -0,0 +1,700 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Alignment Generator Directives (left_align[], center[], right_align[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="../directive.html" title="Generator Directives"> +<link rel="next" href="repeat.html" title="Repetition Generator Directive (repeat[])"> +</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="../directive.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="repeat.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.alignment"></a><a class="link" href="alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])">Alignment + Generator Directives (<code class="computeroutput"><span class="identifier">left_align</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h0"></a> + <span><a name="spirit.karma.reference.directive.alignment.description"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.description">Description</a> + </h6> +<p> + The alignment directives allow to left align, right align or center output + emitted by other generators into columns of a specified width while using + an arbitrary generator to create the padding. + </p> +<h6> +<a name="spirit.karma.reference.directive.alignment.h1"></a> + <span><a name="spirit.karma.reference.directive.alignment.header"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.header">Header</a> + </h6> +<p> + For the <code class="computeroutput"><span class="identifier">left_align</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/left_alignment.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_left_alignment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For the <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/center_alignment.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_center_alignment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For the <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/right_alignment.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_right_alignment</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.alignment.h2"></a> + <span><a name="spirit.karma.reference.directive.alignment.namespace"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">left_align</span> <span class="comment">// + alias: boost::spirit::karma::left_align</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">center</span> <span class="comment">// + alias: boost::spirit::karma::center</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">right_align</span> <span class="comment">// + alias: boost::spirit::karma::right_align</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h3"></a> + <span><a name="spirit.karma.reference.directive.alignment.model_of"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">pad</span></code></span></dt> +<dd><p> + A generator object, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code>, <code class="computeroutput"><span class="identifier">Pad</span></code></span></dt> +<dd><p> + Attribute types of the generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">width</span></code></span></dt> +<dd><p> + Numeric literal, any unsigned integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to an unsigned integer value + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h4"></a> + <span><a name="spirit.karma.reference.directive.alignment.expression_semantics"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + left aligned in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + left aligned in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + left aligned in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (except if the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + left aligned in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + centered in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + centered in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + centered in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (except if the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">width</span><span class="special">,</span> + <span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + centered in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + right aligned in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + right aligned in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using <code class="computeroutput"><span class="identifier">space</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (unless the underlying output stream reports + an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + right aligned in a column of width as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_LENGTH</span></code> + (default: 10), while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (except if the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + right aligned in a column of the given <code class="computeroutput"><span class="identifier">width</span></code>, + while using the generator <code class="computeroutput"><span class="identifier">pad</span></code> + to emit the necessary padding. This generator succeeds as long + as its embedded and padding generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">pad</span></code> do + not fail (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + None of the generator directives listed above limits the emitted output + to the respective column width. If the emitted output is longer than + the specified (or implied) column width, the generated output overruns + the column to the right. + </p> +<p> + If the output needs to be limited to a specified column width, use + the <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code> + directive, for instance: +</p> +<pre class="programlisting"><span class="identifier">maxwidth</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">right_align</span><span class="special">(</span><span class="number">12</span><span class="special">)[</span><span class="string">"1234567890"</span><span class="special">]]</span> +</pre> +<p> + which will output (without the quotes): +</p> +<pre class="programlisting"><span class="string">" 123456"</span></pre> +<p> + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h5"></a> + <span><a name="spirit.karma.reference.directive.alignment.attributes"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">left_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> + <span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">center</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">pad</span><span class="special">:</span> <span class="identifier">Pad</span> <span class="special">--></span> <span class="identifier">right_align</span><span class="special">(</span><span class="identifier">pad</span><span class="special">,</span> <span class="identifier">width</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h6"></a> + <span><a name="spirit.karma.reference.directive.alignment.complexity"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of an alignment generator directive is defined + by the complexity of its embedded and padding generator. The complexity + of the left alignment directive generator itself is O(1). The complexity + of the center and right alignment directive generators is O(N), where + <code class="computeroutput"><span class="identifier">N</span></code> is the number of + characters emitted by the embedded and padding generators. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.alignment.h7"></a> + <span><a name="spirit.karma.reference.directive.alignment.example"></a></span><a class="link" href="alignment.html#spirit.karma.reference.directive.alignment.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">left_align</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">center</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">right_align</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the alignment generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">p</span> <span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0 |2.0"</span><span class="special">,</span> <span class="identifier">left_align</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">double_</span><span class="special">]</span> <span class="special"><<</span> <span class="char">'|'</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">" 1.0 |2.0"</span><span class="special">,</span> <span class="identifier">center</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">double_</span><span class="special">]</span> <span class="special"><<</span> <span class="char">'|'</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">" 1.0|2.0"</span><span class="special">,</span> <span class="identifier">right_align</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">double_</span><span class="special">]</span> <span class="special"><<</span> <span class="char">'|'</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../directive.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="repeat.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/as.html b/libs/spirit/doc/html/spirit/karma/reference/directive/as.html new file mode 100755 index 0000000000..b3014b6530 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/as.html @@ -0,0 +1,366 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives Forcing Atomic Extraction (as<T>, as_string[], as_wstring[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="columns.html" title="Generator Directive Separating Output Into Columns (columns[])"> +<link rel="next" href="../nonterminal.html" title="Nonterminal Generators"> +</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="columns.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="../nonterminal.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.as"></a><a class="link" href="as.html" title="Generator Directives Forcing Atomic Extraction (as<T>, as_string[], as_wstring[])">Generator Directives + Forcing Atomic Extraction (<code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>,</span> <span class="identifier">as_string</span><span class="special">[],</span> <span class="identifier">as_wstring</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.as.h0"></a> + <span><a name="spirit.karma.reference.directive.as.description"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + class forces the atomic extraction of a container type <code class="computeroutput"><span class="identifier">T</span></code> from it's consumed attribute. Usually, + repetitive generators (such as <a class="link" href="../operator/kleene.html" title="Kleene Star Generator (*a)">Kleene + (<code class="computeroutput"><span class="special">*</span></code>)</a>, etc) or sequences + exposing a <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> + will extract elements from the container supplied as their consumed attribute + by looping through the containers iterators. In some cases, this may + be undesirable. The <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> class creates a directive that will + pass an unnamed temporary object of type <code class="computeroutput"><span class="identifier">T</span></code> + to it's subject, if extracting <code class="computeroutput"><span class="identifier">T</span></code> + from it's consumed attribute determined at generation-time to be valid. + <a class="link" href="../../../advanced/customize/attribute_as.html" title="Atomically Extract an Attribute Value from a Container (Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">valid_as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()</span></code></a> + is called by <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + to determine validity; if it returns false, the generator fails. Subsequent + extraction is performed by calling <a class="link" href="../../../advanced/customize/attribute_as.html" title="Atomically Extract an Attribute Value from a Container (Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()</span></code></a>. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">T</span></code> is required to be + a container type. If <a class="link" href="../../../advanced/customize/is_container.html" title="Determine if a Type Should be Treated as a Container (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_container</span></code></a> does not return + true for <code class="computeroutput"><span class="identifier">T</span></code>, a compile-time + error will occur. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.as.h1"></a> + <span><a name="spirit.karma.reference.directive.as.header"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/as.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_as</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.as.h2"></a> + <span><a name="spirit.karma.reference.directive.as.namespace"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">as_string</span> <span class="comment">// + alias: boost::spirit::karma::as_string</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">as_wstring</span> <span class="comment">// + alias: boost::spirit::karma::as_wstring</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.as.h3"></a> + <span><a name="spirit.karma.reference.directive.as.synopsis"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><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="keyword">struct</span> <span class="identifier">as</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.directive.as.h4"></a> + <span><a name="spirit.karma.reference.directive.as.template_parameters"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">T</span></code> + </p> + </td> +<td> + <p> + A container type. + </p> + </td> +<td> + <p> + none + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.as.h5"></a> + <span><a name="spirit.karma.reference.directive.as.model_of"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A <a class="link" href="../generator_concepts/generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">attr</span></code></span></dt> +<dd><p> + The attribute supplied to the directive. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.as.h6"></a> + <span><a name="spirit.karma.reference.directive.as.expression_semantics"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Extract an instance of <code class="computeroutput"><span class="identifier">T</span></code> + from <code class="computeroutput"><span class="identifier">attr</span></code>, + and invoke the subject generator <code class="computeroutput"><span class="identifier">a</span></code>, + supplying the unnamed temporary as it's attribute. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">as_string</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Equivalent to <code class="computeroutput"><span class="identifier">as</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">a</span><span class="special">]</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">as_wstring</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Equivalent to <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">>()[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.as.h7"></a> + <span><a name="spirit.karma.reference.directive.as.attributes"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</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">a</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">>()[</span><span class="identifier">a</span><span class="special">]:</span> + <span class="identifier">T</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.as.h8"></a> + <span><a name="spirit.karma.reference.directive.as.complexity"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The complexity is defined by the complexity of the subject generator, + <code class="computeroutput"><span class="identifier">a</span></code>, and the complexity + of the extraction unnamed contianer of type <code class="computeroutput"><span class="identifier">T</span></code> + from the attribute <code class="computeroutput"><span class="identifier">attr</span></code>. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.as.h9"></a> + <span><a name="spirit.karma.reference.directive.as.example"></a></span><a class="link" href="as.html#spirit.karma.reference.directive.as.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">utree</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">utree_type</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">utf8_symbol_type</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">as</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">as_string</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Simple usage of <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code>, + <code class="computeroutput"><span class="identifier">as_string</span></code> and <code class="computeroutput"><span class="identifier">as_wstring</span></code>: + </p> +<p> + To properly handle string concatenation with <a class="link" href="../../../support/utree.html" title="The utree data structure"><code class="computeroutput"><span class="identifier">utree</span></code></a>, we make use of <code class="computeroutput"><span class="identifier">as_string</span><span class="special">[]</span></code>. + We also use <code class="computeroutput"><span class="identifier">as</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> + to explicitly extract a <a class="link" href="../../../support/utree.html" title="The utree data structure"><code class="computeroutput"><span class="identifier">utree</span></code></a> symbol node. + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">as</span><span class="special"><</span><span class="identifier">utf8_symbol_type</span><span class="special">></span> <span class="identifier">as_symbol_type</span><span class="special">;</span> +<span class="identifier">as_symbol_type</span> <span class="keyword">const</span> <span class="identifier">as_symbol</span> <span class="special">=</span> <span class="identifier">as_symbol_type</span><span class="special">();</span> + +<span class="identifier">utree</span> <span class="identifier">ut</span><span class="special">;</span> +<span class="identifier">ut</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="string">"xyz"</span><span class="special">);</span> +<span class="identifier">ut</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.23</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"xyz1.23"</span><span class="special">,</span> <span class="identifier">as_string</span><span class="special">[*</span><span class="identifier">char_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">ut</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"xyz1.23"</span><span class="special">,</span> <span class="identifier">as</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">char_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">ut</span><span class="special">);</span> + +<span class="identifier">ut</span><span class="special">.</span><span class="identifier">clear</span><span class="special">();</span> + +<span class="identifier">ut</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">utf8_symbol_type</span><span class="special">(</span><span class="string">"xyz"</span><span class="special">));</span> +<span class="identifier">ut</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.23</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"xyz1.23"</span><span class="special">,</span> <span class="identifier">as_symbol</span><span class="special">[*</span><span class="identifier">char_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">ut</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"xyz1.23"</span><span class="special">,</span> <span class="identifier">as</span><span class="special"><</span><span class="identifier">utf8_symbol_type</span><span class="special">>()[*</span><span class="identifier">char_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">ut</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="columns.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="../nonterminal.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/buffer.html b/libs/spirit/doc/html/spirit/karma/reference/directive/buffer.html new file mode 100755 index 0000000000..61d1e7feca --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/buffer.html @@ -0,0 +1,266 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directive for Temporary Output Buffering (buffer[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="maxwidth.html" title="Generator Directives Controlling the Maximum Field Width (maxwidth[])"> +<link rel="next" href="omit.html" title="Generator Directives Consuming Attributes (omit[] and skip[])"> +</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="maxwidth.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="omit.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.buffer"></a><a class="link" href="buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])">Generator + Directive for Temporary Output Buffering (<code class="computeroutput"><span class="identifier">buffer</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h0"></a> + <span><a name="spirit.karma.reference.directive.buffer.description"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.description">Description</a> + </h6> +<p> + All generator components (except the <a class="link" href="../operator/alternative.html" title="Alternative Generator (a | b)">Alternative + (<code class="computeroutput"><span class="special">|</span></code>)</a> generator) pass + their generated output directly to the underlying output stream. If a + generator fails halfway through, the output generated so far is not 'rolled + back'. The buffering generator directive allows to avoid this unwanted + output to be generated. It temporarily redirects the output produced + by the embedded generator into a buffer. This buffer is flushed to the + underlying stream only after the embedded generator succeeded, but is + discarded otherwise. + </p> +<h6> +<a name="spirit.karma.reference.directive.buffer.h1"></a> + <span><a name="spirit.karma.reference.directive.buffer.header"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/buffer.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_buffer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">buffer</span> <span class="comment">// + alias: boost::spirit::karma::buffer</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h2"></a> + <span><a name="spirit.karma.reference.directive.buffer.model_of"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type of generator <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h3"></a> + <span><a name="spirit.karma.reference.directive.buffer.expression_semantics"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + is invoked but its output is temporarily intercepted and stored + in an internal buffer. If <code class="computeroutput"><span class="identifier">a</span></code> + succeeds the buffer content is flushed to the underlying output + stream, otherwise the buffer content is discarded. The buffer + directive succeeds as long as the embedded generator succeeded + (unless the underlying output stream reports an error). + </p> + </td> +</tr></tbody> +</table></div> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"><p> + If you want to make the buffered generator succeed regardless of the + outcome of the embedded generator, simply wrap the <code class="computeroutput"><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> into an additional optional: <code class="computeroutput"><span class="special">-</span><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> (see <a class="link" href="../operator/optional.html" title="Optional Generator (-a)">Optional + (unary <code class="computeroutput"><span class="special">-</span></code>)</a>). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h4"></a> + <span><a name="spirit.karma.reference.directive.buffer.attributes"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h5"></a> + <span><a name="spirit.karma.reference.directive.buffer.complexity"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the buffering generator directive is defined + by the complexity of its embedded generator. The complexity of the + buffering directive generator itself is O(N), where N is the number + of characters buffered. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.buffer.h6"></a> + <span><a name="spirit.karma.reference.directive.buffer.example"></a></span><a class="link" href="buffer.html#spirit.karma.reference.directive.buffer.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">buffer</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a buffering generator directive. It shows how the partial + output generated in the first example does not show up in the generated + output as the plus generator fails (no data is available, see <a class="link" href="../operator/plus.html" title="Plus Generator (+a)">Plus + (unary <code class="computeroutput"><span class="special">+</span></code>)</a>). + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> <span class="comment">// empty container</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="special">-</span><span class="identifier">buffer</span><span class="special">[</span><span class="char">'['</span> <span class="special"><<</span> <span class="special">+</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> + +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> <span class="comment">// now, fill the container</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[1.02.0]"</span><span class="special">,</span> <span class="identifier">buffer</span><span class="special">[</span><span class="char">'['</span> <span class="special"><<</span> <span class="special">+</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="maxwidth.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="omit.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/columns.html b/libs/spirit/doc/html/spirit/karma/reference/directive/columns.html new file mode 100755 index 0000000000..8e3d03bfc0 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/columns.html @@ -0,0 +1,362 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directive Separating Output Into Columns (columns[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="duplicate.html" title="Generator Directive Duplicating Attributes (duplicate[])"> +<link rel="next" href="as.html" title="Generator Directives Forcing Atomic Extraction (as<T>, as_string[], as_wstring[])"> +</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="duplicate.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="as.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.columns"></a><a class="link" href="columns.html" title="Generator Directive Separating Output Into Columns (columns[])">Generator + Directive Separating Output Into Columns (<code class="computeroutput"><span class="identifier">columns</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.columns.h0"></a> + <span><a name="spirit.karma.reference.directive.columns.description"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">columns</span><span class="special">[]</span></code> + directive separates the output emitted by the embedded generator by inserting + special column separators. + </p> +<h6> +<a name="spirit.karma.reference.directive.columns.h1"></a> + <span><a name="spirit.karma.reference.directive.columns.header"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/columns.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_columns</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">columns</span> <span class="comment">// + alias: boost::spirit::karma::columns</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.columns.h2"></a> + <span><a name="spirit.karma.reference.directive.columns.model_of"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A generator object, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a generator object, will be used + to emit column separators + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd> +<p> + Attribute type of generator <code class="computeroutput"><span class="identifier">a</span></code> + </p> +<p> + [<code class="computeroutput"><span class="identifier">num</span></code> + </p> +<p> + Numeric literal, any unsigned integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to an unsigned integer value defining + the number of items to emit in between the column separators + </p> +</dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.columns.h3"></a> + <span><a name="spirit.karma.reference.directive.columns.expression_semantics"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">columns</span></code> + directive invokes a generator after each N-th element of the + embedded generator has been emitted. The number of columns + is defined by the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_COLUMNS</span></code>. + The column separator used will be <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">eol</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">columns</span></code> + directive invokes a generator after each N-th element of the + embedded generator has been emitted. The number of columns + is defined by the argument to the directive <code class="computeroutput"><span class="identifier">num</span></code>. + The column separator used will be <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">eol</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">columns</span></code> + directive invokes a generator after each N-th element of the + embedded generator has been emitted. The number of columns + is defined by the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_COLUMNS</span></code>. + The column separator used will be <code class="computeroutput"><span class="identifier">g</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> + <span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">columns</span></code> + directive invokes a generator after each N-th element of the + embedded generator has been emitted. The number of columns + is defined by the argument to the directive <code class="computeroutput"><span class="identifier">num</span></code>. + The column separator used will be <code class="computeroutput"><span class="identifier">g</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.columns.h4"></a> + <span><a name="spirit.karma.reference.directive.columns.attributes"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> + <span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">columns</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> <span class="identifier">g</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.columns.h5"></a> + <span><a name="spirit.karma.reference.directive.columns.complexity"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the <code class="computeroutput"><span class="identifier">columns</span></code> + generator directive depends on the complexity of the embedded generator. + The complexity of the <code class="computeroutput"><span class="identifier">columns</span></code> + generator directive itself is O(N), where <code class="computeroutput"><span class="identifier">N</span></code> + is the number of inserted column separators. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.columns.h6"></a> + <span><a name="spirit.karma.reference.directive.columns.example"></a></span><a class="link" href="columns.html#spirit.karma.reference.directive.columns.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">columns</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">columns</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0\n2.0\n3.0\n"</span><span class="special">,</span> <span class="identifier">columns</span><span class="special">(</span><span class="number">1</span><span class="special">)[*</span><span class="identifier">double_</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"1.0 2.0 \n3.0 \n"</span><span class="special">,</span> <span class="identifier">columns</span><span class="special">(</span><span class="number">2</span><span class="special">)[*</span><span class="identifier">double_</span><span class="special">],</span> <span class="identifier">space</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="duplicate.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="as.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/delimit.html b/libs/spirit/doc/html/spirit/karma/reference/directive/delimit.html new file mode 100755 index 0000000000..b4c4988f91 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/delimit.html @@ -0,0 +1,381 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="repeat.html" title="Repetition Generator Directive (repeat[])"> +<link rel="next" href="upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"> +</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="repeat.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="upperlower.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.delimit"></a><a class="link" href="delimit.html" title="Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])">Generator + Directives Controlling Automatic Delimiting (<code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h0"></a> + <span><a name="spirit.karma.reference.directive.delimit.description"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.description">Description</a> + </h6> +<p> + The directives <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code>, and <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> can be used to control automatic delimiting. + The directives <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code> disable any automatic delimiting, while + the directive <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code> (re-)enables automatic delimiting. + </p> +<h6> +<a name="spirit.karma.reference.directive.delimit.h1"></a> + <span><a name="spirit.karma.reference.directive.delimit.header"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.header">Header</a> + </h6> +<p> + For the <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/verbatim.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_verbatim</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For the <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/no_delimit.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_no_delimit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For the <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code> + directive: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/delimit.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_delimit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.delimit.h2"></a> + <span><a name="spirit.karma.reference.directive.delimit.namespace"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">verbatim</span> <span class="comment">// + alias: boost::spirit::karma::verbatim</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">no_delimit</span> <span class="comment">// + alias: boost::spirit::karma::no_delimit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">delimit</span> <span class="comment">// + alias: boost::spirit::karma::delimit</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h3"></a> + <span><a name="spirit.karma.reference.directive.delimit.model_of"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">d</span></code></span></dt> +<dd><p> + A generator object, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code>, <code class="computeroutput"><span class="identifier">D</span></code></span></dt> +<dd><p> + Attribute types of the generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">d</span></code> + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h4"></a> + <span><a name="spirit.karma.reference.directive.delimit.expression_semantics"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Enable automatic delimiting for the embedded generator <code class="computeroutput"><span class="identifier">a</span></code> while using the <code class="computeroutput"><span class="identifier">space</span></code> generator as the delimiting + generator. If used inside a <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> directive it re-enables the + delimiter generator as used outside of this <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code> instead. The directive succeeds + as long as the embedded generator succeeded (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">delimit</span><span class="special">(</span><span class="identifier">d</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Enable automatic delimiting for the embedded generator <code class="computeroutput"><span class="identifier">a</span></code> while using the generator + <code class="computeroutput"><span class="identifier">d</span></code> as the delimiting + generator. The directive succeeds as long as the embedded generator + succeeded (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Disable automatic delimiting for the embedded generator <code class="computeroutput"><span class="identifier">a</span></code>. The directive succeeds + as long as the embedded generator succeeded (unless the underlying + output stream reports an error). This directive it has no effect + if it is used when no delimiting is active. When delimiting + is active this directive performs a post-delimit step (which + is different from the behavior of <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code>). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Disable automatic delimiting for the embedded generator <code class="computeroutput"><span class="identifier">a</span></code>. The directive succeeds + as long as the embedded generator succeeded (unless the underlying + output stream reports an error). This directive it has no effect + if it is used when no delimiting is active. When delimiting + is active this directive does not perform a post-delimit step + (which is different from the behavior of <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h5"></a> + <span><a name="spirit.karma.reference.directive.delimit.attributes"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">delimit</span><span class="special">(</span><span class="identifier">d</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">d</span><span class="special">:</span> <span class="identifier">D</span> <span class="special">--></span> <span class="identifier">delimit</span><span class="special">(</span><span class="identifier">d</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">d</span><span class="special">:</span> <span class="identifier">D</span> <span class="special">--></span> <span class="identifier">delimit</span><span class="special">(</span><span class="identifier">d</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">verbatim</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">verbatim</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">no_delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">no_delimit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h6"></a> + <span><a name="spirit.karma.reference.directive.delimit.complexity"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the generator directives <code class="computeroutput"><span class="identifier">delimit</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">verbatim</span><span class="special">[]</span></code>, and <code class="computeroutput"><span class="identifier">no_delimit</span><span class="special">[]</span></code> is defined by the complexity of its + embedded generators. The complexity of the directives themselves is + O(1). + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.delimit.h7"></a> + <span><a name="spirit.karma.reference.directive.delimit.example"></a></span><a class="link" href="delimit.html#spirit.karma.reference.directive.delimit.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">verbatim</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">delimit</span></code> + generator directive: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[ 2.0 , 4.3 ] "</span><span class="special">,</span> + <span class="identifier">delimit</span><span class="special">[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="number">2.0</span><span class="special">,</span> <span class="number">4.3</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[*2.0*,*4.3*]*"</span><span class="special">,</span> + <span class="identifier">delimit</span><span class="special">(</span><span class="char">'*'</span><span class="special">)[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="number">2.0</span><span class="special">,</span> <span class="number">4.3</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[2.0, 4.3 ] "</span><span class="special">,</span> + <span class="identifier">delimit</span><span class="special">[</span><span class="identifier">verbatim</span><span class="special">[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="number">2.0</span><span class="special">,</span> <span class="number">4.3</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="repeat.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="upperlower.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/duplicate.html b/libs/spirit/doc/html/spirit/karma/reference/directive/duplicate.html new file mode 100755 index 0000000000..f3b71cfb27 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/duplicate.html @@ -0,0 +1,250 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directive Duplicating Attributes (duplicate[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="omit.html" title="Generator Directives Consuming Attributes (omit[] and skip[])"> +<link rel="next" href="columns.html" title="Generator Directive Separating Output Into Columns (columns[])"> +</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="omit.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="columns.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.duplicate"></a><a class="link" href="duplicate.html" title="Generator Directive Duplicating Attributes (duplicate[])">Generator + Directive Duplicating Attributes (<code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h0"></a> + <span><a name="spirit.karma.reference.directive.duplicate.description"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.description">Description</a> + </h6> +<p> + The directive <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code> duplicates its attribute to all elements + of the embedded generator if this is a sequence generator. Otherwise + it does nothing. + </p> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h1"></a> + <span><a name="spirit.karma.reference.directive.duplicate.header"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/duplicate.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_duplicate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">duplicate</span> <span class="comment">// + alias: boost::spirit::karma::duplicate</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h2"></a> + <span><a name="spirit.karma.reference.directive.duplicate.model_of"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type of generator <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h3"></a> + <span><a name="spirit.karma.reference.directive.duplicate.expression_semantics"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">duplicate</span></code> + directive duplicates the supplied attribute for all elements + of a embedded sequence generator. For all other types of embedded + generators it has no effect. It succeeds as long as its embedded + generator does not fail. + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h4"></a> + <span><a name="spirit.karma.reference.directive.duplicate.attributes"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">tuple</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="special">...></span> <span class="special">--></span> <span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<p> + If the embedded generator of the <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code> directive is a sequence it is expected + that all elements of this sequence expose either the same attribute type, + an compatible attribute type, or <code class="computeroutput"><span class="identifier">unused</span></code>. + In this case, the <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code> directive exposes the attribute type + of its first element. The behavior of the <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code> directive is undefined if the elements + of an embedded sequence do not expose the same attributes. Most likely, + the corresponding expression will not compile. + </p> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h5"></a> + <span><a name="spirit.karma.reference.directive.duplicate.complexity"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the <code class="computeroutput"><span class="identifier">duplicate</span><span class="special">[]</span></code> directive depends on the complexity + of the embedded generator. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.duplicate.h6"></a> + <span><a name="spirit.karma.reference.directive.duplicate.example"></a></span><a class="link" href="duplicate.html#spirit.karma.reference.directive.duplicate.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">duplicate</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">duplicate</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2.02.0"</span><span class="special">,</span> <span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">],</span> <span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"2.0 2.0 "</span><span class="special">,</span> <span class="identifier">duplicate</span><span class="special">[</span><span class="identifier">double_</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">],</span> <span class="identifier">space</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="omit.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="columns.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/maxwidth.html b/libs/spirit/doc/html/spirit/karma/reference/directive/maxwidth.html new file mode 100755 index 0000000000..df5af8add3 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/maxwidth.html @@ -0,0 +1,308 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives Controlling the Maximum Field Width (maxwidth[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"> +<link rel="next" href="buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"> +</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="upperlower.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="buffer.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.maxwidth"></a><a class="link" href="maxwidth.html" title="Generator Directives Controlling the Maximum Field Width (maxwidth[])">Generator + Directives Controlling the Maximum Field Width (<code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h0"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.description"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code> + directive allows to limit (truncate) the overall length of the output + generated by the embedded generator. + </p> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h1"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.header"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/maxwidth.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_maxwidth</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">maxwidth</span> <span class="comment">// + alias: boost::spirit::karma::maxwidth</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h2"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.model_of"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type of the generator <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">num</span></code></span></dt> +<dd><p> + Numeric literal, any unsigned integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to an unsigned integer value + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h3"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.expression_semantics"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Limit the overall length of the emitted output of the embedded + generator (including characters generated by automatic delimiting) + to the number of characters as defined by the preprocessor + constant <code class="computeroutput"><span class="identifier">BOOST_KARMA_DEFAULT_FIELD_MAXWIDTH</span></code>. + Any additional output is truncated. The directive succeeds + as long as the embedded generator succeeded (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Limit the overall length of the emitted output of the embedded + generator (including characters generated by automatic delimiting) + to the number of characters as defined by <code class="computeroutput"><span class="identifier">num</span></code>. + Any additional output is truncated. The directive succeeds + as long as the embedded generator succeeded (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code> + generator directive does not pad the generated output to fill the specified + column width. If the emitted output is shorter than the specified (or + implied) column width, the generated output will be more narrow than + the column width. + </p> +<p> + If the output needs to always be equal to a specified column width, + use one of the alignment directives <code class="computeroutput"><span class="identifier">left</span><span class="special">-</span><span class="identifier">align</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">center</span><span class="special">[]</span></code>, or <code class="computeroutput"><span class="identifier">right_align</span><span class="special">[]</span></code>, for instance: +</p> +<pre class="programlisting"><span class="identifier">maxwidth</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">left_align</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="string">"1234"</span><span class="special">]]</span> +</pre> +<p> + which will output: <code class="computeroutput"><span class="string">"1234 "</span></code> + (without the quotes). + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h4"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.attributes"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">maxwidth</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">maxwidth</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">maxwidth</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">maxwidth</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h5"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.complexity"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the generator directive <code class="computeroutput"><span class="identifier">maxwidth</span><span class="special">[]</span></code> is defined by the complexity of its + embedded generator. The complexity of the directive itself is O(N), + where <code class="computeroutput"><span class="identifier">N</span></code> is the number + of characters generated by the maxwidth directive. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.maxwidth.h6"></a> + <span><a name="spirit.karma.reference.directive.maxwidth.example"></a></span><a class="link" href="maxwidth.html#spirit.karma.reference.directive.maxwidth.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">maxwidth</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">left_align</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">right_align</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">maxwidth</span></code> + generator directive: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"01234"</span><span class="special">,</span> <span class="identifier">maxwidth</span><span class="special">(</span><span class="number">5</span><span class="special">)[</span><span class="string">"0123456789"</span><span class="special">]);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">" 012"</span><span class="special">,</span> <span class="identifier">maxwidth</span><span class="special">(</span><span class="number">5</span><span class="special">)[</span><span class="identifier">right_align</span><span class="special">(</span><span class="number">12</span><span class="special">)[</span><span class="string">"0123456789"</span><span class="special">]]);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"0123 "</span><span class="special">,</span> <span class="identifier">maxwidth</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="identifier">left_align</span><span class="special">(</span><span class="number">8</span><span class="special">)[</span><span class="string">"0123"</span><span class="special">]]);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="upperlower.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="buffer.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/omit.html b/libs/spirit/doc/html/spirit/karma/reference/directive/omit.html new file mode 100755 index 0000000000..0eda59b90f --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/omit.html @@ -0,0 +1,332 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives Consuming Attributes (omit[] and skip[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"> +<link rel="next" href="duplicate.html" title="Generator Directive Duplicating Attributes (duplicate[])"> +</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="buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="duplicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.omit"></a><a class="link" href="omit.html" title="Generator Directives Consuming Attributes (omit[] and skip[])">Generator + Directives Consuming Attributes (<code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.omit.h0"></a> + <span><a name="spirit.karma.reference.directive.omit.description"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.description">Description</a> + </h6> +<p> + The directives <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> + and <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code> + consumes the attribute type of the embedded generator without generating + any output. The <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> directive will still execute the embedded + generator while discarding the generated output afterwards. The <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code> + directive will not execute the embedded generator, but will use it only + to extract the exposed attribute type. + </p> +<h6> +<a name="spirit.karma.reference.directive.omit.h1"></a> + <span><a name="spirit.karma.reference.directive.omit.header"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/omit.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_omit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">omit</span> <span class="comment">// alias: + boost::spirit::karma::omit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">skip</span> <span class="comment">// alias: + boost::spirit::karma::skip</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.omit.h2"></a> + <span><a name="spirit.karma.reference.directive.omit.model_of"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type of generator <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.omit.h3"></a> + <span><a name="spirit.karma.reference.directive.omit.expression_semantics"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">omit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">omit</span></code> directive + consumes the attribute type of the embedded generator <code class="computeroutput"><span class="identifier">A</span></code> without generating any + output. It succeeds always. The embedded generator is executed + and any generated output is discarded. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">skip</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + The <code class="computeroutput"><span class="identifier">skip</span></code> directive + consumes the attribute type of the embedded generator <code class="computeroutput"><span class="identifier">A</span></code> without generating any + output. It succeeds always. The embedded generator is not executed. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.omit.h4"></a> + <span><a name="spirit.karma.reference.directive.omit.attributes"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">omit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">omit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">omit</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">skip</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">skip</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">skip</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.omit.h5"></a> + <span><a name="spirit.karma.reference.directive.omit.complexity"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> directive depends on the complexity + of the embedded generator. The overall complexity of the <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code> + generator directive is O(1) as it does not generate any output. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.omit.h6"></a> + <span><a name="spirit.karma.reference.directive.omit.example"></a></span><a class="link" href="omit.html#spirit.karma.reference.directive.omit.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">omit</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a <code class="computeroutput"><span class="identifier">omit</span></code> + generator directive. It shows how it consumes the first element of the + provided attribute without generating anything, leaving the second element + of the attribute to the non-wrapped <code class="computeroutput"><span class="identifier">double_</span></code> + generator. + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">double</span><span class="special">></span> <span class="identifier">p</span> <span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="identifier">omit</span><span class="special">[</span><span class="identifier">double_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + Generally, this directive is helpful in situations, where the attribute + type contains more information (elements) than need to be used to generate + the required output. Normally in such situations we would resolve to + use semantic actions to explicitly pass the correct parts of the overall + attribute to the generators. The <code class="computeroutput"><span class="identifier">omit</span></code> + directive helps achieving the same without having to use semantic actions. + </p> +<p> + Consider the attribute type: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">fusion</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="keyword">double</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">attribute_type</span><span class="special">;</span> +</pre> +<p> + where we need to generate output only from the first and last element: + </p> +<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_insert</span><span class="special">:</span><span class="identifier">iterator</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">iterator_type</span><span class="special">;</span> + +<span class="identifier">karma</span><span class="special">::</span><span class="identifier">rule</span><span class="special"><</span><span class="identifier">iterator_type</span><span class="special">,</span> <span class="identifier">attribute_type</span><span class="special">()></span> <span class="identifier">r</span><span class="special">;</span> +<span class="identifier">r</span> <span class="special">=</span> <span class="identifier">int_</span><span class="special">[</span><span class="identifier">_1</span> <span class="special">=</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">at_c</span><span class="special"><</span><span class="number">0</span><span class="special">>(</span><span class="identifier">_val</span><span class="special">)]</span> <span class="special"><<</span> <span class="identifier">string</span><span class="special">[</span><span class="identifier">_1</span> <span class="special">=</span> <span class="identifier">phoenix</span><span class="special">::</span><span class="identifier">at_c</span><span class="special"><</span><span class="number">2</span><span class="special">>(</span><span class="identifier">_val</span><span class="special">)];</span> + +<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">;</span> +<span class="identifier">iterator_type</span> <span class="identifier">sink</span><span class="special">(</span><span class="identifier">str</span><span class="special">);</span> +<span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">r</span><span class="special">,</span> <span class="identifier">attribute_type</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2.0</span><span class="special">,</span> <span class="string">"example"</span><span class="special">));</span> <span class="comment">// will generate: '1example'</span> +</pre> +<p> + This is error prone and not really readable. The same can be achieved + by using the <code class="computeroutput"><span class="identifier">omit</span></code> directive: + </p> +<pre class="programlisting"><span class="identifier">r</span> <span class="special">=</span> <span class="identifier">int_</span> <span class="special"><<</span> <span class="identifier">omit</span><span class="special">[</span><span class="identifier">double_</span><span class="special">]</span> <span class="special"><<</span> <span class="identifier">string</span><span class="special">;</span> +</pre> +<p> + which is at the same time more readable and more efficient as we don't + have to use semantic actions. + </p> +<p> + The semantics of using the <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code> directive are identical to the <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> + directive, except that it does not actually execute the embedded generator. + For this reason it is usually preferable to utilize the <code class="computeroutput"><span class="identifier">skip</span><span class="special">[]</span></code> + directive instead of the <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> directive. On the other hand, the + <code class="computeroutput"><span class="identifier">omit</span><span class="special">[]</span></code> + directive is very useful whenever the embedded generator produces side + effects (has semantic actions which need to be executed). + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="buffer.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="duplicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/repeat.html b/libs/spirit/doc/html/spirit/karma/reference/directive/repeat.html new file mode 100755 index 0000000000..62fb5633fd --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/repeat.html @@ -0,0 +1,459 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Repetition Generator Directive (repeat[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])"> +<link rel="next" href="delimit.html" title="Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])"> +</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="alignment.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="delimit.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.repeat"></a><a class="link" href="repeat.html" title="Repetition Generator Directive (repeat[])">Repetition + Generator Directive (<code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h0"></a> + <span><a name="spirit.karma.reference.directive.repeat.description"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.description">Description</a> + </h6> +<p> + The repetition directive allows to repeat an arbitrary generator expression + while optionally specifying the lower and upper repetition counts. It + provides a more powerful and flexible mechanism for repeating a generator. + There are grammars that are impractical and cumbersome, if not impossible, + for the basic EBNF iteration syntax ( <a class="link" href="../operator/kleene.html" title="Kleene Star Generator (*a)">unary + <code class="computeroutput"><span class="char">'*'</span></code></a> and the <a class="link" href="../operator/plus.html" title="Plus Generator (+a)">unary + <code class="computeroutput"><span class="char">'+'</span></code></a>) to specify. Examples: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + A file name may have a maximum of 255 characters only. + </li> +<li class="listitem"> + A specific bitmap file format has exactly 4096 RGB color information. + </li> +<li class="listitem"> + A 256 bit binary string (1..256 1s or 0s). + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h1"></a> + <span><a name="spirit.karma.reference.directive.repeat.header"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/repeat.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_repeat</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.repeat.h2"></a> + <span><a name="spirit.karma.reference.directive.repeat.namespace"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">repeat</span> <span class="comment">// + alias: boost::spirit::karma::repeat</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">inf</span> <span class="comment">// alias: + boost::spirit::karma::inf</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h3"></a> + <span><a name="spirit.karma.reference.directive.repeat.model_of"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">num</span><span class="special">,</span> + <span class="identifier">num1</span><span class="special">,</span> + <span class="identifier">num2</span></code></span></dt> +<dd><p> + Numeric literals, any unsigned integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to an unsigned integer value + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">inf</span></code></span></dt> +<dd><p> + Placeholder expression standing for 'no upper repeat limit' + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h4"></a> + <span><a name="spirit.karma.reference.directive.repeat.expression_semantics"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Repeat the generator <code class="computeroutput"><span class="identifier">a</span></code> + zero or more times. This generator succeeds as long as its + embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail (except if the underlying output stream reports + an error). This variant of <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code> is semantically equivalent + to the <a class="link" href="../operator/kleene.html" title="Kleene Star Generator (*a)">Kleene + Star operator <code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code></a> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Repeat the generator <code class="computeroutput"><span class="identifier">a</span></code> + exactly <code class="computeroutput"><span class="identifier">num</span></code> + times. This generator succeeds as long as its embedded generator + <code class="computeroutput"><span class="identifier">a</span></code> does not + fail and as long as the associated attribute (container) contains + at least <code class="computeroutput"><span class="identifier">num</span></code> + elements (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num1</span><span class="special">,</span> + <span class="identifier">num2</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Repeat the generator <code class="computeroutput"><span class="identifier">a</span></code> + at least <code class="computeroutput"><span class="identifier">num1</span></code> + times but not more than <code class="computeroutput"><span class="identifier">num2</span></code> + times. This generator succeeds as long as its embedded generator + <code class="computeroutput"><span class="identifier">a</span></code> does not + fail and as long as the associated attribute (container) contains + at least <code class="computeroutput"><span class="identifier">num1</span></code> + elements (unless the underlying output stream reports an error). + If the associated attribute (container) does contain more than + <code class="computeroutput"><span class="identifier">num2</span></code> elements, + this directive limits the repeat count to <code class="computeroutput"><span class="identifier">num2</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> + <span class="identifier">inf</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Repeat the generator <code class="computeroutput"><span class="identifier">a</span></code> + at least <code class="computeroutput"><span class="identifier">num1</span></code> + times. No upper limit for the repeat count is set. This generator + succeeds as long as its embedded generator <code class="computeroutput"><span class="identifier">a</span></code> + does not fail and as long as the associated attribute (container) + contains at least <code class="computeroutput"><span class="identifier">num</span></code> + elements (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + All failing iterations of the embedded generator will consume one element + from the supplied attribute. The overall <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> will succeed as long as the iteration + criteria (number of successful invocations of the embedded generator) + is fulfilled (unless the underlying output stream reports an error). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h5"></a> + <span><a name="spirit.karma.reference.directive.repeat.attributes"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num1</span><span class="special">,</span> + <span class="identifier">num2</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num1</span><span class="special">,</span> <span class="identifier">num2</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num1</span><span class="special">,</span> <span class="identifier">num2</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> + <span class="identifier">inf</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> <span class="identifier">inf</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="identifier">repeat</span><span class="special">(</span><span class="identifier">num</span><span class="special">,</span> <span class="identifier">inf</span><span class="special">)[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The table above uses <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as placeholders only. + </p> +<p> + The notation of <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> stands for <span class="emphasis"><em>any STL container</em></span> + holding elements of type <code class="computeroutput"><span class="identifier">A</span></code>. + </p> +</td></tr> +</table></div> +<p> + It is important to note, that the <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code> directive does not perform any buffering + of the output generated by its embedded elements. That means that any + failing element generator might have already generated some output, which + is <span class="emphasis"><em>not</em></span> rolled back. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The simplest way to force a <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[]</span></code> directive to behave as if it did + buffering is to wrap it into a buffering directive (see <a class="link" href="buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]]</span></pre> +<p> + </p> +<p> + which will <span class="emphasis"><em>not</em></span> generate any output in case of + a failing generator <code class="computeroutput"><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code>. The expression: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">repeat</span><span class="special">[</span><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">]]</span></pre> +<p> + </p> +<p> + will not generate any partial output from a generator <code class="computeroutput"><span class="identifier">a</span></code> if it fails generating in the middle + of its output. The overall expression will still generate the output + as produced by all succeeded invocations of the generator <code class="computeroutput"><span class="identifier">a</span></code>. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h6"></a> + <span><a name="spirit.karma.reference.directive.repeat.complexity"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the repetition generator is defined by the + complexity of its embedded generator. The complexity of the repeat + itself is O(N), where N is the number of repetitions to execute. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.repeat.h7"></a> + <span><a name="spirit.karma.reference.directive.repeat.example"></a></span><a class="link" href="repeat.html#spirit.karma.reference.directive.repeat.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">repeat</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">repeat</span></code> + generator directive: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[1.0][2.0][3.0]"</span><span class="special">,</span> <span class="identifier">repeat</span><span class="special">[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"[1.0][2.0]"</span><span class="special">,</span> <span class="identifier">repeat</span><span class="special">(</span><span class="number">2</span><span class="special">)[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> + +<span class="comment">// fails because of insufficient number of items</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">repeat</span><span class="special">(</span><span class="number">4</span><span class="special">)[</span><span class="char">'['</span> <span class="special"><<</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">']'</span><span class="special">],</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="alignment.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="delimit.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/directive/upperlower.html b/libs/spirit/doc/html/spirit/karma/reference/directive/upperlower.html new file mode 100755 index 0000000000..265cf99dfd --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/directive/upperlower.html @@ -0,0 +1,345 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Directives Controlling Case Sensitivity (upper[], lower[])</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="Spirit 2.5.2"> +<link rel="up" href="../directive.html" title="Generator Directives"> +<link rel="prev" href="delimit.html" title="Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])"> +<link rel="next" href="maxwidth.html" title="Generator Directives Controlling the Maximum Field Width (maxwidth[])"> +</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="delimit.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="maxwidth.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.directive.upperlower"></a><a class="link" href="upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])">Generator + Directives Controlling Case Sensitivity (<code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code>, <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h0"></a> + <span><a name="spirit.karma.reference.directive.upperlower.description"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.description">Description</a> + </h6> +<p> + The generator directives <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span><span class="special">[]</span></code> force their embedded generators to + emit lower case or upper case only characters based on the interpretation + of the generated characters in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code> (see <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>). + </p> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h1"></a> + <span><a name="spirit.karma.reference.directive.upperlower.header"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/directive/upper_lower_case.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_upper_lower_case</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h2"></a> + <span><a name="spirit.karma.reference.directive.upperlower.namespace"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<p> + In the table above, <code class="computeroutput"><span class="identifier">ns</span></code> + represents a <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h3"></a> + <span><a name="spirit.karma.reference.directive.upperlower.model_of"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The model of <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> is the model of its subject generator. + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt> +<dd><p> + A generator object + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt> +<dd><p> + Attribute type of the generator <code class="computeroutput"><span class="identifier">a</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt> +<dd><p> + A <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h4"></a> + <span><a name="spirit.karma.reference.directive.upperlower.expression_semantics"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.expression_semantics">Expression + Semantics</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + and <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives have no special generator semantics. They are pure modifier + directives. They indirectly influence the way all subject generators + work. They add information (the <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">upper</span></code> + or <code class="computeroutput"><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lower</span></code>) to the <code class="computeroutput"><span class="identifier">Modifier</span></code> + template parameter used while transforming the <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">expr</span></code> + into the corresponding generator expression. This is achieved by the + following specializations: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">is_modifier_directive</span><span class="special"><</span> + <span class="identifier">karma</span><span class="special">::</span><span class="identifier">domain</span> + <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">char_code</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">lower</span><span class="special">,</span> <span class="identifier">CharEncoding</span><span class="special">></span> <span class="special">></span> + <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span> + <span class="special">{};</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">is_modifier_directive</span><span class="special"><</span> + <span class="identifier">karma</span><span class="special">::</span><span class="identifier">domain</span> + <span class="special">,</span> <span class="identifier">tag</span><span class="special">::</span><span class="identifier">char_code</span><span class="special"><</span><span class="identifier">tag</span><span class="special">::</span><span class="identifier">upper</span><span class="special">,</span> <span class="identifier">CharEncoding</span><span class="special">></span> <span class="special">></span> + <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span> +<span class="special">}}</span> +</pre> +<p> + (for more details see the section describing the compilation process + of the <a href="../../../../../../../../doc/html/proto.html" target="_top">Boost.Proto</a> expression + into the corresponding generator expressions). + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + as lower case, interpreted in the character set defined by + <code class="computeroutput"><span class="identifier">ns</span></code>. The directive + succeeds as long as the embedded generator succeeded (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="identifier">a</span></code> + as upper case, interpreted in the character set defined by + <code class="computeroutput"><span class="identifier">ns</span></code>. The directive + succeeds as long as the embedded generator succeeded (unless + the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"> +<p> + If both directives are 'active' with regard to a generator, the innermost + of those directives takes precedence. For instance: +</p> +<pre class="programlisting"><span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">ascii</span><span class="special">::</span><span class="identifier">lower</span><span class="special">[</span><span class="char">'A'</span> <span class="special"><<</span> <span class="identifier">ascii</span><span class="special">::</span><span class="identifier">upper</span><span class="special">[</span><span class="char">'b'</span><span class="special">]])</span> +</pre> +<p> + will generate <code class="computeroutput"><span class="string">"aB"</span></code> + (without the quotes). + </p> +<p> + Further, the directives will have no effect on generators emitting + characters not having an upper case or lower case equivalent in the + character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h5"></a> + <span><a name="spirit.karma.reference.directive.upperlower.attributes"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">:</span><span class="identifier">lower</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">ns</span><span class="special">:</span><span class="identifier">lower</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">ns</span><span class="special">:</span><span class="identifier">lower</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">:</span><span class="identifier">upper</span><span class="special">[</span><span class="identifier">a</span><span class="special">]</span></code> + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="identifier">ns</span><span class="special">:</span><span class="identifier">upper</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span> <span class="special">--></span> <span class="identifier">ns</span><span class="special">:</span><span class="identifier">upper</span><span class="special">[</span><span class="identifier">a</span><span class="special">]:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h6"></a> + <span><a name="spirit.karma.reference.directive.upperlower.complexity"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the generator directives <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">lower</span><span class="special">[]</span></code> and <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">upper</span><span class="special">[]</span></code> is defined by the complexity of its + embedded generators. The directives themselves are compile time only + directives, having no impact on runtime performance. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.directive.upperlower.h7"></a> + <span><a name="spirit.karma.reference.directive.upperlower.example"></a></span><a class="link" href="upperlower.html#spirit.karma.reference.directive.upperlower.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">upper</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">lower</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of the <code class="computeroutput"><span class="identifier">upper</span></code> + and <code class="computeroutput"><span class="identifier">lower</span></code> generator directives: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc:2.0e-06"</span><span class="special">,</span> <span class="identifier">lower</span><span class="special">[</span><span class="string">"ABC:"</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">],</span> <span class="number">2e-6</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"ABC:2.0E-06"</span><span class="special">,</span> <span class="identifier">upper</span><span class="special">[</span><span class="string">"abc:"</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">],</span> <span class="number">2e-6</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="delimit.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../directive.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="maxwidth.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generate_api.html b/libs/spirit/doc/html/spirit/karma/reference/generate_api.html new file mode 100755 index 0000000000..500ee37014 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generate_api.html @@ -0,0 +1,51 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator API</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="basics.html" title="Generator Basics"> +<link rel="next" href="generate_api/iterator_api.html" title="Iterator Based Generator API"> +</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="basics.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generate_api/iterator_api.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="spirit.karma.reference.generate_api"></a><a class="link" href="generate_api.html" title="Generator API">Generator API</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="generate_api/iterator_api.html">Iterator + Based Generator API</a></span></dt> +<dt><span class="section"><a href="generate_api/stream_api.html">Stream + Based Generator API</a></span></dt> +<dt><span class="section"><a href="generate_api/create_generator.html">API + for Automatic Generator Creation</a></span></dt> +</dl></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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="basics.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generate_api/iterator_api.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generate_api/create_generator.html b/libs/spirit/doc/html/spirit/karma/reference/generate_api/create_generator.html new file mode 100755 index 0000000000..5d74039b7a --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generate_api/create_generator.html @@ -0,0 +1,347 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>API for Automatic Generator Creation</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="Spirit 2.5.2"> +<link rel="up" href="../generate_api.html" title="Generator API"> +<link rel="prev" href="stream_api.html" title="Stream Based Generator API"> +<link rel="next" href="../action.html" title="Semantic Actions with Generators"> +</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="stream_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="../action.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generate_api.create_generator"></a><a class="link" href="create_generator.html" title="API for Automatic Generator Creation">API + for Automatic Generator Creation</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generate_api.create_generator.h0"></a> + <span><a name="spirit.karma.reference.generate_api.create_generator.description"></a></span><a class="link" href="create_generator.html#spirit.karma.reference.generate_api.create_generator.description">Description</a> + </h6> +<p> + The library implements a special API returning a generator instance for + a supplied attribute type. This function finds the best matching generator + type for the attribute based on a set of simple matching rules (as outlined + in the table below) applied recursively to the attribute type. The returned + generator can be utilized to emit output for the provided attribute. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.create_generator.h1"></a> + <span><a name="spirit.karma.reference.generate_api.create_generator.header"></a></span><a class="link" href="create_generator.html#spirit.karma.reference.generate_api.create_generator.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/auto.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.create_generator.h2"></a> + <span><a name="spirit.karma.reference.generate_api.create_generator.namespace"></a></span><a class="link" href="create_generator.html#spirit.karma.reference.generate_api.create_generator.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">create_generator</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator_exists</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generate_api.create_generator.h3"></a> + <span><a name="spirit.karma.reference.generate_api.create_generator.synopsis"></a></span><a class="link" href="create_generator.html#spirit.karma.reference.generate_api.create_generator.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">karma</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">create_generator</span><span class="special">();</span> +<span class="special">}}}</span> +</pre> +<p> + The returned instance can be directly passed as the generator (or the + delimiting generator) to any of the <span class="emphasis"><em>Spirit.Karma</em></span> + API functions. Additionally it can be assigned to a rule as the rules + right hand side expression. This function will return a valid generator + type only if the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_generator_exists</span></code> + returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>. Otherwise it will fail compiling. + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">traits</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">></span> + <span class="keyword">struct</span> <span class="identifier">create_generator_exists</span><span class="special">;</span> +<span class="special">}}}</span> +</pre> +<p> + The meta function evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if <code class="computeroutput"><span class="identifier">create_generator</span></code> would + return a valid generator for the given type <code class="computeroutput"><span class="identifier">Attr</span></code>. + </p> +<p> + The following table outlines the mapping rules from the attribute type + to the generator type. These rules are applied recursively to create + the generator type which can be used to generate output from the given + attribute type. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Attribute type + </p> + </th> +<th> + <p> + Generator type + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">wchar_t</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">standard</span><span class="special">::</span><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">standard_wide</span><span class="special">::</span><span class="identifier">char_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">ushort_</span></code>, <code class="computeroutput"><span class="identifier">uint_</span></code>, <code class="computeroutput"><span class="identifier">ulong_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code>, <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">float_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, <code class="computeroutput"><span class="identifier">long_double</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>, + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> + <span class="keyword">long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_long</span></code>, + <code class="computeroutput"><span class="identifier">ulong_long</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + Any string (<code class="computeroutput"><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>, etc.) + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">string</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + Any (STL) container + </p> + </td> +<td> + <p> + Kleene Star (unary <code class="computeroutput"><span class="char">'*'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + Any Fusion sequence + </p> + </td> +<td> + <p> + Sequence operator (<code class="computeroutput"><span class="char">'<<'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> + </p> + </td> +<td> + <p> + Optional operator (unary <code class="computeroutput"><span class="char">'-'</span></code>) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special"><></span></code> + </p> + </td> +<td> + <p> + Alternative operator (<code class="computeroutput"><span class="char">'|'</span></code>) + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The mapping for the generators <code class="computeroutput"><span class="identifier">long_long</span></code> + and <code class="computeroutput"><span class="identifier">ulong_long</span></code> are + only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">long</span></code> and <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">long</span> <span class="keyword">long</span></code> + (64 bit) signed and unsigned integer types). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.generate_api.create_generator.h4"></a> + <span><a name="spirit.karma.reference.generate_api.create_generator.template_parameters"></a></span><a class="link" href="create_generator.html#spirit.karma.reference.generate_api.create_generator.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attr</span></code> + </p> + </td> +<td> + <p> + An attribute type utilized to create the corresponding generator + type from. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="stream_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="../action.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generate_api/iterator_api.html b/libs/spirit/doc/html/spirit/karma/reference/generate_api/iterator_api.html new file mode 100755 index 0000000000..6de5114cb3 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generate_api/iterator_api.html @@ -0,0 +1,326 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Iterator Based Generator API</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="Spirit 2.5.2"> +<link rel="up" href="../generate_api.html" title="Generator API"> +<link rel="prev" href="../generate_api.html" title="Generator API"> +<link rel="next" href="stream_api.html" title="Stream Based Generator API"> +</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="../generate_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="stream_api.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generate_api.iterator_api"></a><a class="link" href="iterator_api.html" title="Iterator Based Generator API">Iterator + Based Generator API</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generate_api.iterator_api.h0"></a> + <span><a name="spirit.karma.reference.generate_api.iterator_api.description"></a></span><a class="link" href="iterator_api.html#spirit.karma.reference.generate_api.iterator_api.description">Description</a> + </h6> +<p> + The library provides a couple of free functions to make generating a + snap. These generator functions have two forms. The first form, <code class="computeroutput"><span class="identifier">generate</span></code>, concatenates the output generated + by the involved components without inserting any output in between. The + second <code class="computeroutput"><span class="identifier">generate_delimited</span></code> + intersperses the output generated by the involved components using the + given delimiter generator. Both versions can take in attributes by (constant) + reference that hold the attribute values to output. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.iterator_api.h1"></a> + <span><a name="spirit.karma.reference.generate_api.iterator_api.header"></a></span><a class="link" href="iterator_api.html#spirit.karma.reference.generate_api.iterator_api.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/generate.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_generate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For variadic attributes: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/generate_attr.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_generate_attr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The variadic attributes version of the API allows one or more attributes + to be passed into the <code class="computeroutput"><span class="identifier">generate</span></code> + functions. The functions taking two or more attributes are usable when + the generator expression is a <a class="link" href="../operator/sequence.html" title="Sequence Generator (a << b)">Sequence + (<code class="computeroutput"><span class="special"><<</span></code>)</a> only. + In this case each of the attributes passed have to match the corresponding + part of the sequence. + </p> +<p> + For the API functions deducing the correct (matching) generator type + from the supplied attribute type: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/detail/generate_auto.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_generate_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.iterator_api.h2"></a> + <span><a name="spirit.karma.reference.generate_api.iterator_api.namespace"></a></span><a class="link" href="iterator_api.html#spirit.karma.reference.generate_api.iterator_api.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate_delimited</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">predelimit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generate_api.iterator_api.h3"></a> + <span><a name="spirit.karma.reference.generate_api.iterator_api.synopsis"></a></span><a class="link" href="iterator_api.html#spirit.karma.reference.generate_api.iterator_api.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">karma</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expr</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate_delimited</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">delimiter</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> <span class="special">=</span> <span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate_delimited</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">delimiter</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate_delimited</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">delimiter</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Starting with <a href="http://boost-spirit.com" target="_top">Spirit</a> V2.5 + (distributed with Boost V1.47) the placeholder <code class="computeroutput"><span class="identifier">_val</span></code> + can be used in semantic actions attached to top level generator components. + In this case <code class="computeroutput"><span class="identifier">_val</span></code> refers + to the supplied attribute as a whole. For API functions taking more + than one attribute argument <code class="computeroutput"><span class="identifier">_val</span></code> + will refer to a Fusion vector or references to the attributes. + </p></td></tr> +</table></div> +<p> + <span class="emphasis"><em>Spirit.Karma</em></span> generator API functions based on the + automatic creation of the matching generator type: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">karma</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate_delimited</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Attr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">delimiter</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> <span class="special">=</span> <span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">></span> + <span class="keyword">inline</span> <span class="keyword">bool</span> + <span class="identifier">generate</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Attr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">);</span> +<span class="special">}}}</span> +</pre> +<p> + All functions above return <code class="computeroutput"><span class="keyword">true</span></code> + if none of the involved generator components failed, and <code class="computeroutput"><span class="keyword">false</span></code> otherwise. If during the process + of the output generation the underlying output stream reports an error, + the return value will be <code class="computeroutput"><span class="keyword">false</span></code> + as well. + </p> +<p> + The maximum number of supported arguments is limited by the preprocessor + constant <code class="computeroutput"><span class="identifier">SPIRIT_ARGUMENTS_LIMIT</span></code>. + This constant defaults to the value defined by the preprocessor constant + <code class="computeroutput"><span class="identifier">PHOENIX_LIMIT</span></code> (which + in turn defaults to <code class="computeroutput"><span class="number">10</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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The variadic functions with two or more attributes internally combine + (constant) references to all passed attributes into a <code class="computeroutput"><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">vector</span></code> and forward this as a combined + attribute to the corresponding function taking one attribute. + </p></td></tr> +</table></div> +<p> + The <code class="computeroutput"><span class="identifier">generate_delimited</span></code> + functions not taking an explicit <code class="computeroutput"><span class="identifier">delimit_flag</span></code> + as one of their arguments don't invoke the passed delimiter before starting + to generate output from the generator expression. This can be enabled + by using the other version of that function while passing <code class="computeroutput"><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">predelimit</span></code> to the corresponding argument. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.iterator_api.h4"></a> + <span><a name="spirit.karma.reference.generate_api.iterator_api.template_parameters"></a></span><a class="link" href="iterator_api.html#spirit.karma.reference.generate_api.iterator_api.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + </p> + </td> +<td> + <p> + <a href="http://www.sgi.com/tech/stl/OutputIterator.html" target="_top"><code class="computeroutput"><span class="identifier">OutputIterator</span></code></a> receiving + the generated output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Expr</span></code> + </p> + </td> +<td> + <p> + An expression that can be converted to a Karma generator. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Delimiter</span></code> + </p> + </td> +<td> + <p> + Generator used to delimit the output of the expression components. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attr</span></code> + </p> + </td> +<td> + <p> + An attribute type utilized to create the corresponding generator + type from. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attr1</span></code>, <code class="computeroutput"><span class="identifier">Attr2</span></code>, ..., <code class="computeroutput"><span class="identifier">AttrN</span></code> + </p> + </td> +<td> + <p> + One or more attributes. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../generate_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="stream_api.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generate_api/stream_api.html b/libs/spirit/doc/html/spirit/karma/reference/generate_api/stream_api.html new file mode 100755 index 0000000000..162ff4eebf --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generate_api/stream_api.html @@ -0,0 +1,294 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Stream Based Generator API</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="Spirit 2.5.2"> +<link rel="up" href="../generate_api.html" title="Generator API"> +<link rel="prev" href="iterator_api.html" title="Iterator Based Generator API"> +<link rel="next" href="create_generator.html" title="API for Automatic Generator Creation"> +</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="iterator_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="create_generator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generate_api.stream_api"></a><a class="link" href="stream_api.html" title="Stream Based Generator API">Stream + Based Generator API</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generate_api.stream_api.h0"></a> + <span><a name="spirit.karma.reference.generate_api.stream_api.description"></a></span><a class="link" href="stream_api.html#spirit.karma.reference.generate_api.stream_api.description">Description</a> + </h6> +<p> + The library provides a couple of Standard IO <a href="http://www.cppreference.com/wiki/io/io_flags#manipulators" target="_top">Manipulators</a> + allowing to integrate <span class="emphasis"><em>Spirit.Karma</em></span> output generation + facilities with Standard output streams. These generator manipulators + have two forms. The first form, <code class="computeroutput"><span class="identifier">format</span></code>, + concatenates the output generated by the involved components without + inserting any output in between. The second, <code class="computeroutput"><span class="identifier">format_delimited</span></code>, + intersperses the output generated by the involved components using the + given delimiter generator. Both versions can take in attributes by (constant) + reference that hold the attribute values to output. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.stream_api.h1"></a> + <span><a name="spirit.karma.reference.generate_api.stream_api.header"></a></span><a class="link" href="stream_api.html#spirit.karma.reference.generate_api.stream_api.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/stream/format_manip.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_format</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + For variadic attributes: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/stream/format_manip_attr.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_format_attr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + The variadic attributes version of the API allows one or more attributes + to be passed into the <code class="computeroutput"><span class="identifier">format</span></code> + manipulators. The manipulators taking two or more attributes are usable + when the generator expression is a <a class="link" href="../operator/sequence.html" title="Sequence Generator (a << b)">Sequence + (<code class="computeroutput"><span class="special"><<</span></code>)</a> only. + In this case each of the attributes passed have to match the corresponding + part of the sequence. + </p> +<p> + For the API functions deducing the correct (matching) generator type + from the supplied attribute type: + </p> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/format_auto.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_format_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.stream_api.h2"></a> + <span><a name="spirit.karma.reference.generate_api.stream_api.namespace"></a></span><a class="link" href="stream_api.html#spirit.karma.reference.generate_api.stream_api.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">format</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">format_delimited</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">predelimit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generate_api.stream_api.h3"></a> + <span><a name="spirit.karma.reference.generate_api.stream_api.synopsis"></a></span><a class="link" href="stream_api.html#spirit.karma.reference.generate_api.stream_api.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">karma</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format</span><span class="special">(</span> + <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">xpr</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Expr</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format</span><span class="special">(</span> + <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">xpr</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format_delimited</span><span class="special">(</span> + <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> <span class="special">=</span> <span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format_delimited</span><span class="special">(</span> + <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Expr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format_delimited</span><span class="special">(</span> + <span class="identifier">Expr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> + <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attrN</span><span class="special">);</span> +<span class="special">}}}</span> +</pre> +<p> + <span class="emphasis"><em>Spirit.Karma</em></span> generator API functions based on the + automatic creation of the matching generator type: + </p> +<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">karma</span> +<span class="special">{</span> + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Delimiter</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format_delimited</span><span class="special">(</span> + <span class="identifier">Attr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span> + <span class="special">,</span> <span class="identifier">Delimiter</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">d</span> + <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">delimit_flag</span><span class="special">)</span> <span class="identifier">pre_delimit</span> <span class="special">=</span> <span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">dont_predelimit</span><span class="special">);</span> + + <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attr</span><span class="special">></span> + <span class="keyword">inline</span> <span class="special"><</span><span class="identifier">unspecified</span><span class="special">></span> + <span class="identifier">format</span><span class="special">(</span> + <span class="identifier">Attr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">xpr</span><span class="special">);</span> +<span class="special">}}}</span> +</pre> +<p> + All functions above return a standard IO stream manipulator instance + (see <a href="http://www.cppreference.com/wiki/io/io_flags#manipulators" target="_top">Manipulators</a>), + which when streamed to an output stream will result in generating the + output as emitted by the embedded <span class="emphasis"><em>Spirit.Karma</em></span> generator + expression. Any error occurring during the invocation of the <span class="emphasis"><em>Spirit.Karma</em></span> + generators will be reflected in the streams status flag (<code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">failbit</span></code> will be set). + </p> +<p> + The maximum number of supported arguments is limited by the preprocessor + constant <code class="computeroutput"><span class="identifier">SPIRIT_ARGUMENTS_LIMIT</span></code>. + This constant defaults to the value defined by the preprocessor constant + <code class="computeroutput"><span class="identifier">PHOENIX_LIMIT</span></code> (which + in turn defaults to <code class="computeroutput"><span class="number">10</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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The variadic manipulators with two or more attributes internally combine + (constant) references to all passed attributes into a <code class="computeroutput"><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">vector</span></code> and forward this as a combined + attribute to the corresponding manipulator taking one attribute. + </p></td></tr> +</table></div> +<p> + The <code class="computeroutput"><span class="identifier">format_delimited</span></code> + manipulators not taking an explicit <code class="computeroutput"><span class="identifier">delimit_flag</span></code> + as one of their arguments don't invoke the passed delimiter before starting + to generate output from the generator expression. This can be enabled + by using the other version of that manipulator while passing <code class="computeroutput"><span class="identifier">delimit_flag</span><span class="special">::</span><span class="identifier">predelimit</span></code> to the corresponding argument. + </p> +<h6> +<a name="spirit.karma.reference.generate_api.stream_api.h4"></a> + <span><a name="spirit.karma.reference.generate_api.stream_api.template_parameters"></a></span><a class="link" href="stream_api.html#spirit.karma.reference.generate_api.stream_api.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Expr</span></code> + </p> + </td> +<td> + <p> + An expression that can be converted to a Karma generator. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Delimiter</span></code> + </p> + </td> +<td> + <p> + Generator used to delimit the output of the expression components. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attr</span></code> + </p> + </td> +<td> + <p> + An attribute type utilized to create the corresponding generator + type from. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attr1</span></code>, <code class="computeroutput"><span class="identifier">Attr2</span></code>, ..., <code class="computeroutput"><span class="identifier">AttrN</span></code> + </p> + </td> +<td> + <p> + One or more attributes. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="iterator_api.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generate_api.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="create_generator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts.html new file mode 100755 index 0000000000..af05743972 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts.html @@ -0,0 +1,65 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Concepts</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="../reference.html" title="Reference"> +<link rel="next" href="generator_concepts/generator.html" title="Generator"> +</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="../reference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generator_concepts/generator.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="spirit.karma.reference.generator_concepts"></a><a class="link" href="generator_concepts.html" title="Generator Concepts">Generator + Concepts</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="generator_concepts/generator.html">Generator</a></span></dt> +<dt><span class="section"><a href="generator_concepts/primitivegenerator.html">PrimitiveGenerator</a></span></dt> +<dt><span class="section"><a href="generator_concepts/unarygenerator.html">UnaryGenerator</a></span></dt> +<dt><span class="section"><a href="generator_concepts/binarygenerator.html">BinaryGenerator</a></span></dt> +<dt><span class="section"><a href="generator_concepts/narygenerator.html">NaryGenerator</a></span></dt> +<dt><span class="section"><a href="generator_concepts/nonterminal.html">Nonterminal</a></span></dt> +</dl></div> +<p> + <span class="emphasis"><em>Spirit.Karma</em></span> generators fall into a couple of generalized + <a href="http://www.boost.org/community/generic_programming.html#concept" target="_top">concepts</a>. + The <span class="emphasis"><em>Generator</em></span> is the most fundamental concept. All + <span class="emphasis"><em>Spirit.Karma</em></span> generators are models of the <span class="emphasis"><em>Generator</em></span> + concept. <span class="emphasis"><em>PrimitiveGenerator</em></span>, <span class="emphasis"><em>UnaryGenerator</em></span>, + <span class="emphasis"><em>BinaryGenerator</em></span>, <span class="emphasis"><em>NaryGenerator</em></span>, + and <span class="emphasis"><em>Nonterminal</em></span> are all refinements of the <span class="emphasis"><em>Generator</em></span> + concept. + </p> +<p> + The following sections provide details on these concepts. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../reference.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="generator_concepts/generator.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/binarygenerator.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/binarygenerator.html new file mode 100755 index 0000000000..5dcd866991 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/binarygenerator.html @@ -0,0 +1,240 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>BinaryGenerator</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="unarygenerator.html" title="UnaryGenerator"> +<link rel="next" href="narygenerator.html" title="NaryGenerator"> +</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="unarygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="narygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.binarygenerator"></a><a class="link" href="binarygenerator.html" title="BinaryGenerator">BinaryGenerator</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.description"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.description">Description</a> + </h6> +<p> + <span class="emphasis"><em>BinaryGenerator</em></span> is a composite generator that has + a two subjects, <code class="computeroutput"><span class="identifier">left</span></code> + and <code class="computeroutput"><span class="identifier">right</span></code>. The BinaryGenerator + allows its subjects to be treated in the same way as a single instance + of a <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> following the Composite + Design Pattern. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.refinement_of"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.refinement_of">Refinement + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A BinaryGenerator. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">G</span></code></span></dt> +<dd><p> + A BinaryGenerator type. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.valid_expressions"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.valid_expressions">Valid + Expressions</a> + </h6> +<p> + In addition to the requirements defined in <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>, for any BinaryGenerator + the following must be met: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +<th> + <p> + Return type + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">left</span></code> + </p> + </td> +<td> + <p> + Left generator. + </p> + </td> +<td> + <p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">right</span></code> + </p> + </td> +<td> + <p> + Right generator. + </p> + </td> +<td> + <p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.type_expressions"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">G</span><span class="special">::</span><span class="identifier">left_type</span></code> + </p> + </td> +<td> + <p> + The left generator type. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">G</span><span class="special">::</span><span class="identifier">right_type</span></code> + </p> + </td> +<td> + <p> + The right generator type. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_binary_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + Metafunction that evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if a certain type, <code class="computeroutput"><span class="identifier">G</span></code> + is a BinaryGenerator, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> + otherwise (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Boolean Constant</a>). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.invariants"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.invariants">Invariants</a> + </h6> +<p> + For any BinaryGenerator, <code class="computeroutput"><span class="identifier">G</span></code>, + the following invariants always hold: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">::</span><span class="identifier">left_type</span><span class="special">>::</span><span class="identifier">type</span></code> evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">::</span><span class="identifier">right_type</span><span class="special">>::</span><span class="identifier">type</span></code> evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.binarygenerator.h5"></a> + <span><a name="spirit.karma.reference.generator_concepts.binarygenerator.models"></a></span><a class="link" href="binarygenerator.html#spirit.karma.reference.generator_concepts.binarygenerator.models">Models</a> + </h6> +<p> + The following generators conform to this model: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + <a class="link" href="../operator/list.html" title="List Generator (a % b)">List (<code class="computeroutput"><span class="special">%</span></code>)</a>. + </li></ul></div> +<p> + <span class="bold"><strong>FIXME</strong></span> Add more links to models of BinaryGenerator + concept + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="unarygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="narygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/generator.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/generator.html new file mode 100755 index 0000000000..989cb8bad8 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/generator.html @@ -0,0 +1,276 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="next" href="primitivegenerator.html" title="PrimitiveGenerator"> +</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="../generator_concepts.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="primitivegenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.generator"></a><a class="link" href="generator.html" title="Generator">Generator</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.generator.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.generator.description"></a></span><a class="link" href="generator.html#spirit.karma.reference.generator_concepts.generator.description">Description</a> + </h6> +<p> + The <span class="emphasis"><em>Generator</em></span> is the most fundamental concept. A + Generator has a member function, <code class="computeroutput"><span class="identifier">generate</span></code>, + that accepts an <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + and returns bool as its result. The iterator receives the data being + generated. The Generator's <code class="computeroutput"><span class="identifier">generate</span></code> + member function returns <code class="computeroutput"><span class="keyword">true</span></code> + if the generator succeeds. Each Generator can represent a specific pattern + or algorithm, or it can be a more complex generator formed as a composition + of other Generators. + </p> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A <code class="computeroutput"><span class="identifier">Generator</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">G</span></code></span></dt> +<dd><p> + A <code class="computeroutput"><span class="identifier">Generator</span></code> type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">OutIter</span></code></span></dt> +<dd><p> + An <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">sink</span></code></span></dt> +<dd><p> + An <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + instance. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Context</span></code></span></dt> +<dd><p> + The generator's Context type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">context</span></code></span></dt> +<dd><p> + The generator's Context, or <code class="computeroutput"><span class="identifier">unused</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">delimit</span></code></span></dt> +<dd><p> + A delimiter Generator, or <code class="computeroutput"><span class="identifier">unused</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">attrib</span></code></span></dt> +<dd><p> + A Compatible Attributes, or <code class="computeroutput"><span class="identifier">unused</span></code>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.generator_concepts.generator.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.generator.valid_expressions"></a></span><a class="link" href="generator.html#spirit.karma.reference.generator_concepts.generator.valid_expressions">Valid + Expressions</a> + </h6> +<p> + In the expressions below, the behavior of the generator, <code class="computeroutput"><span class="identifier">g</span></code>, as well as how <code class="computeroutput"><span class="identifier">delimit</span></code> + and <code class="computeroutput"><span class="identifier">attrib</span></code> are handled + by <code class="computeroutput"><span class="identifier">g</span></code>, are left unspecified + in the base <code class="computeroutput"><span class="identifier">Generator</span></code> + concept. These are specified in subsequent, more refined concepts and + by the actual models thereof. + </p> +<p> + For any Generator the following expressions must be valid: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +<th> + <p> + Return type + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">g</span><span class="special">.</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">context</span><span class="special">,</span> <span class="identifier">delimit</span><span class="special">,</span> <span class="identifier">attrib</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the output sequence by inserting the generated characters/tokens + into <code class="computeroutput"><span class="identifier">sink</span></code>. + Use the <code class="computeroutput"><span class="identifier">delimit</span></code> + generator for delimiting. Return <code class="computeroutput"><span class="keyword">true</span></code> + if successful, otherwise return <code class="computeroutput"><span class="keyword">false</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">what</span><span class="special">(</span><span class="identifier">context</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Get information about a Generator. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">info</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.generator.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.generator.type_expressions"></a></span><a class="link" href="generator.html#spirit.karma.reference.generator_concepts.generator.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">G</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">attribute</span><span class="special"><</span><span class="identifier">Context</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + The Generator's attribute. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + Metafunction that evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if a certain type, <code class="computeroutput"><span class="identifier">G</span></code> + is a Generator, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> + otherwise (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Boolean Constant</a>). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">G</span><span class="special">::</span><span class="identifier">properties</span></code> + </p> + </td> +<td> + <p> + An <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span></code> (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Integral Constant</a>) holding a value from the <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">generator_properties</span></code> enumeration. + The default value is <code class="computeroutput"><span class="identifier">generator_properties</span><span class="special">::</span><span class="identifier">no_properties</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.generator.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.generator.postcondition"></a></span><a class="link" href="generator.html#spirit.karma.reference.generator_concepts.generator.postcondition">Postcondition</a> + </h6> +<p> + Upon return from <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">generate</span></code> the following post conditions + should hold: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + On successful generation, <code class="computeroutput"><span class="identifier">sink</span></code> + receives the generated characters/tokens sequence. + </li> +<li class="listitem"> + No pre-delimits: <code class="computeroutput"><span class="identifier">delimit</span></code> + characters/tokens will not be emitted in front of any other output. + </li> +<li class="listitem"> + The attribute <code class="computeroutput"><span class="identifier">attrib</span></code> + has not been modified. + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.generator.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.generator.models"></a></span><a class="link" href="generator.html#spirit.karma.reference.generator_concepts.generator.models">Models</a> + </h6> +<p> + All generators in <span class="emphasis"><em>Spirit.Karma</em></span> are models of the + <span class="emphasis"><em>Generator</em></span> concept. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../generator_concepts.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="primitivegenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/narygenerator.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/narygenerator.html new file mode 100755 index 0000000000..f3837596f1 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/narygenerator.html @@ -0,0 +1,211 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>NaryGenerator</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="binarygenerator.html" title="BinaryGenerator"> +<link rel="next" href="nonterminal.html" title="Nonterminal"> +</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="binarygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="nonterminal.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.narygenerator"></a><a class="link" href="narygenerator.html" title="NaryGenerator">NaryGenerator</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.description"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.description">Description</a> + </h6> +<p> + <span class="emphasis"><em>NaryGenerator</em></span> is a composite generator that has + one or more subjects. The NaryGenerator allows its subjects to be treated + in the same way as a single instance of a <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> following the Composite + Design Pattern. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.refinement_of"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.refinement_of">Refinement + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A NaryGenerator. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">G</span></code></span></dt> +<dd><p> + A NaryGenerator type. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.valid_expressions"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.valid_expressions">Valid + Expressions</a> + </h6> +<p> + In addition to the requirements defined in <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>, for any NaryGenerator + the following must be met: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +<th> + <p> + Return type + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">elements</span></code> + </p> + </td> +<td> + <p> + The tuple of elements. + </p> + </td> +<td> + <p> + A <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + Sequence of <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> types. + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.type_expressions"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">elements_type</span></code> + </p> + </td> +<td> + <p> + Elements tuple type. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_nary_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + Metafunction that evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if a certain type, <code class="computeroutput"><span class="identifier">G</span></code> + is a NaryGenerator, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> + otherwise (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Boolean Constant</a>). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.invariants"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.invariants">Invariants</a> + </h6> +<p> + For each element, <code class="computeroutput"><span class="identifier">E</span></code>, + in any NaryGenerator, <code class="computeroutput"><span class="identifier">G</span></code>, + the following invariant always holds: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_generator</span><span class="special"><</span><span class="identifier">E</span><span class="special">>::</span><span class="identifier">type</span></code> evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + </li></ul></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.narygenerator.h5"></a> + <span><a name="spirit.karma.reference.generator_concepts.narygenerator.models"></a></span><a class="link" href="narygenerator.html#spirit.karma.reference.generator_concepts.narygenerator.models">Models</a> + </h6> +<p> + The following generators conform to this model: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a class="link" href="../operator/sequence.html" title="Sequence Generator (a << b)">Sequence + (<code class="computeroutput"><span class="special"><<</span></code>)</a>, + </li> +<li class="listitem"> + <a class="link" href="../operator/alternative.html" title="Alternative Generator (a | b)">Alternative + (<code class="computeroutput"><span class="special">|</span></code>)</a>. + </li> +</ul></div> +<p> + <span class="bold"><strong>FIXME</strong></span> Add more links to models of NaryGenerator + concept + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="binarygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="nonterminal.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/nonterminal.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/nonterminal.html new file mode 100755 index 0000000000..e35a289c07 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/nonterminal.html @@ -0,0 +1,370 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Nonterminal</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="narygenerator.html" title="NaryGenerator"> +<link rel="next" href="../basics.html" title="Generator Basics"> +</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="narygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="../basics.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.nonterminal"></a><a class="link" href="nonterminal.html" title="Nonterminal">Nonterminal</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.description"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.description">Description</a> + </h6> +<p> + A Nonterminal is a symbol in a <a class="link" href="../../../abstracts/parsing_expression_grammar.html" title="Parsing Expression Grammar">Parsing + Expression Grammar</a> production that represents a grammar fragment. + Nonterminals may self reference to specify recursion. This is one of + the most important concepts and the reason behind the word "recursive" + in recursive descent generation. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.refinement_of"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.refinement_of">Refinement + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.signature"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.signature">Signature</a> + </h6> +<p> + Rules can have both consumed and inherited attributes. The rule's <span class="emphasis"><em>Signature</em></span> + specifies both the consumed and inherited attributes. The specification + uses the function declarator syntax: + </p> +<pre class="programlisting"><span class="identifier">RT</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">AN</span><span class="special">)</span> +</pre> +<p> + where <code class="computeroutput"><span class="identifier">RT</span></code> is the rule's + consumed attribute and <code class="computeroutput"><span class="identifier">A0</span></code> + ... <code class="computeroutput"><span class="identifier">AN</span></code> are the rule's + inherited attributes. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.attributes"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.attributes">Attributes</a> + </h6> +<p> + The rule models a C++ function. The rule's consumed attribute is analogous + to the function return value as it is the type -exposed- by the rule. + Its inherited attributes are analogous to function arguments. The inherited + attributes (arguments) can be passed in just like any <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a>, e.g.: + </p> +<pre class="programlisting"><span class="identifier">r</span><span class="special">(</span><span class="identifier">expr</span><span class="special">)</span> <span class="comment">// Evaluate expr at parse time and pass the result to the Nonterminal r</span> +</pre> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal._code__phrase_role__identifier___val__phrase___code_"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal._code__phrase_role__identifier___val__phrase___code_"><code class="computeroutput"><span class="identifier">_val</span></code></a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">_val</span></code> placeholder can be used in <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> semantic actions + anywhere in the Nonterminal's definition. This <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> + placeholder refers to the Nonterminal's (consumed) attribute. The <code class="computeroutput"><span class="identifier">_val</span></code> placeholder acts like an immutable + reference to the Nonterminal's attribute. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + Starting with <a href="http://boost-spirit.com" target="_top">Spirit</a> V2.5 + (distributed with Boost V1.47) the placeholder <code class="computeroutput"><span class="identifier">_val</span></code> + can be used in semantic actions attached to top level generator components + as well. See <a class="link" href="../generate_api.html" title="Generator API">The + Generator API</a> for more information. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h5"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal._code__phrase_role__identifier___r1__phrase___code_____code__phrase_role__identifier__r10__phrase___code_"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal._code__phrase_role__identifier___r1__phrase___code_____code__phrase_role__identifier__r10__phrase___code_"><code class="computeroutput"><span class="identifier">_r1</span></code>...<code class="computeroutput"><span class="identifier">r10</span></code></a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_r1</span></code>...<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">r10</span></code> + placeholders can be used in <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> + semantic actions anywhere in the Nonterminal's definition. These <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> placeholders + refer to the Nonterminal's inherited attributes. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h6"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.locals"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.locals">Locals</a> + </h6> +<p> + Nonterminals can have local variables that will be created on the stack + at runtime. A locals descriptor added to the Nonterminal declaration + will give the Nonterminal local variables: + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T0</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">TN</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">locals</span><span class="special">;</span> +</pre> +<p> + where <code class="computeroutput"><span class="identifier">T0</span></code> ... <code class="computeroutput"><span class="identifier">TN</span></code> are the types of local variables + accessible in your <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> + semantic actions using the placeholders: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_a</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_b</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_c</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_d</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_e</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_f</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_g</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_h</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_i</span></code> + </li> +<li class="listitem"> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">_j</span></code> + </li> +</ul></div> +<p> + which correspond to the Nonterminal's local variables <code class="computeroutput"><span class="identifier">T0</span></code> + ... <code class="computeroutput"><span class="identifier">T9</span></code>. + </p> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">x</span></code></span></dt> +<dd><p> + A Nonterminal + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">X</span></code></span></dt> +<dd><p> + A Nonterminal type + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">arg1</span></code>, <code class="computeroutput"><span class="identifier">arg2</span></code>, ..., <code class="computeroutput"><span class="identifier">argN</span></code></span></dt> +<dd><p> + <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Arguments</a> that evaluate to each of the Nonterminal's inherited + attributes. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h7"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.valid_expressions"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.valid_expressions">Valid + Expressions</a> + </h6> +<p> + In addition to the requirements defined in <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>, for any Nonterminal + the following must be met: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +<th> + <p> + Return type + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">x</span></code> + </p> + </td> +<td> + <p> + In a generator expression, invoke Nonterminal <code class="computeroutput"><span class="identifier">x</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">X</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">x</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">argN</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + In a generator expression, invoke Nonterminal <code class="computeroutput"><span class="identifier">x</span></code> passing in inherited attributes + <code class="computeroutput"><span class="identifier">arg1</span></code>...<code class="computeroutput"><span class="identifier">argN</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">X</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">x</span><span class="special">.</span><span class="identifier">name</span><span class="special">(</span><span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Set the name of a Nonterminal + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">void</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">x</span><span class="special">.</span><span class="identifier">name</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Get the name of a Nonterminal + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h8"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.type_expressions"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">sig_type</span></code> + </p> + </td> +<td> + <p> + The Signature of <code class="computeroutput"><span class="identifier">X</span></code>: + An <a href="../../../../../../../../libs/mpl/doc/refmanual/forward-sequence.html" target="_top">MPL + Forward Sequence</a>. The first element is the Nonterminal's + consumed attribute type and the rest are the inherited attribute + types. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">X</span><span class="special">::</span><span class="identifier">locals_type</span></code> + </p> + </td> +<td> + <p> + The local variables of <code class="computeroutput"><span class="identifier">X</span></code>: + An <a href="../../../../../../../../libs/mpl/doc/refmanual/forward-sequence.html" target="_top">MPL + Forward Sequence</a>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.nonterminal.h9"></a> + <span><a name="spirit.karma.reference.generator_concepts.nonterminal.models"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.models">Models</a> + </h6> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a class="link" href="../nonterminal/rule.html" title="Generator Rule">rule</a> + </li> +<li class="listitem"> + <a class="link" href="../nonterminal/grammar.html" title="Generator Grammar">grammar</a> + </li> +</ul></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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="narygenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="../basics.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/primitivegenerator.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/primitivegenerator.html new file mode 100755 index 0000000000..47d1c51301 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/primitivegenerator.html @@ -0,0 +1,137 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>PrimitiveGenerator</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="generator.html" title="Generator"> +<link rel="next" href="unarygenerator.html" title="UnaryGenerator"> +</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="generator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="unarygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator"></a><a class="link" href="primitivegenerator.html" title="PrimitiveGenerator">PrimitiveGenerator</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.primitivegenerator.description"></a></span><a class="link" href="primitivegenerator.html#spirit.karma.reference.generator_concepts.primitivegenerator.description">Description</a> + </h6> +<p> + <span class="emphasis"><em>PrimitiveGenerator</em></span> is the most basic building block + that the client uses to build more complex generators. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.primitivegenerator.refinement_of"></a></span><a class="link" href="primitivegenerator.html#spirit.karma.reference.generator_concepts.primitivegenerator.refinement_of">Refinement + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.primitivegenerator.post_delimit"></a></span><a class="link" href="primitivegenerator.html#spirit.karma.reference.generator_concepts.primitivegenerator.post_delimit">Post-delimit</a> + </h6> +<p> + Before exiting the <code class="computeroutput"><span class="identifier">generate</span></code> + member function, a PrimitiveGenerator is required to do a post-delimit. + This will generate a single delimiting character/token sequence. Only + PrimitiveGenerator's are required to perform this post-delimit. This + is typically carried out through a call to <code class="computeroutput"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_out</span></code>: + </p> +<pre class="programlisting"><span class="identifier">karma</span><span class="special">::</span><span class="identifier">delimit_out</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">delimit</span><span class="special">);</span> +</pre> +<h6> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.primitivegenerator.type_expressions"></a></span><a class="link" href="primitivegenerator.html#spirit.karma.reference.generator_concepts.primitivegenerator.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_primitive_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + Metafunction that evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if a certain type, <code class="computeroutput"><span class="identifier">G</span></code>, + is a PrimitiveGenerator, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> + otherwise (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Boolean Constant</a>). + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.primitivegenerator.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.primitivegenerator.models"></a></span><a class="link" href="primitivegenerator.html#spirit.karma.reference.generator_concepts.primitivegenerator.models">Models</a> + </h6> +<p> + The following generators conform to this model: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a class="link" href="../auxiliary/eol.html" title="End of Line Generator (eol)"><code class="computeroutput"><span class="identifier">eol</span></code></a>, + </li> +<li class="listitem"> + <a class="link" href="../auxiliary/eps.html" title="Epsilon Generator (eps)"><code class="computeroutput"><span class="identifier">eps</span></code></a>, + </li> +<li class="listitem"> + <a class="link" href="../numeric.html" title="Numeric Generators">Numeric generators</a>, + </li> +<li class="listitem"> + <a class="link" href="../char/char_generator.html" title="Character Generators (char_, lit)">Character + generators</a>. + </li> +</ul></div> +<p> + <span class="bold"><strong>FIXME</strong></span> Add more links to <span class="emphasis"><em>PrimitiveGenerator</em></span> + models here. + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="generator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="unarygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/unarygenerator.html b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/unarygenerator.html new file mode 100755 index 0000000000..2c34943e6c --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/generator_concepts/unarygenerator.html @@ -0,0 +1,243 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>UnaryGenerator</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="Spirit 2.5.2"> +<link rel="up" href="../generator_concepts.html" title="Generator Concepts"> +<link rel="prev" href="primitivegenerator.html" title="PrimitiveGenerator"> +<link rel="next" href="binarygenerator.html" title="BinaryGenerator"> +</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="primitivegenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="binarygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.generator_concepts.unarygenerator"></a><a class="link" href="unarygenerator.html" title="UnaryGenerator">UnaryGenerator</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h0"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.description"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.description">Description</a> + </h6> +<p> + <span class="emphasis"><em>UnaryGenerator</em></span> is a composite generator that has + a single subject. The UnaryGenerator may change the behavior of its subject + following the Delegate Design Pattern. + </p> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h1"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.refinement_of"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.refinement_of">Refinement + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A UnaryGenerator. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">G</span></code></span></dt> +<dd><p> + A UnaryGenerator type. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h2"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.valid_expressions"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.valid_expressions">Valid + Expressions</a> + </h6> +<p> + In addition to the requirements defined in <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a>, for any UnaryGenerator + the following must be met: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +<th> + <p> + Return type + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">g</span><span class="special">.</span><span class="identifier">subject</span></code> + </p> + </td> +<td> + <p> + Subject generator. + </p> + </td> +<td> + <p> + <a class="link" href="generator.html" title="Generator"><code class="computeroutput"><span class="identifier">Generator</span></code></a> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h3"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.type_expressions"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.type_expressions">Type + Expressions</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">G</span><span class="special">::</span><span class="identifier">subject_type</span></code> + </p> + </td> +<td> + <p> + The subject generator type. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_unary_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">>::</span><span class="identifier">type</span></code> + </p> + </td> +<td> + <p> + Metafunction that evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + if a certain type, <code class="computeroutput"><span class="identifier">G</span></code> + is a UnaryGenerator, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code> + otherwise (See <a href="../../../../../../../../libs/mpl/doc/refmanual/integral-constant.html" target="_top">MPL + Boolean Constant</a>). + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h4"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.invariants"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.invariants">Invariants</a> + </h6> +<p> + For any UnaryGenerator, <code class="computeroutput"><span class="identifier">G</span></code>, + the following invariant always holds: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_generator</span><span class="special"><</span><span class="identifier">G</span><span class="special">::</span><span class="identifier">subject_type</span><span class="special">>::</span><span class="identifier">type</span></code> evaluates to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code> + </li></ul></div> +<h6> +<a name="spirit.karma.reference.generator_concepts.unarygenerator.h5"></a> + <span><a name="spirit.karma.reference.generator_concepts.unarygenerator.models"></a></span><a class="link" href="unarygenerator.html#spirit.karma.reference.generator_concepts.unarygenerator.models">Models</a> + </h6> +<p> + The following generators conform to this model: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + <a class="link" href="../operator/kleene.html" title="Kleene Star Generator (*a)">Kleene Star + (unary <code class="computeroutput"><span class="special">*</span></code>)</a> operator, + </li> +<li class="listitem"> + <a class="link" href="../operator/plus.html" title="Plus Generator (+a)">Plus (unary + <code class="computeroutput"><span class="special">+</span></code>)</a> operator, + </li> +<li class="listitem"> + <a class="link" href="../operator/optional.html" title="Optional Generator (-a)">Optional + (unary <code class="computeroutput"><span class="special">-</span></code>)</a> operator, + </li> +<li class="listitem"> + <a class="link" href="../operator/and_predicate.html" title="And-Predicate Generator (&a)">And + predicate (unary <code class="computeroutput"><span class="special">&</span></code>)</a> + and <a class="link" href="../operator/not_predicate.html" title="Not-Predicate Generator (!a)">Not + predicate (unary <code class="computeroutput"><span class="special">!</span></code>)</a> + operators, + </li> +<li class="listitem"> + <a class="link" href="../directive/alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])"><code class="computeroutput"><span class="identifier">left_align</span></code></a>, <a class="link" href="../directive/alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])"><code class="computeroutput"><span class="identifier">center</span></code></a>, and <a class="link" href="../directive/alignment.html" title="Alignment Generator Directives (left_align[], center[], right_align[])"><code class="computeroutput"><span class="identifier">right_align</span></code></a> directives, + </li> +<li class="listitem"> + <a class="link" href="../directive/repeat.html" title="Repetition Generator Directive (repeat[])"><code class="computeroutput"><span class="identifier">repeat</span></code></a> directive, + </li> +<li class="listitem"> + <a class="link" href="../directive/delimit.html" title="Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])"><code class="computeroutput"><span class="identifier">verbatim</span></code></a> directive, + </li> +<li class="listitem"> + <a class="link" href="../directive/delimit.html" title="Generator Directives Controlling Automatic Delimiting (verbatim[], no_delimit[], delimit[])"><code class="computeroutput"><span class="identifier">delimit</span></code></a> directive, + </li> +<li class="listitem"> + <a class="link" href="../directive/upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"><code class="computeroutput"><span class="identifier">lower</span></code></a> and <a class="link" href="../directive/upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"><code class="computeroutput"><span class="identifier">upper</span></code></a> directives, + </li> +<li class="listitem"> + <a class="link" href="../directive/maxwidth.html" title="Generator Directives Controlling the Maximum Field Width (maxwidth[])"><code class="computeroutput"><span class="identifier">maxwidth</span></code></a> directive, + </li> +<li class="listitem"> + <a class="link" href="../directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a> directive, + </li> +<li class="listitem"> + <a class="link" href="../directive/omit.html" title="Generator Directives Consuming Attributes (omit[] and skip[])"><code class="computeroutput"><span class="identifier">omit</span></code></a> directive. + </li> +</ul></div> +<p> + <span class="bold"><strong>FIXME</strong></span> Add more links to models of UnaryGenerator + concept + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="primitivegenerator.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../generator_concepts.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="binarygenerator.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/nonterminal.html b/libs/spirit/doc/html/spirit/karma/reference/nonterminal.html new file mode 100755 index 0000000000..ab5059a9ff --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/nonterminal.html @@ -0,0 +1,60 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Nonterminal Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="directive/as.html" title="Generator Directives Forcing Atomic Extraction (as<T>, as_string[], as_wstring[])"> +<link rel="next" href="nonterminal/rule.html" title="Generator Rule"> +</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="directive/as.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="nonterminal/rule.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="spirit.karma.reference.nonterminal"></a><a class="link" href="nonterminal.html" title="Nonterminal Generators">Nonterminal Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="nonterminal/rule.html">Generator + Rule</a></span></dt> +<dt><span class="section"><a href="nonterminal/grammar.html">Generator + Grammar</a></span></dt> +</dl></div> +<h6> +<a name="spirit.karma.reference.nonterminal.h0"></a> + <span><a name="spirit.karma.reference.nonterminal.module_headers"></a></span><a class="link" href="nonterminal.html#spirit.karma.reference.nonterminal.module_headers">Module + Headers</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/nonterminal.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_nonterminal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="directive/as.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="nonterminal/rule.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/nonterminal/grammar.html b/libs/spirit/doc/html/spirit/karma/reference/nonterminal/grammar.html new file mode 100755 index 0000000000..67d353fa2f --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/nonterminal/grammar.html @@ -0,0 +1,401 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Grammar</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="Spirit 2.5.2"> +<link rel="up" href="../nonterminal.html" title="Nonterminal Generators"> +<link rel="prev" href="rule.html" title="Generator Rule"> +<link rel="next" href="../numeric.html" title="Numeric Generators"> +</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="rule.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../nonterminal.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="../numeric.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.nonterminal.grammar"></a><a class="link" href="grammar.html" title="Generator Grammar">Generator + Grammar</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h0"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.description"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.description">Description</a> + </h6> +<p> + The grammar encapsulates a set of <a class="link" href="rule.html" title="Generator Rule">rules</a> + (as well as primitive generators (<a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>) and sub-grammars). + The grammar is the main mechanism for modularization and composition. + Grammars can be composed to form more complex grammars. + </p> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h1"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.header"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/nonterminal/grammar.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_grammar</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h2"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.namespace"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">grammar</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h3"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.synopsis"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</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">typename</span> <span class="identifier">A3</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">grammar</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h4"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.template_parameters"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + </p> + </td> +<td> + <p> + The underlying output iterator type that the rule is expected + to work on. + </p> + </td> +<td> + <p> + none + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">A1</span></code>, <code class="computeroutput"><span class="identifier">A2</span></code>, <code class="computeroutput"><span class="identifier">A3</span></code> + </p> + </td> +<td> + <p> + Either <code class="computeroutput"><span class="identifier">Signature</span></code>, + <code class="computeroutput"><span class="identifier">Delimiter</span></code> or + <code class="computeroutput"><span class="identifier">Locals</span></code> in any + order. See table below. + </p> + </td> +<td> + <p> + See table below. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Here is more information about the template parameters: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Signature</span></code> + </p> + </td> +<td> + <p> + Specifies the grammar's synthesized (return value) and inherited + attributes (arguments). More on this here: <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code>. + When <code class="computeroutput"><span class="identifier">Signature</span></code> + defaults to <code class="computeroutput"><span class="identifier">unused_type</span></code>, + the effect is the same as specifying a signature of <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code> + which is also equivalent to <code class="computeroutput"><span class="identifier">unused_type</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Delimiter</span></code> + </p> + </td> +<td> + <p> + Specifies the grammar's delimiter generator. Specify this if + you want the grammar to delimit the generated output. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Locals</span></code> + </p> + </td> +<td> + <p> + Specifies the grammar's local variables. See <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h5"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.model_of"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A grammar + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h6"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.expression_semantics"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">my_grammar</span> <span class="special">:</span> <span class="identifier">grammar</span><span class="special"><</span><span class="identifier">OutputIterator</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="identifier">A3</span><span class="special">></span> +<span class="special">{</span> + <span class="identifier">my_grammar</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">my_grammar</span><span class="special">::</span><span class="identifier">base_type</span><span class="special">(</span><span class="identifier">start</span><span class="special">,</span> <span class="identifier">name</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// Rule definitions</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="comment">/* ... */</span><span class="special">;</span> + <span class="special">}</span> + + <span class="identifier">rule</span><span class="special"><</span><span class="identifier">OutputIterator</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="identifier">A3</span><span class="special">></span> <span class="identifier">start</span><span class="special">;</span> + <span class="comment">// more rule declarations...</span> +<span class="special">};</span> +</pre> +<p> + </p> + </td> +<td> + <p> + Grammar definition. <code class="computeroutput"><span class="identifier">name</span></code> + is an optional string that gives the grammar its name, useful + for debugging. + </p> + </td> +</tr></tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The template parameters of a grammar and its start rule (the rule passed + to the grammar's base class constructor) must match, otherwise you + will see compilation errors. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h7"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.attributes"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.attributes">Attributes</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The generator attribute of the grammar is <code class="computeroutput"><span class="identifier">RT</span></code>, + its consumed attribute. See <a class="link" href="../generator_concepts/nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.attributes"><code class="computeroutput"><span class="identifier">Attribute</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h8"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.complexity"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The complexity is defined by the complexity of the its definition. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.nonterminal.grammar.h9"></a> + <span><a name="spirit.karma.reference.nonterminal.grammar.example"></a></span><a class="link" href="grammar.html#spirit.karma.reference.nonterminal.grammar.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">space_type</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">grammar</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">rule</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic grammar usage: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">num_list</span> <span class="special">:</span> <span class="identifier">grammar</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="identifier">space_type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>()></span> +<span class="special">{</span> + <span class="identifier">num_list</span><span class="special">()</span> <span class="special">:</span> <span class="identifier">base_type</span><span class="special">(</span><span class="identifier">start</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">spirit</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> + <span class="identifier">num</span> <span class="special">=</span> <span class="identifier">int_</span><span class="special">;</span> + <span class="identifier">start</span> <span class="special">=</span> <span class="identifier">num</span> <span class="special"><<</span> <span class="special">*(</span><span class="char">','</span> <span class="special"><<</span> <span class="identifier">num</span><span class="special">);</span> + <span class="special">}</span> + + <span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="identifier">space_type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>()></span> <span class="identifier">start</span><span class="special">;</span> + <span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="identifier">space_type</span><span class="special">,</span> <span class="keyword">int</span><span class="special">()></span> <span class="identifier">num</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + </p> +<p> + How to use the example grammar: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">num_list</span> <span class="identifier">nlist</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">123</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">456</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">789</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"123 , 456 , 789"</span><span class="special">,</span> <span class="identifier">nlist</span><span class="special">,</span> <span class="identifier">space</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="rule.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../nonterminal.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="../numeric.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/nonterminal/rule.html b/libs/spirit/doc/html/spirit/karma/reference/nonterminal/rule.html new file mode 100755 index 0000000000..b2d720d04a --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/nonterminal/rule.html @@ -0,0 +1,509 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Rule</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="Spirit 2.5.2"> +<link rel="up" href="../nonterminal.html" title="Nonterminal Generators"> +<link rel="prev" href="../nonterminal.html" title="Nonterminal Generators"> +<link rel="next" href="grammar.html" title="Generator Grammar"> +</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="../nonterminal.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../nonterminal.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="grammar.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.nonterminal.rule"></a><a class="link" href="rule.html" title="Generator Rule">Generator + Rule</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h0"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.description"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.description">Description</a> + </h6> +<p> + The rule is a polymorphic generator that acts as a named place-holder + capturing the behavior of a PEG expression assigned to it. Naming a + <a class="link" href="../../../abstracts/parsing_expression_grammar.html" title="Parsing Expression Grammar">Parsing Expression + Grammar</a> expression allows it to be referenced later and makes + it possible for the rule to call itself. This is one of the most important + mechanisms and the reason behind the word "recursive" in recursive + descent output generation. + </p> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h1"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.header"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/nonterminal/rule.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_rule</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h2"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.namespace"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">rule</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h3"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.synopsis"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</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">typename</span> <span class="identifier">A3</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">rule</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h4"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.template_parameters"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + </p> + </td> +<td> + <p> + The underlying output iterator type that the rule is expected + to work on. + </p> + </td> +<td> + <p> + none + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">A1</span></code>, <code class="computeroutput"><span class="identifier">A2</span></code>, <code class="computeroutput"><span class="identifier">A3</span></code> + </p> + </td> +<td> + <p> + Either <code class="computeroutput"><span class="identifier">Signature</span></code>, + <code class="computeroutput"><span class="identifier">Delimiter</span></code> or + <code class="computeroutput"><span class="identifier">Locals</span></code> in any + order. See table below. + </p> + </td> +<td> + <p> + See table below. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + Here is more information about the template parameters: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Signature</span></code> + </p> + </td> +<td> + <p> + Specifies the rule's consumed (value to output) and inherited + (arguments) attributes. More on this here: <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code>. + When <code class="computeroutput"><span class="identifier">Signature</span></code> + defaults to <code class="computeroutput"><span class="identifier">unused_type</span></code>, + the effect is the same as specifying a signature of <code class="computeroutput"><span class="keyword">void</span><span class="special">()</span></code> + which is also equivalent to <code class="computeroutput"><span class="identifier">unused_type</span><span class="special">()</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Delimiter</span></code> + </p> + </td> +<td> + <p> + Specifies the rule's delimiter generator. Specify this if you + want the rule to delimit the generated output. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Locals</span></code> + </p> + </td> +<td> + <p> + Specifies the rule's local variables. See <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h5"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.model_of"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">r</span><span class="special">,</span> + <span class="identifier">r2</span></code></span></dt> +<dd><p> + Rules + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">g</span></code></span></dt> +<dd><p> + A generator expression + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">OutputIterator</span></code></span></dt> +<dd><p> + The underlying output iterator type that the rule is expected to + work on. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">A1</span></code>, <code class="computeroutput"><span class="identifier">A2</span></code>, <code class="computeroutput"><span class="identifier">A3</span></code></span></dt> +<dd><p> + Either <code class="computeroutput"><span class="identifier">Signature</span></code>, + <code class="computeroutput"><span class="identifier">Delimiter</span></code> or <code class="computeroutput"><span class="identifier">Locals</span></code> in any order. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h6"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.expression_semantics"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/nonterminal.html" title="Nonterminal"><code class="computeroutput"><span class="identifier">Nonterminal</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">rule</span><span class="special"><</span><span class="identifier">OutputIterator</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="identifier">A3</span><span class="special">></span> + <span class="identifier">r</span><span class="special">(</span><span class="identifier">name</span><span class="special">);</span></pre> +<p> + </p> + </td> +<td> + <p> + Rule declaration. <code class="computeroutput"><span class="identifier">OutputIterator</span></code> + is required. <code class="computeroutput"><span class="identifier">A1</span><span class="special">,</span> <span class="identifier">A2</span><span class="special">,</span> <span class="identifier">A3</span></code> + are optional and can be specified in any order. <code class="computeroutput"><span class="identifier">name</span></code> is an optional string + that gives the rule its name, useful for debugging. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">rule</span><span class="special"><</span><span class="identifier">OutputIterator</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="identifier">A3</span><span class="special">></span> + <span class="identifier">r</span><span class="special">(</span><span class="identifier">r2</span><span class="special">);</span></pre> +<p> + </p> + </td> +<td> + <p> + Copy construct rule <code class="computeroutput"><span class="identifier">r</span></code> + from rule <code class="computeroutput"><span class="identifier">r2</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span> + <span class="identifier">r2</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Assign rule <code class="computeroutput"><span class="identifier">r2</span></code> + to <code class="computeroutput"><span class="identifier">r</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span><span class="special">.</span><span class="identifier">alias</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Return an alias of <code class="computeroutput"><span class="identifier">r</span></code>. + The alias is a generator that holds a reference to <code class="computeroutput"><span class="identifier">r</span></code>. Reference semantics. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span><span class="special">.</span><span class="identifier">copy</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Get a copy of <code class="computeroutput"><span class="identifier">r</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span> <span class="special">=</span> + <span class="identifier">g</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Rule definition + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span> <span class="special">%=</span> + <span class="identifier">g</span><span class="special">;</span></code> + </p> + </td> +<td> + <p> + Auto-rule definition. The attribute of <code class="computeroutput"><span class="identifier">g</span></code> + should be compatible with the consumed attribute of <code class="computeroutput"><span class="identifier">r</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span><span class="special">.</span><span class="identifier">name</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Retrieve the current name of the rule object. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">r</span><span class="special">.</span><span class="identifier">name</span><span class="special">(</span><span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Set the current name of the rule object to be <code class="computeroutput"><span class="identifier">name</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h7"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.attributes"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.attributes">Attributes</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The rule's generator attribute is <code class="computeroutput"><span class="identifier">RT</span></code>: + The consumed attribute of the rule. See <a class="link" href="../generator_concepts/nonterminal.html#spirit.karma.reference.generator_concepts.nonterminal.attributes"><code class="computeroutput"><span class="identifier">Attribute</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h8"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.complexity"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The complexity is defined by the complexity of the RHS generator, + <code class="computeroutput"><span class="identifier">g</span></code> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.nonterminal.rule.h9"></a> + <span><a name="spirit.karma.reference.nonterminal.rule.example"></a></span><a class="link" href="rule.html#spirit.karma.reference.nonterminal.rule.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">rule</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">space_type</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic rule: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">></span> <span class="identifier">r</span><span class="special">;</span> +<span class="identifier">r</span> <span class="special">=</span> <span class="identifier">int_</span><span class="special">(</span><span class="number">123</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"123"</span><span class="special">,</span> <span class="identifier">r</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + Rule with consumed attribute: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="keyword">int</span><span class="special">()></span> <span class="identifier">ra</span><span class="special">;</span> +<span class="identifier">ra</span> <span class="special">=</span> <span class="identifier">int_</span><span class="special">;</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"123"</span><span class="special">,</span> <span class="identifier">ra</span><span class="special">,</span> <span class="number">123</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + Rule with delimiter and consumed attribute: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(),</span> <span class="identifier">space_type</span><span class="special">></span> <span class="identifier">rs</span><span class="special">;</span> +<span class="identifier">rs</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">int_</span><span class="special">;</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">int</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">123</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">456</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">789</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"123 456 789"</span><span class="special">,</span> <span class="identifier">rs</span><span class="special">,</span> <span class="identifier">space</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../nonterminal.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../nonterminal.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="grammar.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/numeric.html b/libs/spirit/doc/html/spirit/karma/reference/numeric.html new file mode 100755 index 0000000000..8e87a450ed --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/numeric.html @@ -0,0 +1,85 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Numeric Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="nonterminal/grammar.html" title="Generator Grammar"> +<link rel="next" href="numeric/unsigned_int.html" title="Unsigned Integer Number Generators (uint_, etc.)"> +</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="nonterminal/grammar.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="numeric/unsigned_int.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="spirit.karma.reference.numeric"></a><a class="link" href="numeric.html" title="Numeric Generators">Numeric Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="numeric/unsigned_int.html">Unsigned + Integer Number Generators (<code class="computeroutput"><span class="identifier">uint_</span></code>, + etc.)</a></span></dt> +<dt><span class="section"><a href="numeric/signed_int.html">Signed + Integer Number Generators (<code class="computeroutput"><span class="identifier">int_</span></code>, + etc.)</a></span></dt> +<dt><span class="section"><a href="numeric/real_number.html">Real + Number Generators (<code class="computeroutput"><span class="identifier">float_</span></code>, + <code class="computeroutput"><span class="identifier">double_</span></code>, etc.)</a></span></dt> +<dt><span class="section"><a href="numeric/boolean.html">Boolean Generators + (<code class="computeroutput"><span class="identifier">bool_</span></code>)</a></span></dt> +</dl></div> +<p> + The library includes a couple of predefined objects for generating booleans, + signed and unsigned integers, and real numbers. These generators are fully + parametric. Most of the important aspects of numeric generation can be + finely adjusted to suit. This includes the radix base, the exponent, the + fraction etc. Policies control the real number generators' behavior. There + are some predefined policies covering the most common real number formats + but the user can supply her own when needed. + </p> +<p> + The numeric parsers are fine tuned (employing loop unrolling and extensive + template metaprogramming) with exceptional performance that rivals the + low level C functions such as <code class="computeroutput"><span class="identifier">ltoa</span></code>, + <code class="computeroutput"><span class="identifier">ssprintf</span></code>, and <code class="computeroutput"><span class="identifier">_gcvt</span></code>. Benchmarks reveal up to 2X speed + over the C counterparts (see here: <a class="link" href="../performance_measurements/numeric_performance.html" title="Performance of Numeric Generators">Performance + of Numeric Generators</a>). This goes to show that you can write extremely + tight generic C++ code that rivals, if not surpasses C. + </p> +<h6> +<a name="spirit.karma.reference.numeric.h0"></a> + <span><a name="spirit.karma.reference.numeric.module_header"></a></span><a class="link" href="numeric.html#spirit.karma.reference.numeric.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/numeric.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_numeric</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="nonterminal/grammar.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="numeric/unsigned_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/numeric/boolean.html b/libs/spirit/doc/html/spirit/karma/reference/numeric/boolean.html new file mode 100755 index 0000000000..1929280f5e --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/numeric/boolean.html @@ -0,0 +1,783 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Boolean Generators (bool_)</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="Spirit 2.5.2"> +<link rel="up" href="../numeric.html" title="Numeric Generators"> +<link rel="prev" href="real_number.html" title="Real Number Generators (float_, double_, etc.)"> +<link rel="next" href="../operator.html" title="Generator Operators"> +</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="real_number.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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><h5 class="title"> +<a name="spirit.karma.reference.numeric.boolean"></a><a class="link" href="boolean.html" title="Boolean Generators (bool_)">Boolean Generators + (<code class="computeroutput"><span class="identifier">bool_</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h0"></a> + <span><a name="spirit.karma.reference.numeric.boolean.description"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.description">Description</a> + </h6> +<p> + As you might expect, the <code class="computeroutput"><span class="identifier">bool_generator</span></code> + can generate output from boolean values. The <code class="computeroutput"><span class="identifier">bool_generator</span></code> + generator can be used to generate output from ordinary primitive C/C++ + <code class="computeroutput"><span class="keyword">bool</span></code> values or user defined + boolean types if the type follows certain expression requirements (for + more information about the requirements, see <a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.additional_requirements">below</a>)). + The <code class="computeroutput"><span class="identifier">bool_generator</span></code> is + a template class. Template parameters fine tune its behavior. + </p> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h1"></a> + <span><a name="spirit.karma.reference.numeric.boolean.header"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/numeric/bool.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_bool</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h2"></a> + <span><a name="spirit.karma.reference.numeric.boolean.namespace"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">bool_</span> <span class="comment">// + alias: boost::spirit::karma::bool_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">true_</span> <span class="comment">// + alias: boost::spirit::karma::true_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">false_</span> <span class="comment">// + alias: boost::spirit::karma::false_</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">lit</span></code> is reused by the + <a class="link" href="../string.html" title="String Generators">String Generators</a>, + the <a class="link" href="../char.html" title="Char Generators">Character Generators</a>, + and the Numeric Generators. In general, a char generator is created + when you pass in a character, a string generator is created when you + pass in a string, and a numeric generator is created when you use a + numeric (boolean) literal. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h3"></a> + <span><a name="spirit.karma.reference.numeric.boolean.synopsis"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">B</span> + <span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">Policies</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">bool_generator</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h4"></a> + <span><a name="spirit.karma.reference.numeric.boolean.template_parameters"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code> + </p> + </td> +<td> + <p> + The boolean base type of the boolean generator. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Policies</span></code> + </p> + </td> +<td> + <p> + The policies to use while converting the boolean. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_policies</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h5"></a> + <span><a name="spirit.karma.reference.numeric.boolean.model_of"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">b</span></code></span></dt> +<dd><p> + Boolean literal, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a boolean value of type <code class="computeroutput"><span class="identifier">B</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">B</span></code></span></dt> +<dd><p> + Type of <code class="computeroutput"><span class="identifier">b</span></code>: any + type usable as a boolean, or in case of a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a>, its return value + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h6"></a> + <span><a name="spirit.karma.reference.numeric.boolean.expression_semantics"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the boolean literal <code class="computeroutput"><span class="identifier">b</span></code> + using the default formatting (<code class="computeroutput"><span class="keyword">false</span></code> + is generated as <code class="computeroutput"><span class="string">"false"</span></code>, + and <code class="computeroutput"><span class="keyword">true</span></code> is generated + as <code class="computeroutput"><span class="string">"true"</span></code>). + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span></code> + </p> + </td> +<td> + <p> + Generate the boolean value provided by a mandatory attribute + using the default formatting (<code class="computeroutput"><span class="keyword">false</span></code> + is generated as <code class="computeroutput"><span class="string">"false"</span></code>, + and <code class="computeroutput"><span class="keyword">true</span></code> is generated + as <code class="computeroutput"><span class="string">"true"</span></code>). + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the boolean value provided by the immediate literal + value the generator is initialized from using the default formatting + (<code class="computeroutput"><span class="keyword">false</span></code> is generated + as <code class="computeroutput"><span class="string">"false"</span></code>, + and <code class="computeroutput"><span class="keyword">true</span></code> is generated + as <code class="computeroutput"><span class="string">"true"</span></code>). + If this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">true_</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="string">"true"</span></code>. + If this generator has an associated attribute it succeeds only + if the attribute is <code class="computeroutput"><span class="keyword">true</span></code> + as well (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">false_</span></code> + </p> + </td> +<td> + <p> + Generate <code class="computeroutput"><span class="string">"false"</span></code>. + If this generator has an associated attribute it succeeds only + if the attribute is <code class="computeroutput"><span class="keyword">false</span></code> + as well (unless the underlying output stream reports an error). + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + All generators listed in the table above (except <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code>) are predefined specializations of the + <code class="computeroutput"><span class="identifier">bool_generator</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span><span class="special">></span></code> + basic boolean generator type described below. It is possible to directly + use this type to create boolean generators using a wide range of formatting + options. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bool_generator</span><span class="special"><</span> + <span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the boolean of type <code class="computeroutput"><span class="identifier">B</span></code> + provided by a mandatory attribute using the specified <code class="computeroutput"><span class="identifier">Policies</span></code> This generator never + fails (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bool_generator</span><span class="special"><</span> + <span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()(</span><span class="identifier">b</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the boolean of type <code class="computeroutput"><span class="identifier">B</span></code> + provided by the immediate literal value the generator is initialized + from, using the specified <code class="computeroutput"><span class="identifier">Policies</span></code>. + If this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + All boolean generators properly respect the <a class="link" href="../directive/upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"><code class="computeroutput"><span class="identifier">upper</span></code></a> and <a class="link" href="../directive/upperlower.html" title="Generator Directives Controlling Case Sensitivity (upper[], lower[])"><code class="computeroutput"><span class="identifier">lower</span></code></a> directives. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h7"></a> + <span><a name="spirit.karma.reference.numeric.boolean.additional_requirements"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.additional_requirements">Additional + Requirements</a> + </h6> +<p> + The following lists enumerate the requirements which must be met in order + to use a certain type <code class="computeroutput"><span class="identifier">B</span></code> + to instantiate and use a <code class="computeroutput"><span class="identifier">bool_generator</span><span class="special"><</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span><span class="special">></span></code>. + </p> +<p> + The type <code class="computeroutput"><span class="identifier">B</span></code>: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> + must be (safely) convertible to <code class="computeroutput"><span class="keyword">bool</span></code> + </li></ul></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h8"></a> + <span><a name="spirit.karma.reference.numeric.boolean.attributes"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</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">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">bool_</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">bool</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">b</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bool_generator</span><span class="special"><</span> + <span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bool_generator</span><span class="special"><</span> + <span class="identifier">B</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()(</span><span class="identifier">b</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">B</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">b</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">B</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">B</span></code> and emit the value stored in the + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h9"></a> + <span><a name="spirit.karma.reference.numeric.boolean.boolean_formatting_policies"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.boolean_formatting_policies">Boolean + Formatting Policies</a> + </h6> +<p> + If special formatting of a boolean is needed, overload the policy class + <code class="computeroutput"><span class="identifier">bool_policies</span><span class="special"><</span><span class="identifier">B</span><span class="special">></span></code> + and use it as a template parameter to the <code class="computeroutput"><span class="identifier">bool_generator</span><span class="special"><></span></code> boolean generator. For instance: + </p> +<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">special_bool_policy</span> <span class="special">:</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">bool_policies</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">CharEncoding</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> + <span class="keyword">static</span> <span class="keyword">bool</span> <span class="identifier">generate_false</span><span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">b</span><span class="special">)</span> + <span class="special">{</span> + <span class="comment">// we want to spell the names of false as eurt (true backwards)</span> + <span class="keyword">return</span> <span class="identifier">string_inserter</span><span class="special"><</span><span class="identifier">CharEncoding</span><span class="special">,</span> <span class="identifier">Tag</span><span class="special">>::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="string">"eurt"</span><span class="special">);</span> + <span class="special">}</span> +<span class="special">};</span> + +<span class="keyword">typedef</span> <span class="identifier">karma</span><span class="special">::</span><span class="identifier">bool_generator</span><span class="special"><</span><span class="identifier">special_bool_policy</span><span class="special">></span> <span class="identifier">backwards_bool_type</span><span class="special">;</span> +<span class="identifier">backwards_bool_type</span> <span class="keyword">const</span> <span class="identifier">backwards_bool</span><span class="special">;</span> + +<span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">backwards_bool</span><span class="special">,</span> <span class="keyword">true</span><span class="special">);</span> <span class="comment">// will output: true</span> +<span class="identifier">karma</span><span class="special">::</span><span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">backwards_bool</span><span class="special">(</span><span class="keyword">false</span><span class="special">));</span> <span class="comment">// will output: uert</span> +</pre> +<p> + The template parameter <code class="computeroutput"><span class="identifier">B</span></code> + should be the type to be formatted using the overloaded policy type. + At the same time <code class="computeroutput"><span class="identifier">B</span></code> will + be used as the attribute type of the created real number generator. The + default for <code class="computeroutput"><span class="identifier">B</span></code> is <code class="computeroutput"><span class="keyword">bool</span></code>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h10"></a> + <span><a name="spirit.karma.reference.numeric.boolean.boolean_formatting_policy_expression_semantics"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.boolean_formatting_policy_expression_semantics">Boolean + Formatting Policy Expression Semantics</a> + </h6> +<p> + A boolean formatting policy should expose the following: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Inserter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Policies</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">call</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span> + <span class="special">,</span> <span class="identifier">Policies</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This is the main function used to generate the output for a + boolean. It is called by the boolean generator in order to + perform the conversion. In theory all of the work can be implemented + here, but the easiest way is to use existing functionality + provided by the type specified by the template parameter <code class="computeroutput"><span class="identifier">Inserter</span></code>. The default implementation + of this functions is: +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Inserter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Policies</span><span class="special">></span> +<span class="keyword">static</span> <span class="keyword">bool</span> +<span class="identifier">call</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">B</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">Policies</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">p</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">Inserter</span><span class="special">::</span><span class="identifier">call_n</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">b</span></code> is the boolean + to convert + </p> + <p> + <code class="computeroutput"><span class="identifier">p</span></code> is the instance + of the policy type used to instantiate this real number generator. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">generate_false</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">B</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the boolean if it is <code class="computeroutput"><span class="keyword">false</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">b</span></code> is the boolean + to convert (the value is <code class="computeroutput"><span class="keyword">false</span></code>). + </p> + <p> + The template parameters <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + and <code class="computeroutput"><span class="identifier">Tag</span></code> are + either of the type <code class="computeroutput"><span class="identifier">unused_type</span></code> + or describe the character class and conversion to be applied + to any output possibly influenced by either the <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives. + </p> + <p> + The return value defines the outcome of the whole generator. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">generate_true</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">B</span> <span class="identifier">b</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the boolean if it is <code class="computeroutput"><span class="keyword">true</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">b</span></code> is the boolean + to convert (the value is <code class="computeroutput"><span class="keyword">true</span></code>). + </p> + <p> + The template parameters <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + and <code class="computeroutput"><span class="identifier">Tag</span></code> are + either of the type <code class="computeroutput"><span class="identifier">unused_type</span></code> + or describe the character class and conversion to be applied + to any output possibly influenced by either the <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives. + </p> + <p> + The return value defines the outcome of the whole generator. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h11"></a> + <span><a name="spirit.karma.reference.numeric.boolean.complexity"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where <code class="computeroutput"><span class="identifier">N</span></code> is the + number of characters needed to represent the generated boolean. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.numeric.boolean.h12"></a> + <span><a name="spirit.karma.reference.numeric.boolean.example"></a></span><a class="link" href="boolean.html#spirit.karma.reference.numeric.boolean.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">bool_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an <code class="computeroutput"><span class="identifier">bool_</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"true"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="keyword">true</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"false"</span><span class="special">,</span> <span class="identifier">bool_</span><span class="special">(</span><span class="keyword">false</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"true"</span><span class="special">,</span> <span class="identifier">bool_</span><span class="special">(</span><span class="keyword">true</span><span class="special">),</span> <span class="keyword">true</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">bool_</span><span class="special">(</span><span class="keyword">true</span><span class="special">),</span> <span class="keyword">false</span><span class="special">);</span> <span class="comment">// fails (as true != false)!</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"false"</span><span class="special">,</span> <span class="identifier">bool_</span><span class="special">,</span> <span class="keyword">false</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="real_number.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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/spirit/doc/html/spirit/karma/reference/numeric/real_number.html b/libs/spirit/doc/html/spirit/karma/reference/numeric/real_number.html new file mode 100755 index 0000000000..823eb84373 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/numeric/real_number.html @@ -0,0 +1,1201 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Real Number Generators (float_, double_, etc.)</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="Spirit 2.5.2"> +<link rel="up" href="../numeric.html" title="Numeric Generators"> +<link rel="prev" href="signed_int.html" title="Signed Integer Number Generators (int_, etc.)"> +<link rel="next" href="boolean.html" title="Boolean Generators (bool_)"> +</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="signed_int.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="boolean.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.numeric.real_number"></a><a class="link" href="real_number.html" title="Real Number Generators (float_, double_, etc.)">Real + Number Generators (<code class="computeroutput"><span class="identifier">float_</span></code>, + <code class="computeroutput"><span class="identifier">double_</span></code>, etc.)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h0"></a> + <span><a name="spirit.karma.reference.numeric.real_number.description"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">real_generator</span></code> can + generate real numbers of arbitrary length and size limited by its template + parameter, <code class="computeroutput"><span class="identifier">Num</span></code>. The numeric + base type <code class="computeroutput"><span class="identifier">Num</span></code> can be + a user defined numeric type such as fixed_point (fixed point reals) and + bignum (unlimited precision numbers) if the type follows certain expression + requirements (for more information about the requirements, see <a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.additional_requirements">below</a>). + </p> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h1"></a> + <span><a name="spirit.karma.reference.numeric.real_number.header"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/numeric/real.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_real</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h2"></a> + <span><a name="spirit.karma.reference.numeric.real_number.namespace"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">float_</span> <span class="comment">// + alias: boost::spirit::karma::float_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">double_</span> <span class="comment">// + alias: boost::spirit::karma::double_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">long_double</span> <span class="comment">// + alias: boost::spirit::karma::long_double</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">lit</span></code> is reused by the + <a class="link" href="../string.html" title="String Generators">String Generators</a>, + the <a class="link" href="../char.html" title="Char Generators">Character Generators</a>, + and the Numeric Generators. In general, a char generator is created + when you pass in a character, a string generator is created when you + pass in a string, and a numeric generator is created when you use a + numeric literal. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h3"></a> + <span><a name="spirit.karma.reference.numeric.real_number.synopsis"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Num</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">RealPolicies</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">real_generator</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h4"></a> + <span><a name="spirit.karma.reference.numeric.real_number.template_parameters"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code> + </p> + </td> +<td> + <p> + The type of the real number to generate. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">RealPolicies</span></code> + </p> + </td> +<td> + <p> + The policies to use while converting the real number. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + For more information about the type <code class="computeroutput"><span class="identifier">RealPolicies</span></code> + see <a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.real_number_formatting_policies">below</a>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h5"></a> + <span><a name="spirit.karma.reference.numeric.real_number.model_of"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">num</span></code></span></dt> +<dd><p> + Numeric literal, any real number value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a real number value of type + <code class="computeroutput"><span class="identifier">Num</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Num</span></code></span></dt> +<dd><p> + Type of <code class="computeroutput"><span class="identifier">num</span></code>: any + real number type + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h6"></a> + <span><a name="spirit.karma.reference.numeric.real_number.expression_semantics"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the real number literal <code class="computeroutput"><span class="identifier">num</span></code> + using the default formatting (no trailing zeros, <code class="computeroutput"><span class="identifier">fixed</span></code> representation for + numbers <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special"><=</span> + <span class="number">1e5</span> <span class="special">&&</span> + <span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> + <span class="special">></span> <span class="number">1e-3</span></code>, + scientific representation otherwise, 3 fractional digits, sign + is only printed for negative literals). This generator never + fails (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">float_</span> +<span class="identifier">double_</span> +<span class="identifier">long_double</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the real number provided by a mandatory attribute + using the default formatting (no trailing zeros, <code class="computeroutput"><span class="identifier">fixed</span></code> representation for + numbers <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special"><=</span> + <span class="number">1e5</span> <span class="special">&&</span> + <span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> + <span class="special">></span> <span class="number">1e-3</span></code>, + scientific representation otherwise, 3 fractional digits, sign + is only printed for negative literals). This generator never + fails (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">float_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">double_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">long_double</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the real point number provided by the immediate literal + value the generator is initialized from using the default formatting + (no trailing zeros, <code class="computeroutput"><span class="identifier">fixed</span></code> + representation for numbers <code class="computeroutput"><span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> <span class="special"><=</span> + <span class="number">1e5</span> <span class="special">&&</span> + <span class="identifier">fabs</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span> + <span class="special">></span> <span class="number">1e-3</span></code>, + scientific representation otherwise, 3 fractional digits, sign + is only printed for negative literals). If this generator has + an associated attribute it succeeds only if the attribute is + equal to the immediate literal (unless the underlying output + stream reports an error). Otherwise this generator fails and + does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + All generators listed in the table above (except <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code>) are predefined specializations of the + <code class="computeroutput"><span class="identifier">real_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">RealPolicies</span><span class="special">></span></code> + basic real number generator type described below. It is possible to directly + use this type to create real number generators using a wide range of + formatting options. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">real_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">RealPolicies</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the real number of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by a mandatory attribute using the specified <code class="computeroutput"><span class="identifier">RealPolicies</span></code>. This generator + never fails (unless the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">real_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">RealPolicies</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the real number of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by the immediate literal value the generator is initialized + from using the specified <code class="computeroutput"><span class="identifier">RealPolicies</span></code>. + If this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h7"></a> + <span><a name="spirit.karma.reference.numeric.real_number.additional_requirements"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.additional_requirements">Additional + Requirements</a> + </h6> +<p> + The following list enumerates the requirements which must be met in order + to use a certain type <code class="computeroutput"><span class="identifier">Num</span></code> + to instantiate a <code class="computeroutput"><span class="identifier">real_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Policies</span><span class="special">></span></code>. + </p> +<p> + In order to be usable as the first template parameter for <code class="computeroutput"><span class="identifier">real_generator</span><span class="special"><></span></code> + the type <code class="computeroutput"><span class="identifier">Num</span></code> must have + defined: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + comparison operators for: <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>, and <code class="computeroutput"><span class="special">>=</span></code> + </li> +<li class="listitem"> + numeric operators for: <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>, and <code class="computeroutput"><span class="special">%</span></code> + </li> +<li class="listitem"> + functions implementing the interface and the semantics of: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log10</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">lround</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ltrunc</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">modf</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">floor</span></code>, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ceil</span></code>. + These need to be defined in a way so that they will be found using + argument dependent lookup (ADL). + </li> +<li class="listitem"> + a valid specialization of the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> allowing for numeric property + inspection. + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h8"></a> + <span><a name="spirit.karma.reference.numeric.real_number.attributes"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">float_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">float</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">float_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">float_</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">double_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">double_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">double</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_double</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_double</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">real_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">real_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Policies</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Num</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Num</span></code> and emit the value stored in + the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h9"></a> + <span><a name="spirit.karma.reference.numeric.real_number.real_number_formatting_policies"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.real_number_formatting_policies">Real + Number Formatting Policies</a> + </h6> +<p> + If special formatting of a real number is needed, overload the policy + class <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> + and use it as a template parameter to the <code class="computeroutput"><span class="identifier">real_generator</span><span class="special"><></span></code> real number generator. For instance: + </p> +<pre class="programlisting"><span class="comment">// define a new real number formatting policy</span> +<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Num</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">scientific_policy</span> <span class="special">:</span> <span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span> +<span class="special">{</span> + <span class="comment">// we want the numbers always to be in scientific format</span> + <span class="keyword">static</span> <span class="keyword">int</span> <span class="identifier">floatfield</span><span class="special">(</span><span class="identifier">Num</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">fmtflags</span><span class="special">::</span><span class="identifier">scientific</span><span class="special">;</span> <span class="special">}</span> +<span class="special">};</span> + +<span class="comment">// define a new generator type based on the new policy</span> +<span class="keyword">typedef</span> <span class="identifier">real_generator</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">scientific_policy</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span> <span class="identifier">science_type</span><span class="special">;</span> +<span class="identifier">science_type</span> <span class="keyword">const</span> <span class="identifier">scientific</span> <span class="special">=</span> <span class="identifier">science_type</span><span class="special">();</span> + +<span class="comment">// use the new generator </span> +<span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">science_type</span><span class="special">(),</span> <span class="number">1.0</span><span class="special">);</span> <span class="comment">// will output: 1.0e00</span> +<span class="identifier">generate</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">scientific</span><span class="special">,</span> <span class="number">0.1</span><span class="special">);</span> <span class="comment">// will output: 1.0e-01</span> +</pre> +<p> + The template parameter <code class="computeroutput"><span class="identifier">Num</span></code> + should be the type to be formatted using the overloaded policy type. + At the same time <code class="computeroutput"><span class="identifier">Num</span></code> + will be used as the attribute type of the created real number generator. + </p> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h10"></a> + <span><a name="spirit.karma.reference.numeric.real_number.real_number_formatting_policy_expression_semantics"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.real_number_formatting_policy_expression_semantics">Real + Number Formatting Policy Expression Semantics</a> + </h6> +<p> + A real number formatting policy should expose the following variables + and functions: + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Inserter</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Policies</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">call</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span> + <span class="special">,</span> <span class="identifier">Policies</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">p</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This is the main function used to generate the output for a + real number. It is called by the real generator in order to + perform the conversion. In theory all of the work can be implemented + here, but the easiest way is to use existing functionality + provided by the type specified by the template parameter <code class="computeroutput"><span class="identifier">Inserter</span></code>. The default implementation + of this functions is: +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Inserter</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Policies</span><span class="special">></span> +<span class="keyword">static</span> <span class="keyword">bool</span> +<span class="identifier">call</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">Policies</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">p</span><span class="special">)</span> +<span class="special">{</span> + <span class="keyword">return</span> <span class="identifier">Inserter</span><span class="special">::</span><span class="identifier">call_n</span><span class="special">(</span><span class="identifier">sink</span><span class="special">,</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">p</span><span class="special">);</span> +<span class="special">}</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the real + number to convert + </p> + <p> + <code class="computeroutput"><span class="identifier">p</span></code> is the instance + of the policy type used to instantiate this real number generator. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">force_sign</span><span class="special">(</span><span class="identifier">Num</span> <span class="identifier">n</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + The default behavior is to not to require generating a sign. + If the function <code class="computeroutput"><span class="identifier">force_sign</span><span class="special">()</span></code> returns true, then all generated + numbers will have a sign (<code class="computeroutput"><span class="char">'+'</span></code> + or <code class="computeroutput"><span class="char">'-'</span></code>, zeros will + have a space instead of a sign). + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the real + number to output. This can be used to adjust the required behavior + depending on the value of this number. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">bool</span> <span class="identifier">trailing_zeros</span><span class="special">(</span><span class="identifier">Num</span> <span class="identifier">n</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + Return whether trailing zero digits have to be emitted in the + fractional part of the output. If set, this flag instructs + the real number generator to emit trailing zeros up to the + required precision digits (as returned by the <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> + function). + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the real + number to output. This can be used to adjust the required behavior + depending on the value of this number. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">int</span> <span class="identifier">floatfield</span><span class="special">(</span><span class="identifier">Num</span> <span class="identifier">n</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + Decide, which representation type to use in the generated output. + </p> + <p> + By default all numbers having an absolute value of zero or + in between <code class="computeroutput"><span class="number">0.001</span></code> + and <code class="computeroutput"><span class="number">100000</span></code> will + be generated using the fixed format, all others will be generated + using the scientific representation. + </p> + <p> + The <code class="computeroutput"><span class="identifier">trailing_zeros</span><span class="special">()</span></code> can be used to force the + output of trailing zeros in the fractional part up to the number + of digits returned by the <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> member function. The default + is not to generate the trailing zeros. + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the real + number to output. This can be used to adjust the formatting + flags depending on the value of this number. + </p> + <p> + The return value has to be either <code class="computeroutput"><span class="identifier">fmtflags</span><span class="special">::</span><span class="identifier">scientific</span></code> + (generate real number values in scientific notation) or <code class="computeroutput"><span class="identifier">fmtflags</span><span class="special">::</span><span class="identifier">fixed</span></code> (generate real number + values in fixed-point notation). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">(</span><span class="identifier">Num</span> <span class="identifier">n</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + Return the maximum number of decimal digits to generate in + the fractional part of the output. + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the real + number to output. This can be used to adjust the required precision + depending on the value of this number. If the trailing zeros + flag is specified the fractional part of the output will be + 'filled' with zeros, if appropriate. + </p> + <p> + <span class="bold"><strong>Note:</strong></span> If the trailing_zeros + flag is not in effect additional semantics apply. See the description + for the <code class="computeroutput"><span class="identifier">fraction_part</span><span class="special">()</span></code> function below. Moreover, + this precision will be limited to the value of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">digits10</span> <span class="special">+</span> + <span class="number">1</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">bool</span> <span class="identifier">ForceSign</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">integer_part</span><span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span> + <span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">sign</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">force_sign</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the integer part of the + real number. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the absolute + value of the integer part of the real number to convert (always + non-negative) + </p> + <p> + <code class="computeroutput"><span class="identifier">sign</span></code> is the + sign of the overall real number to convert. + </p> + <p> + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is a flag indicating whether a sign has to be generated even + for non-negative numbers (this is the same as has been returned + from the function <code class="computeroutput"><span class="identifier">force_sign</span><span class="special">()</span></code> described above) + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">dot</span><span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span><span class="special">,</span> + <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the decimal point. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the fractional + part of the real number to convert. Note that this number is + scaled such, that it represents the number of units which correspond + to the value returned from the <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> function earlier. I.e. a + fractional part of <code class="computeroutput"><span class="number">0.01234</span></code> + is represented as <code class="computeroutput"><span class="number">1234</span></code> + when the function <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> returned <code class="computeroutput"><span class="number">5</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">precision</span></code> is + the number of digits to emit as returned by the function <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> + described above + </p> + <p> + This is given to allow to decide, whether a decimal point has + to be generated at all. + </p> + <p> + <span class="bold"><strong>Note:</strong></span> If the <code class="computeroutput"><span class="identifier">trailing_zeros</span></code> flag is not + in effect additional comments apply. See the description for + the <code class="computeroutput"><span class="identifier">fraction_part</span><span class="special">()</span></code> function below. + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">fraction_part</span><span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span> + <span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">adjprec</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the fractional part of + the number. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the fractional + part of the real number to convert. Note that this number is + scaled such, that it represents the number of units which correspond + to the value returned from the <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> function earlier. I.e. a + fractional part of <code class="computeroutput"><span class="number">0.01234</span></code> + is represented as <code class="computeroutput"><span class="number">1234</span></code> + when the function <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> returned <code class="computeroutput"><span class="number">5</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">adjprec</span></code> is + the corrected number of digits to emit (see note below) + </p> + <p> + <code class="computeroutput"><span class="identifier">precision</span></code> is + the number of digits to emit as returned by the function <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> + described above + </p> + <p> + <span class="bold"><strong>Note:</strong></span> If <code class="computeroutput"><span class="identifier">trailing_zeros</span><span class="special">()</span></code> returns <code class="computeroutput"><span class="keyword">false</span></code> + the <code class="computeroutput"><span class="identifier">adjprec</span></code> + parameter will have been corrected from the value the <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> + function returned earlier (defining the maximal number of fractional + digits) in the sense, that it takes into account trailing zeros. + I.e. a real number <code class="computeroutput"><span class="number">0.0123</span></code> + and a value of <code class="computeroutput"><span class="number">5</span></code> + returned from <code class="computeroutput"><span class="identifier">precision</span><span class="special">()</span></code> will result in: + </p> + <p> + <code class="computeroutput"><span class="identifier">trailing_zeros</span><span class="special">()</span></code> returned <code class="computeroutput"><span class="keyword">false</span></code>: + <code class="computeroutput"><span class="identifier">n</span></code> will be + <code class="computeroutput"><span class="number">123</span></code>, and <code class="computeroutput"><span class="identifier">adjprec</span></code> will be <code class="computeroutput"><span class="number">4</span></code> (as we need to print <code class="computeroutput"><span class="number">0123</span></code>) + </p> + <p> + <code class="computeroutput"><span class="identifier">trailing_zeros</span><span class="special">()</span></code> returned <code class="computeroutput"><span class="keyword">true</span></code>: + <code class="computeroutput"><span class="identifier">n</span></code> will be + <code class="computeroutput"><span class="number">1230</span></code>, and <code class="computeroutput"><span class="identifier">adjprec</span></code> will be <code class="computeroutput"><span class="number">5</span></code> (as we need to print <code class="computeroutput"><span class="number">01230</span></code>) + </p> + <p> + The missing preceding zeros in the fractional part have to + be supplied by the implementation of this policy function. + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">,</span> + <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">exponent</span><span class="special">(</span> + <span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="keyword">long</span> <span class="identifier">n</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called to generate the exponential part of + the number (this is called only if the <code class="computeroutput"><span class="identifier">floatfield</span><span class="special">()</span></code> function returned the <code class="computeroutput"><span class="identifier">fmtflags</span><span class="special">::</span><span class="identifier">scientific</span></code> flag). + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the (signed) + exponential part of the real number to convert. + </p> + <p> + The template parameters <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + and <code class="computeroutput"><span class="identifier">Tag</span></code> are + either of the type <code class="computeroutput"><span class="identifier">unused_type</span></code> + or describe the character class and conversion to be applied + to any output possibly influenced by either the <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives. + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">nan</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span> + <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">force_sign</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called whenever the number to print is a non-normal + real number of type <code class="computeroutput"><span class="identifier">NaN</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the (signed) + real number to convert + </p> + <p> + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is a flag indicating whether a sign has to be generated even + for non-negative numbers (this is the same as has been returned + from the function <code class="computeroutput"><span class="identifier">force_sign</span><span class="special">()</span></code> described above) + </p> + <p> + The template parameters <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + and <code class="computeroutput"><span class="identifier">Tag</span></code> are + either of the type <code class="computeroutput"><span class="identifier">unused_type</span></code> + or describe the character class and conversion to be applied + to any output possibly influenced by either the <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives. + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">CharEncoding</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">OutputIterator</span><span class="special">></span> +<span class="keyword">bool</span> <span class="identifier">inf</span> <span class="special">(</span><span class="identifier">OutputIterator</span><span class="special">&</span> <span class="identifier">sink</span><span class="special">,</span> <span class="identifier">Num</span> <span class="identifier">n</span> + <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">force_sign</span><span class="special">);</span> +</pre> +<p> + </p> + </td> +<td> + <p> + This function is called whenever the number to print is a non-normal + real number of type <code class="computeroutput"><span class="identifier">Inf</span></code>. + </p> + <p> + <code class="computeroutput"><span class="identifier">sink</span></code> is the + output iterator to use for generation + </p> + <p> + <code class="computeroutput"><span class="identifier">n</span></code> is the (signed) + real number to convert + </p> + <p> + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is a flag indicating whether a sign has to be generated even + for non-negative numbers (this is the same as has been returned + from the function <code class="computeroutput"><span class="identifier">force_sign</span><span class="special">()</span></code> described above) + </p> + <p> + The template parameters <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + and <code class="computeroutput"><span class="identifier">Tag</span></code> are + either of the type <code class="computeroutput"><span class="identifier">unused_type</span></code> + or describe the character class and conversion to be applied + to any output possibly influenced by either the <code class="computeroutput"><span class="identifier">lower</span><span class="special">[]</span></code> + or <code class="computeroutput"><span class="identifier">upper</span><span class="special">[]</span></code> + directives. + </p> + <p> + The return value defines the outcome of the whole generator. + If it is <code class="computeroutput"><span class="keyword">false</span></code>, + no further output is generated, immediately returning <code class="computeroutput"><span class="keyword">false</span></code> from the calling <code class="computeroutput"><span class="identifier">real_generator</span></code> as well. If + it is <code class="computeroutput"><span class="keyword">true</span></code>, normal + output generation continues. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"><p> + The easiest way to implement a proper real number formatting policy + is to derive a new type from the the type <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><></span></code> while overriding the aspects + of the formatting which need to be changed. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h11"></a> + <span><a name="spirit.karma.reference.numeric.real_number.complexity"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where <code class="computeroutput"><span class="identifier">N</span></code> is the + number of digits needed to represent the generated real number. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.numeric.real_number.h12"></a> + <span><a name="spirit.karma.reference.numeric.real_number.example"></a></span><a class="link" href="real_number.html#spirit.karma.reference.numeric.real_number.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an <code class="computeroutput"><span class="identifier">double_</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="number">2.0</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">(</span><span class="number">2</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">(</span><span class="number">2.0</span><span class="special">),</span> <span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">(</span><span class="number">2.0</span><span class="special">),</span> <span class="number">3.0</span><span class="special">);</span> <span class="comment">// fails (as 2.0 != 3.0)!</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"-2.0"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">,</span> <span class="special">-</span><span class="number">2.0</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.234e05"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">,</span> <span class="number">1234.0e2</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.234e-06"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">,</span> <span class="number">0.000001234</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="signed_int.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="boolean.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/numeric/signed_int.html b/libs/spirit/doc/html/spirit/karma/reference/numeric/signed_int.html new file mode 100755 index 0000000000..9a7dec66db --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/numeric/signed_int.html @@ -0,0 +1,770 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Signed Integer Number Generators (int_, etc.)</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="Spirit 2.5.2"> +<link rel="up" href="../numeric.html" title="Numeric Generators"> +<link rel="prev" href="unsigned_int.html" title="Unsigned Integer Number Generators (uint_, etc.)"> +<link rel="next" href="real_number.html" title="Real Number Generators (float_, double_, etc.)"> +</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="unsigned_int.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="real_number.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.numeric.signed_int"></a><a class="link" href="signed_int.html" title="Signed Integer Number Generators (int_, etc.)">Signed + Integer Number Generators (<code class="computeroutput"><span class="identifier">int_</span></code>, + etc.)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h0"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.description"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">int_generator</span></code> can + generate signed integers of arbitrary length and size. This is almost + the same as the <code class="computeroutput"><span class="identifier">uint_generator</span></code>. + The only difference is the additional task of generating the <code class="computeroutput"><span class="char">'+'</span></code> or <code class="computeroutput"><span class="char">'-'</span></code> + sign preceding the number. The class interface is the same as that of + the <code class="computeroutput"><span class="identifier">uint_generator</span></code>. + </p> +<p> + The <code class="computeroutput"><span class="identifier">int_generator</span></code> generator + can be used to emit ordinary primitive C/C++ integers or even user defined + scalars such as bigints (unlimited precision integers) if the type follows + certain expression requirements (for more information about the requirements, + see <a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.additional_requirements">below</a>). + </p> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h1"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.header"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/numeric/int.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h2"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.namespace"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">short_</span> <span class="comment">// + alias: boost::spirit::karma::short_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">int_</span> <span class="comment">// alias: + boost::spirit::karma::int_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">long_</span> <span class="comment">// + alias: boost::spirit::karma::long_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">long_long</span> <span class="comment">// + alias: boost::spirit::karma::long_long</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">long_long</span></code> + and <code class="computeroutput"><span class="identifier">long_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + are only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">long</span> + <span class="keyword">long</span></code> (64 bit) integer types). + </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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">lit</span></code> is reused by the + <a class="link" href="../string.html" title="String Generators">String Generators</a>, + the <a class="link" href="../char.html" title="Char Generators">Character Generators</a>, + and the Numeric Generators. In general, a char generator is created + when you pass in a character, a string generator is created when you + pass in a string, and a numeric generator is created when you use a + numeric literal. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h3"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.synopsis"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><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="keyword">unsigned</span> <span class="identifier">Radix</span> + <span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">force_sign</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">int_generator</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h4"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.template_parameters"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">T</span></code> + </p> + </td> +<td> + <p> + The numeric base type of the numeric parser. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Radix</span></code> + </p> + </td> +<td> + <p> + The radix base. This can be either 2: binary, 8: octal, 10: + decimal and 16: hexadecimal. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="number">10</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">force_sign</span></code> + </p> + </td> +<td> + <p> + If <code class="computeroutput"><span class="keyword">true</span></code>, all numbers + will have a sign (space for zero) + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">false</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h5"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.model_of"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">num</span></code></span></dt> +<dd><p> + Numeric literal, any signed integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a signed integer value of type + <code class="computeroutput"><span class="identifier">Num</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Num</span></code></span></dt> +<dd><p> + Type of <code class="computeroutput"><span class="identifier">num</span></code>: any + signed integer type + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Radix</span></code></span></dt> +<dd><p> + A constant integer literal specifying the required radix for the + output conversion. Valid values are <code class="computeroutput"><span class="number">2</span></code>, + <code class="computeroutput"><span class="number">8</span></code>, <code class="computeroutput"><span class="number">10</span></code>, + and <code class="computeroutput"><span class="number">16</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">force_sign</span></code></span></dt> +<dd><p> + A constant boolean literal specifying whether the generated number + should always have a sign (<code class="computeroutput"><span class="char">'+'</span></code> + for positive numbers, <code class="computeroutput"><span class="char">'-'</span></code> + for negative numbers and a '<code class="computeroutput"> </code>' for zero). + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h6"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.expression_semantics"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the integer literal <code class="computeroutput"><span class="identifier">num</span></code> + using the default formatting (radix is <code class="computeroutput"><span class="number">10</span></code>, + sign is only printed for negative literals). This generator + never fails (unless the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">short_</span> +<span class="identifier">int_</span> +<span class="identifier">long_</span> +<span class="identifier">long_long</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the integer provided by a mandatory attribute using + the default formatting (radix is <code class="computeroutput"><span class="number">10</span></code>, + sign is only printed for negative literals). This generator + never fails (unless the underlying output stream reports an + error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">short_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">int_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">long_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">long_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the integer provided by the immediate literal value + the generator is initialized from using the default formatting + (radix is <code class="computeroutput"><span class="number">10</span></code>, sign + is only printed for negative literals). If this generator has + an associated attribute it succeeds only if the attribute is + equal to the immediate literal (unless the underlying output + stream reports an error). Otherwise this generator fails and + does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + All generators listed in the table above (except <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code>) are predefined specializations of the + <code class="computeroutput"><span class="identifier">int_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span><span class="special">></span></code> + basic integer number generator type described below. It is possible to + directly use this type to create integer generators using a wide range + of formatting options. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">int_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the integer of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by a mandatory attribute using the specified <code class="computeroutput"><span class="identifier">Radix</span></code> (possible values are + <code class="computeroutput"><span class="number">2</span></code>, <code class="computeroutput"><span class="number">8</span></code>, <code class="computeroutput"><span class="number">10</span></code>, + and <code class="computeroutput"><span class="number">16</span></code>, the default + value is <code class="computeroutput"><span class="number">10</span></code>). If + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is <code class="computeroutput"><span class="keyword">false</span></code> (the + default), a sign is only printed for negative literals. If + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>, all numbers + will be printed using a sign, i.e. <code class="computeroutput"><span class="char">'-'</span></code> + for negative numbers, <code class="computeroutput"><span class="char">'+'</span></code> + for positive numbers, and <code class="computeroutput"><span class="char">' '</span></code> + for zeros. This generator never fails (unless the underlying + output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">int_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the integer of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by the immediate literal value the generator is initialized + from, using the specified <code class="computeroutput"><span class="identifier">Radix</span></code> + (possible values are <code class="computeroutput"><span class="number">2</span></code>, + <code class="computeroutput"><span class="number">8</span></code>, <code class="computeroutput"><span class="number">10</span></code>, and <code class="computeroutput"><span class="number">16</span></code>, + the default value is <code class="computeroutput"><span class="number">10</span></code>). + If <code class="computeroutput"><span class="identifier">force_sign</span></code> + is <code class="computeroutput"><span class="keyword">false</span></code> (the + default), a sign is only printed for negative literals. If + <code class="computeroutput"><span class="identifier">force_sign</span></code> + is <code class="computeroutput"><span class="keyword">true</span></code>, all numbers + will be printed using a sign, i.e. <code class="computeroutput"><span class="char">'-'</span></code> + for negative numbers, <code class="computeroutput"><span class="char">'+'</span></code> + for positive numbers, and <code class="computeroutput"><span class="char">' '</span></code> + for zeros. If this generator has an associated attribute it + succeeds only if the attribute is equal to the immediate literal + (unless the underlying output stream reports an error). Otherwise + this generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h7"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.additional_requirements"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.additional_requirements">Additional + Requirements</a> + </h6> +<p> + The following lists enumerate the requirements which must be met in order + to use a certain type <code class="computeroutput"><span class="identifier">Num</span></code> + to instantiate and use a <code class="computeroutput"><span class="identifier">int_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span><span class="special">></span></code>. + </p> +<p> + If <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special"><</span><span class="identifier">Num</span><span class="special">>::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> + the type <code class="computeroutput"><span class="identifier">Num</span></code> must have + defined: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + comparison operators for: <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>, and <code class="computeroutput"><span class="special">>=</span></code> + </li> +<li class="listitem"> + numeric operators for: <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>, + and unary <code class="computeroutput"><span class="special">-</span></code> + </li> +</ul></div> +<p> + If <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special"><</span><span class="identifier">Num</span><span class="special">>::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">false</span></code> + the type <code class="computeroutput"><span class="identifier">Num</span></code> must have + defined: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + comparison operators for: <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>, and <code class="computeroutput"><span class="special">>=</span></code> + </li> +<li class="listitem"> + numeric operators for: <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>, + and unary <code class="computeroutput"><span class="special">-</span></code> + </li> +<li class="listitem"> + helper functions implementing the interface and the semantics of: + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fabs</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">lround</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ltrunc</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">floor</span></code>, + and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ceil</span></code>. These need to be defined + in a way so that they will be found using argument dependent lookup + (ADL). + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h8"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.attributes"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">short_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">short</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">int_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">int_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">int</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">long_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">int_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">int_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">,</span> <span class="identifier">force_sign</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Num</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Num</span></code> and emit the value stored in + the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h9"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.complexity"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where <code class="computeroutput"><span class="identifier">N</span></code> is the + number of digits needed to represent the generated integer number + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.numeric.signed_int.h10"></a> + <span><a name="spirit.karma.reference.numeric.signed_int.example"></a></span><a class="link" href="signed_int.html#spirit.karma.reference.numeric.signed_int.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an <code class="computeroutput"><span class="identifier">int_</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"-2"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(-</span><span class="number">2</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"-2"</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">(-</span><span class="number">2</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"-2"</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">(-</span><span class="number">2</span><span class="special">),</span> <span class="special">-</span><span class="number">2</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">(-</span><span class="number">2</span><span class="special">),</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// fails (as -2 != 3)!</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"-2"</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="special">-</span><span class="number">2</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="unsigned_int.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="real_number.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/numeric/unsigned_int.html b/libs/spirit/doc/html/spirit/karma/reference/numeric/unsigned_int.html new file mode 100755 index 0000000000..e8545490ce --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/numeric/unsigned_int.html @@ -0,0 +1,817 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Unsigned Integer Number Generators (uint_, etc.)</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="Spirit 2.5.2"> +<link rel="up" href="../numeric.html" title="Numeric Generators"> +<link rel="prev" href="../numeric.html" title="Numeric Generators"> +<link rel="next" href="signed_int.html" title="Signed Integer Number Generators (int_, etc.)"> +</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="../numeric.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="signed_int.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.numeric.unsigned_int"></a><a class="link" href="unsigned_int.html" title="Unsigned Integer Number Generators (uint_, etc.)">Unsigned + Integer Number Generators (<code class="computeroutput"><span class="identifier">uint_</span></code>, + etc.)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h0"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.description"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">uint_generator</span></code> class + is the simplest among the members of the numerics package. The <code class="computeroutput"><span class="identifier">uint_generator</span></code> can generate unsigned + integers of arbitrary length and size. The <code class="computeroutput"><span class="identifier">uint_generator</span></code> + generator can be used to generate ordinary primitive C/C++ integers or + even user defined scalars such as bigints (unlimited precision integers) + if the type follows certain expression requirements (for more information + about the requirements, see <a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.additional_requirements">below</a>)). + The <code class="computeroutput"><span class="identifier">uint_generator</span></code> is + a template class. Template parameters fine tune its behavior. + </p> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h1"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.header"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/numeric/uint.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_uint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h2"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.namespace"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">bin</span> <span class="comment">// alias: + boost::spirit::karma::bin</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">oct</span> <span class="comment">// alias: + boost::spirit::karma::oct</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">hex</span> <span class="comment">// alias: + boost::spirit::karma::hex</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ushort_</span> <span class="comment">// + alias: boost::spirit::karma::ushort_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ulong_</span> <span class="comment">// + alias: boost::spirit::karma::ulong_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">uint_</span> <span class="comment">// + alias: boost::spirit::karma::uint_</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ulong_long</span> <span class="comment">// + alias: boost::spirit::karma::ulong_long</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">ulong_long</span></code> + and <code class="computeroutput"><span class="identifier">ulong_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + are only available on platforms where the preprocessor constant <code class="computeroutput"><span class="identifier">BOOST_HAS_LONG_LONG</span></code> is defined (i.e. + on platforms having native support for <code class="computeroutput"><span class="keyword">unsigned</span> + <span class="keyword">long</span> <span class="keyword">long</span></code> + (64 bit) unsigned integer types). + </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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + <code class="computeroutput"><span class="identifier">lit</span></code> is reused by the + <a class="link" href="../string.html" title="String Generators">String Generators</a>, + the <a class="link" href="../char.html" title="Char Generators">Character Generators</a>, + and the Numeric Generators. In general, a char generator is created + when you pass in a character, a string generator is created when you + pass in a string, and a numeric generator is created when you use a + numeric literal. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h3"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.synopsis"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span> + <span class="keyword">typename</span> <span class="identifier">Num</span> + <span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">Radix</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">uint_generator</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h4"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.template_parameters"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code> + </p> + </td> +<td> + <p> + The numeric base type of the numeric generator. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Radix</span></code> + </p> + </td> +<td> + <p> + The radix base. This can be any value in the (inclusive) range + from <code class="computeroutput"><span class="number">2</span></code> .. <code class="computeroutput"><span class="number">36</span></code>. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="number">10</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h5"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.model_of"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">num</span></code></span></dt> +<dd><p> + Numeric literal, any unsigned integer value, or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to an unsigned integer value of + type <code class="computeroutput"><span class="identifier">Num</span></code> + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Num</span></code></span></dt> +<dd><p> + Type of <code class="computeroutput"><span class="identifier">num</span></code>: any + unsigned integer type, or in case of a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a>, its return value + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Radix</span></code></span></dt> +<dd><p> + An integer literal specifying the required radix for the output + conversion. Valid values are from the (inclusive) range <code class="computeroutput"><span class="number">2</span></code> .. <code class="computeroutput"><span class="number">36</span></code>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h6"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.expression_semantics"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the unsigned integer literal <code class="computeroutput"><span class="identifier">num</span></code> + using the default formatting (radix is <code class="computeroutput"><span class="number">10</span></code>). + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ushort_</span> +<span class="identifier">uint_</span> +<span class="identifier">ulong_</span> +<span class="identifier">ulong_long</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer provided by a mandatory attribute + using the default formatting (radix is <code class="computeroutput"><span class="number">10</span></code>). + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">ushort_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">uint_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">ulong_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">ulong_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer provided by the immediate literal + value the generator is initialized from using the default formatting + (radix is <code class="computeroutput"><span class="number">10</span></code>). + If this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bin</span> +<span class="identifier">oct</span> +<span class="identifier">hex</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer provided by a mandatory attribute + using the default formatting and the corresponding radix (<code class="computeroutput"><span class="identifier">bin</span></code>: radix is <code class="computeroutput"><span class="number">2</span></code>, <code class="computeroutput"><span class="identifier">oct</span></code>: + radix is <code class="computeroutput"><span class="number">8</span></code>, <code class="computeroutput"><span class="identifier">hex</span></code>: radix is <code class="computeroutput"><span class="number">16</span></code>). This generator never fails + (unless the underlying output stream reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bin</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">oct</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">hex</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer provided by the immediate literal + value the generator is initialized from using the default formatting + and the corresponding radix (<code class="computeroutput"><span class="identifier">bin</span></code>: + radix is <code class="computeroutput"><span class="number">2</span></code>, <code class="computeroutput"><span class="identifier">oct</span></code>: radix is <code class="computeroutput"><span class="number">8</span></code>, <code class="computeroutput"><span class="identifier">hex</span></code>: + radix is <code class="computeroutput"><span class="number">16</span></code>). If + this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + All generators listed in the table above (except <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code>) are predefined specializations of the + <code class="computeroutput"><span class="identifier">uint_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">></span></code> + basic unsigned integer number generator type described below. It is possible + to directly use this type to create unsigned integer generators using + a wide range of formatting options. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">uint_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by a mandatory attribute using the specified <code class="computeroutput"><span class="identifier">Radix</span></code> (allowed values are + from the (inclusive) range from <code class="computeroutput"><span class="number">2</span></code> + .. <code class="computeroutput"><span class="number">36</span></code>, the default + value is <code class="computeroutput"><span class="number">10</span></code>).This + generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">uint_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Generate the unsigned integer of type <code class="computeroutput"><span class="identifier">Num</span></code> + provided by the immediate literal value the generator is initialized + from, using the specified <code class="computeroutput"><span class="identifier">Radix</span></code> + (allowed values are from the (inclusive) range from <code class="computeroutput"><span class="number">2</span></code> .. <code class="computeroutput"><span class="number">36</span></code>, + the default value is <code class="computeroutput"><span class="number">10</span></code>). + If this generator has an associated attribute it succeeds only + if the attribute is equal to the immediate literal (unless + the underlying output stream reports an error). Otherwise this + generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h7"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.additional_requirements"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.additional_requirements">Additional + Requirements</a> + </h6> +<p> + The following lists enumerate the requirements which must be met in order + to use a certain type <code class="computeroutput"><span class="identifier">Num</span></code> + to instantiate and use a <code class="computeroutput"><span class="identifier">uint_generator</span><span class="special"><</span><span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span><span class="special">></span></code>. + </p> +<p> + If <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special"><</span><span class="identifier">Num</span><span class="special">>::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> + the type <code class="computeroutput"><span class="identifier">Num</span></code> must have + defined: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + comparison operators for: <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>, and <code class="computeroutput"><span class="special">>=</span></code> + </li> +<li class="listitem"> + numeric operators for: <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>, and <code class="computeroutput"><span class="special">%</span></code> + </li> +</ul></div> +<p> + If <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_integral</span><span class="special"><</span><span class="identifier">Num</span><span class="special">>::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">false</span></code> + the type <code class="computeroutput"><span class="identifier">Num</span></code> must have + defined: + </p> +<div class="itemizedlist"><ul class="itemizedlist" type="disc"> +<li class="listitem"> + comparison operators for: <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>, and <code class="computeroutput"><span class="special">>=</span></code> + </li> +<li class="listitem"> + numeric operators for: <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>, and <code class="computeroutput"><span class="special">%</span></code> + </li> +<li class="listitem"> + helper functions implementing the interface and the semantics of: + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">lround</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ltrunc</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">floor</span></code>, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ceil</span></code>. + These need to be defined in a way so that they will be found using + argument dependent lookup (ADL). + </li> +</ul></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h8"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.attributes"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ushort_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ushort_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">uint_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">uint_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ulong_</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ulong_</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ulong_long</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> + <span class="keyword">long</span></code>, attribute is mandatory + (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ulong_long</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> + <span class="keyword">long</span></code>, attribute is optional, + if it is supplied, the generator compares the attribute with + <code class="computeroutput"><span class="identifier">num</span></code> and succeeds + only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bin</span> +<span class="identifier">oct</span> +<span class="identifier">hex</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">bin</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">oct</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span> +<span class="identifier">hex</span><span class="special">(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, + attribute is optional, if it is supplied, the generator compares + the attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">uint_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">uint_generator</span><span class="special"><</span> + <span class="identifier">Num</span><span class="special">,</span> <span class="identifier">Radix</span> +<span class="special">>()(</span><span class="identifier">num</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">Num</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">num</span></code> + and succeeds only if both are equal, failing otherwise. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Num</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Num</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Num</span></code> and emit the value stored in + the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h9"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.complexity"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where <code class="computeroutput"><span class="identifier">N</span></code> is the + number of digits needed to represent the generated integer number + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.numeric.unsigned_int.h10"></a> + <span><a name="spirit.karma.reference.numeric.unsigned_int.example"></a></span><a class="link" href="unsigned_int.html#spirit.karma.reference.numeric.unsigned_int.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">uint_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an <code class="computeroutput"><span class="identifier">uint</span></code> + generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"2"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="number">2U</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"2"</span><span class="special">,</span> <span class="identifier">uint_</span><span class="special">(</span><span class="number">2</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2"</span><span class="special">,</span> <span class="identifier">uint_</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="number">2</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">uint_</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="number">3</span><span class="special">);</span> <span class="comment">// fails (as 2 != 3)!</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2"</span><span class="special">,</span> <span class="identifier">uint_</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../numeric.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../numeric.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="signed_int.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator.html b/libs/spirit/doc/html/spirit/karma/reference/operator.html new file mode 100755 index 0000000000..12ead304c2 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator.html @@ -0,0 +1,98 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Generator Operators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="numeric/boolean.html" title="Boolean Generators (bool_)"> +<link rel="next" href="operator/sequence.html" title="Sequence Generator (a << b)"> +</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="numeric/boolean.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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/sequence.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="spirit.karma.reference.operator"></a><a class="link" href="operator.html" title="Generator Operators">Generator Operators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="operator/sequence.html">Sequence + Generator (<code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> + <span class="identifier">b</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/alternative.html">Alternative + Generator (<code class="computeroutput"><span class="identifier">a</span> <span class="special">|</span> + <span class="identifier">b</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/kleene.html">Kleene Star + Generator (<code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/plus.html">Plus Generator + (<code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/list.html">List Generator + (<code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> + <span class="identifier">b</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/optional.html">Optional + Generator (<code class="computeroutput"><span class="special">-</span><span class="identifier">a</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/and_predicate.html">And-Predicate + Generator (<code class="computeroutput"><span class="special">&</span><span class="identifier">a</span></code>)</a></span></dt> +<dt><span class="section"><a href="operator/not_predicate.html">Not-Predicate + Generator (<code class="computeroutput"><span class="special">!</span><span class="identifier">a</span></code>)</a></span></dt> +</dl></div> +<p> + Operators are used as a means for object composition and embedding. Simple + generators may be composed to form composites through operator overloading, + crafted to approximate the syntax of <a class="link" href="../../abstracts/parsing_expression_grammar.html" title="Parsing Expression Grammar">Parsing + Expression Grammar</a> (PEG). An expression such as: + </p> +<pre class="programlisting"><span class="identifier">a</span> <span class="special">|</span> <span class="identifier">b</span> +</pre> +<p> + yields a new generator type which is a composite of its operands, <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>. + </p> +<p> + This module includes different generators which get instantiated if one + of the overloaded operators is used with more primitive generator constructs. + It includes sequences (<code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> <span class="identifier">b</span></code>), + alternatives (<code class="computeroutput"><span class="identifier">a</span> <span class="special">|</span> + <span class="identifier">b</span></code>), Kleene star (unary <code class="computeroutput"><span class="special">*</span></code>), plus (unary <code class="computeroutput"><span class="special">+</span></code>), + optional (unary <code class="computeroutput"><span class="special">-</span></code>), lists + (<code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> + <span class="identifier">b</span></code>), and the two predicates, the + <span class="emphasis"><em>and</em></span> predicate (unary <code class="computeroutput"><span class="special">&</span></code>) + and the <span class="emphasis"><em>not</em></span> predicate (unary <code class="computeroutput"><span class="special">!</span></code>). + </p> +<h6> +<a name="spirit.karma.reference.operator.h0"></a> + <span><a name="spirit.karma.reference.operator.module_header"></a></span><a class="link" href="operator.html#spirit.karma.reference.operator.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_operator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="numeric/boolean.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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/sequence.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/alternative.html b/libs/spirit/doc/html/spirit/karma/reference/operator/alternative.html new file mode 100755 index 0000000000..9f515719d0 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/alternative.html @@ -0,0 +1,265 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Alternative Generator (a | b)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="sequence.html" title="Sequence Generator (a << b)"> +<link rel="next" href="kleene.html" title="Kleene Star Generator (*a)"> +</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="sequence.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="kleene.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.alternative"></a><a class="link" href="alternative.html" title="Alternative Generator (a | b)">Alternative + Generator (<code class="computeroutput"><span class="identifier">a</span> <span class="special">|</span> + <span class="identifier">b</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.alternative.h0"></a> + <span><a name="spirit.karma.reference.operator.alternative.description"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.description">Description</a> + </h6> +<p> + Generator alternatives are used to combine different, more primitive + generators into alternatives. All generators in an alternative are invoked + from left to right until one of them succeeds. + </p> +<h6> +<a name="spirit.karma.reference.operator.alternative.h1"></a> + <span><a name="spirit.karma.reference.operator.alternative.header"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/alternative.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_alternative</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.alternative.h2"></a> + <span><a name="spirit.karma.reference.operator.alternative.model_of"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/narygenerator.html" title="NaryGenerator"><code class="computeroutput"><span class="identifier">NaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.alternative.h3"></a> + <span><a name="spirit.karma.reference.operator.alternative.expression_semantics"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/narygenerator.html" title="NaryGenerator"><code class="computeroutput"><span class="identifier">NaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special">|</span> + <span class="identifier">b</span></code> + </p> + </td> +<td> + <p> + The generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">b</span></code> are executed + sequentially from left to right until one of them succeeds. + A failed generator forces the alternative generator to try + the next one. The alternative fails as a whole only if all + elements of the alternative fail. Each element of the alternative + gets passed the whole attribute of the alternative. + </p> + </td> +</tr></tbody> +</table></div> +<p> + Alternatives intercept and buffer the output of the currently executed + element. This allows to avoid partial outputs from failing elements as + the buffered content will be forwarded to the actual output only after + an element succeeded. + </p> +<h6> +<a name="spirit.karma.reference.operator.alternative.h4"></a> + <span><a name="spirit.karma.reference.operator.alternative.attributes"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special">|</span> + <span class="identifier">b</span></code> (alternative) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</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">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">variant</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">a</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">Unused</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">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">b</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">B</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">b</span><span class="special">:</span> <span class="identifier">Unused</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">Unused</span> +<span class="identifier">a</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">A</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">A</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The table above uses <code class="computeroutput"><span class="identifier">variant</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span></code> as a placeholder only. The notation + <code class="computeroutput"><span class="identifier">variant</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span></code> + stands for the type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</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> +</table></div> +<p> + The attribute handling of Alternatives is special as their behavior is + not completely defined at compile time. First of all the selected alternative + element depends on the actual type of the attribute supplied to the alternative + generator (i.e. what is stored in the variant). The attribute type supplied + at <span class="emphasis"><em>runtime</em></span> narrows the set of considered alternatives + to those being compatible attribute wise. The remaining alternatives + are tried sequentially until the first of them succeeds. See below for + an example of this behavior. + </p> +<h6> +<a name="spirit.karma.reference.operator.alternative.h5"></a> + <span><a name="spirit.karma.reference.operator.alternative.complexity"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the alternative generator is defined by the + sum of the complexities of its elements. The complexity of the alternative + itself is O(N), where N is the number of elements in the alternative. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.alternative.h6"></a> + <span><a name="spirit.karma.reference.operator.alternative.example"></a></span><a class="link" href="alternative.html#spirit.karma.reference.operator.alternative.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">string</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an alternative. While being only the second alternative, + the <code class="computeroutput"><span class="identifier">double_</span></code> generator + is chosen for output formatting because the supplied attribute type is + not compatible (i.e. not convertible) to the attribute type of the <code class="computeroutput"><span class="identifier">string</span></code> alternative. + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</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="keyword">double</span><span class="special">></span> <span class="identifier">v1</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0"</span><span class="special">,</span> <span class="identifier">string</span> <span class="special">|</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">v1</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="identifier">string</span> <span class="special">|</span> <span class="identifier">double_</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + The same formatting rules may be used to output a string. This time we + supply the string <code class="computeroutput"><span class="string">"example"</span></code>, + resulting in the first alternative to be chosen for the generated output. + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</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="keyword">double</span><span class="special">></span> <span class="identifier">v2</span><span class="special">(</span><span class="string">"example"</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"example"</span><span class="special">,</span> <span class="identifier">string</span> <span class="special">|</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">v2</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"example"</span><span class="special">,</span> <span class="identifier">string</span> <span class="special">|</span> <span class="identifier">double_</span><span class="special">,</span> <span class="string">"example"</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="sequence.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="kleene.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/and_predicate.html b/libs/spirit/doc/html/spirit/karma/reference/operator/and_predicate.html new file mode 100755 index 0000000000..81cac2c6c6 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/and_predicate.html @@ -0,0 +1,234 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>And-Predicate Generator (&a)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="optional.html" title="Optional Generator (-a)"> +<link rel="next" href="not_predicate.html" title="Not-Predicate Generator (!a)"> +</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="optional.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="not_predicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.and_predicate"></a><a class="link" href="and_predicate.html" title="And-Predicate Generator (&a)">And-Predicate + Generator (<code class="computeroutput"><span class="special">&</span><span class="identifier">a</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h0"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.description"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.description">Description</a> + </h6> +<p> + The and-predicate generator is used to test, whether the embedded generator + succeeds without generating any output. It succeeds if the embedded generator + succeeds. + </p> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h1"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.header"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/and_predicate.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_and_predicate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h2"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.model_of"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h3"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.expression_semantics"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">&</span><span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed for the sole purpose of testing whether it succeeds. + The and-predicate generator succeeds if its embedded generator + succeeds (unless the underlying output stream reports an error). + The and-predicate never produces any output. + </p> + </td> +</tr></tbody> +</table></div> +<p> + The and generator is implemented by redirecting all output produced by + its embedded generator into a discarding device. + </p> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h4"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.attributes"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">&</span><span class="identifier">a</span></code> + (and-predicate, unary <code class="computeroutput"><span class="special">&</span></code>) + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="special">&</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The attribute of the and-predicate is not always <code class="computeroutput"><span class="identifier">unused_type</span></code>, + which is different from Qi's and-predicate. This is necessary as the + generator the and predicate is attached to most of the time needs an + attribute. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h5"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.complexity"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the and-predicate generator is defined by + the complexity of its embedded generator. The complexity of the and-predicate + generator itself is O(1). + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.and_predicate.h6"></a> + <span><a name="spirit.karma.reference.operator.and_predicate.example"></a></span><a class="link" href="and_predicate.html#spirit.karma.reference.operator.and_predicate.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">string</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">ref</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an and predicate generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"b"</span><span class="special">,</span> <span class="special">&</span><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'b'</span> <span class="special">|</span> <span class="char">'c'</span><span class="special">,</span> <span class="char">'a'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"c"</span><span class="special">,</span> <span class="special">&</span><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'b'</span> <span class="special">|</span> <span class="char">'c'</span><span class="special">,</span> <span class="char">'x'</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="special">&</span><span class="identifier">string</span><span class="special">(</span><span class="string">"123"</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span> <span class="special">|</span> <span class="string">"def"</span><span class="special">,</span> <span class="string">"123"</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"def"</span><span class="special">,</span> <span class="special">&</span><span class="identifier">string</span><span class="special">(</span><span class="string">"123"</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span> <span class="special">|</span> <span class="string">"def"</span><span class="special">,</span> <span class="string">"456"</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="optional.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="not_predicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/kleene.html b/libs/spirit/doc/html/spirit/karma/reference/operator/kleene.html new file mode 100755 index 0000000000..4a8995d397 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/kleene.html @@ -0,0 +1,287 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Kleene Star Generator (*a)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="alternative.html" title="Alternative Generator (a | b)"> +<link rel="next" href="plus.html" title="Plus Generator (+a)"> +</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="alternative.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="plus.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.kleene"></a><a class="link" href="kleene.html" title="Kleene Star Generator (*a)">Kleene Star + Generator (<code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.kleene.h0"></a> + <span><a name="spirit.karma.reference.operator.kleene.description"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.description">Description</a> + </h6> +<p> + Kleene star generators are used to repeat the execution of an embedded + generator zero or more times. Regardless of the success of the embedded + generator, the Kleene star generator always succeeds. + </p> +<h6> +<a name="spirit.karma.reference.operator.kleene.h1"></a> + <span><a name="spirit.karma.reference.operator.kleene.header"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/kleene.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_kleene</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.kleene.h2"></a> + <span><a name="spirit.karma.reference.operator.kleene.model_of"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.kleene.h3"></a> + <span><a name="spirit.karma.reference.operator.kleene.expression_semantics"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed zero or more times depending on the availability + of an attribute. The execution of <code class="computeroutput"><span class="identifier">a</span></code> + stops after the attribute values passed to the Kleene star + generator are exhausted. The Kleene star always succeeds (unless + the underlying output stream reports an error). + </p> + </td> +</tr></tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + All failing iterations of the embedded generator will consume one element + from the supplied attribute. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.kleene.h4"></a> + <span><a name="spirit.karma.reference.operator.kleene.attributes"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code> + (Kleene star, unary <code class="computeroutput"><span class="special">*</span></code>) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="special">*</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="special">*</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The table above uses <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as a placeholder only. The notation + of <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> + stands for <span class="emphasis"><em>any STL container</em></span> holding elements + of type <code class="computeroutput"><span class="identifier">A</span></code>. + </p></td></tr> +</table></div> +<p> + The Kleene star generator will execute its embedded generator once for + each element in the provided container attribute as long as the embedded + generator succeeds. On each iteration it will pass the next consecutive + element from the container attribute to the embedded generator. Therefore + the number of iterations will not be larger than the number of elements + in the container passed as its attribute. An empty container will make + the Kleene star generate no output at all. + </p> +<p> + It is important to note, that the Kleene star does not perform any buffering + of the output generated by its embedded elements. That means that any + failing element generator might have already generated some output, which + is <span class="emphasis"><em>not</em></span> rolled back. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The simplest way to force a Kleene star to behave as if it did buffering + is to wrap it into a buffering directive (see <a class="link" href="../directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">buffer</span><span class="special">[*</span><span class="identifier">a</span><span class="special">]</span></pre> +<p> + </p> +<p> + which will <span class="emphasis"><em>not</em></span> generate any output in case of + a failing generator <code class="computeroutput"><span class="special">*</span><span class="identifier">a</span></code>. The expression: + </p> +<p> +</p> +<pre class="programlisting"><span class="special">*(</span><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">])</span></pre> +<p> + </p> +<p> + will not generate any partial output from a generator <code class="computeroutput"><span class="identifier">a</span></code> if it fails generating in the middle + of its output. The overall expression will still generate the output + as produced by all successful invocations of the generator <code class="computeroutput"><span class="identifier">a</span></code>. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.kleene.h5"></a> + <span><a name="spirit.karma.reference.operator.kleene.complexity"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the Kleene star generator is defined by the + complexity of its embedded generator multiplied by the number of executed + iterations. The complexity of the Kleene star itself is O(N), where + N is the number of elements in the container passed as its attribute. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.kleene.h6"></a> + <span><a name="spirit.karma.reference.operator.kleene.example"></a></span><a class="link" href="kleene.html#spirit.karma.reference.operator.kleene.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a Kleene star generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v</span><span class="special">;</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">v</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"1.0 2.0 3.0 "</span><span class="special">,</span> <span class="special">*</span><span class="identifier">double_</span><span class="special">,</span> <span class="identifier">space</span><span class="special">,</span> <span class="identifier">v</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="alternative.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="plus.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/list.html b/libs/spirit/doc/html/spirit/karma/reference/operator/list.html new file mode 100755 index 0000000000..511ea5f37d --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/list.html @@ -0,0 +1,290 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>List Generator (a % b)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="plus.html" title="Plus Generator (+a)"> +<link rel="next" href="optional.html" title="Optional Generator (-a)"> +</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="plus.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="optional.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.list"></a><a class="link" href="list.html" title="List Generator (a % b)">List Generator + (<code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> + <span class="identifier">b</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.list.h0"></a> + <span><a name="spirit.karma.reference.operator.list.description"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.description">Description</a> + </h6> +<p> + The list generator is used to repeat the execution of an embedded generator + and intersperse it with the output of another generator one or more times. + It succeeds if the embedded generator has been successfully executed + at least once. + </p> +<h6> +<a name="spirit.karma.reference.operator.list.h1"></a> + <span><a name="spirit.karma.reference.operator.list.header"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/list.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_list</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.list.h2"></a> + <span><a name="spirit.karma.reference.operator.list.model_of"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/binarygenerator.html" title="BinaryGenerator"><code class="computeroutput"><span class="identifier">BinaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.list.h3"></a> + <span><a name="spirit.karma.reference.operator.list.expression_semantics"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/binarygenerator.html" title="BinaryGenerator"><code class="computeroutput"><span class="identifier">BinaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> + <span class="identifier">b</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed one or more times depending on the availability + of an attribute. The output generated by <code class="computeroutput"><span class="identifier">a</span></code> + is interspersed with the output generated by <code class="computeroutput"><span class="identifier">b</span></code>. The list generator succeeds + if its first embedded generator has been successfully executed + at least once (unless the underlying output stream reports + an error). + </p> + </td> +</tr></tbody> +</table></div> +<p> + The list expression <code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> <span class="identifier">b</span></code> + is a shortcut for <code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> <span class="special">*(</span><span class="identifier">b</span> <span class="special"><<</span> + <span class="identifier">a</span><span class="special">)</span></code>. + It is almost semantically equivalent, except for the attribute of <code class="computeroutput"><span class="identifier">b</span></code>, which gets ignored in the case of + the list generator. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + All failing iterations of the embedded generator will consume one element + from the supplied attribute. The overall <code class="computeroutput"><span class="identifier">a</span> + <span class="special">%</span> <span class="identifier">b</span></code> + will succeed as long as at least one invocation of the embedded generator, + <code class="computeroutput"><span class="identifier">a</span></code>, will succeed (unless + the underlying output stream reports an error). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.list.h4"></a> + <span><a name="spirit.karma.reference.operator.list.attributes"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special">%</span> + <span class="identifier">b</span></code> (list) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</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">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">vector</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="identifier">Unused</span><span class="special">,</span> <span class="identifier">b</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">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The table above uses <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as a placeholder only. The notation + of <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> + stands for <span class="emphasis"><em>any STL container</em></span> holding elements + of type <code class="computeroutput"><span class="identifier">A</span></code>. + </p></td></tr> +</table></div> +<p> + The list generator will execute its embedded generator once for each + element in the provided container attribute and as long as the embedded + generator succeeds. The output generated by its first generator will + be interspersed by the output generated by the second generator. On each + iteration it will pass the next consecutive element from the container + attribute to the first embedded generator. The second embedded generator + does not get passed any attributes (it gets invoked using an <code class="computeroutput"><span class="identifier">unused_type</span></code> as its attribute). Therefore + the number of iterations will not be larger than the number of elements + in the container passed as its attribute. An empty container will make + the list generator fail. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + If you want to use the list generator and still allow for an empty + attribute, you can use the optional operator (see <a class="link" href="optional.html" title="Optional Generator (-a)">Optional + (unary <code class="computeroutput"><span class="special">-</span></code>)</a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="special">-(</span><span class="identifier">a</span> <span class="special">%</span> <span class="identifier">b</span><span class="special">)</span></pre> +<p> + </p> +<p> + which will succeed even if the provided container attribute does not + contain any elements. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.list.h5"></a> + <span><a name="spirit.karma.reference.operator.list.complexity"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the list generator is defined by the complexity + of its embedded generators multiplied by the number of executed iterations. + The complexity of the list generator itself is O(N), where N is the + number of elements in the container passed as its attribute. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.list.h6"></a> + <span><a name="spirit.karma.reference.operator.list.example"></a></span><a class="link" href="list.html#spirit.karma.reference.operator.list.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a list generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v1</span><span class="special">;</span> +<span class="identifier">v1</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0"</span><span class="special">,</span> <span class="identifier">double_</span> <span class="special">%</span> <span class="char">','</span><span class="special">,</span> <span class="identifier">v1</span><span class="special">);</span> + +<span class="identifier">v1</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0,2.0"</span><span class="special">,</span> <span class="identifier">double_</span> <span class="special">%</span> <span class="char">','</span><span class="special">,</span> <span class="identifier">v1</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="plus.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="optional.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/not_predicate.html b/libs/spirit/doc/html/spirit/karma/reference/operator/not_predicate.html new file mode 100755 index 0000000000..73183c4bb8 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/not_predicate.html @@ -0,0 +1,234 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Not-Predicate Generator (!a)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="and_predicate.html" title="And-Predicate Generator (&a)"> +<link rel="next" href="../stream.html" title="Stream Generators"> +</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="and_predicate.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="../stream.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.not_predicate"></a><a class="link" href="not_predicate.html" title="Not-Predicate Generator (!a)">Not-Predicate + Generator (<code class="computeroutput"><span class="special">!</span><span class="identifier">a</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h0"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.description"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.description">Description</a> + </h6> +<p> + The not-predicate generator is used to test, whether the embedded generator + fails, without generating any output. It succeeds if the embedded generator + fails. + </p> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h1"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.header"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/not_predicate.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_not_predicate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h2"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.model_of"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h3"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.expression_semantics"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed for the sole purpose of testing whether it succeeds. + The not-predicate generator succeeds if its embedded generator + fails (unless the underlying output stream reports an error). + The not-predicate never produces any output. + </p> + </td> +</tr></tbody> +</table></div> +<p> + The not generator is implemented by redirecting all output produced by + its embedded generator into a discarding device. + </p> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h4"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.attributes"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">!</span><span class="identifier">a</span></code> + (not-predicate, unary <code class="computeroutput"><span class="special">!</span></code>) + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span><span class="special">:</span> + <span class="identifier">A</span> <span class="special">--></span> + <span class="special">!</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The attribute of the not-predicate is not always <code class="computeroutput"><span class="identifier">unused_type</span></code>, + which is different from Qi's not-predicate. This is necessary as the + generator the and-predicate is attached to most of the time needs an + attribute. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h5"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.complexity"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the not-predicate generator is defined by + the complexity of its embedded generator. The complexity of the not-predicate + generator itself is O(1). + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.not_predicate.h6"></a> + <span><a name="spirit.karma.reference.operator.not_predicate.example"></a></span><a class="link" href="not_predicate.html#spirit.karma.reference.operator.not_predicate.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">string</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">ref</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a not predicate generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"c"</span><span class="special">,</span> <span class="special">!</span><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'b'</span> <span class="special">|</span> <span class="char">'c'</span><span class="special">,</span> <span class="char">'a'</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"b"</span><span class="special">,</span> <span class="special">!</span><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">)</span> <span class="special"><<</span> <span class="char">'b'</span> <span class="special">|</span> <span class="char">'c'</span><span class="special">,</span> <span class="char">'x'</span><span class="special">);</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"def"</span><span class="special">,</span> <span class="special">!</span><span class="identifier">string</span><span class="special">(</span><span class="string">"123"</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span> <span class="special">|</span> <span class="string">"def"</span><span class="special">,</span> <span class="string">"123"</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="special">!</span><span class="identifier">string</span><span class="special">(</span><span class="string">"123"</span><span class="special">)</span> <span class="special"><<</span> <span class="string">"abc"</span> <span class="special">|</span> <span class="string">"def"</span><span class="special">,</span> <span class="string">"456"</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="and_predicate.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="../stream.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/optional.html b/libs/spirit/doc/html/spirit/karma/reference/operator/optional.html new file mode 100755 index 0000000000..29fee09617 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/optional.html @@ -0,0 +1,264 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Optional Generator (-a)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="list.html" title="List Generator (a % b)"> +<link rel="next" href="and_predicate.html" title="And-Predicate Generator (&a)"> +</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="list.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="and_predicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.optional"></a><a class="link" href="optional.html" title="Optional Generator (-a)">Optional + Generator (<code class="computeroutput"><span class="special">-</span><span class="identifier">a</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.optional.h0"></a> + <span><a name="spirit.karma.reference.operator.optional.description"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.description">Description</a> + </h6> +<p> + The optional generator is used to conditionally execute an embedded generator. + It succeeds always. + </p> +<h6> +<a name="spirit.karma.reference.operator.optional.h1"></a> + <span><a name="spirit.karma.reference.operator.optional.header"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/optional.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.optional.h2"></a> + <span><a name="spirit.karma.reference.operator.optional.model_of"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.optional.h3"></a> + <span><a name="spirit.karma.reference.operator.optional.expression_semantics"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">-</span><span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed depending on the availability of an attribute. + The optional generator succeeds if its embedded generator succeeds + (unless the underlying output stream reports an error). + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.optional.h4"></a> + <span><a name="spirit.karma.reference.operator.optional.attributes"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">-</span><span class="identifier">a</span></code> + (optional, unary <code class="computeroutput"><span class="special">-</span></code>) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="special">-</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">optional</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="identifier">Unused</span> <span class="special">--></span> <span class="special">-</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The table above uses <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as a placeholder only. The notation + of <code class="computeroutput"><span class="identifier">optional</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> + stands for the data type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code>. + </p></td></tr> +</table></div> +<p> + The optional generator will execute its embedded generator once if the + provided attribute holds a valid value. It forwards the value held in + its attribute to the embedded generator. + </p> +<p> + It is important to note, that the optional generator does not perform + any buffering of the output generated by its embedded elements. That + means that any failing element might have already generated some output, + which is <span class="emphasis"><em>not</em></span> rolled back. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The simplest way to force a optional generator to behave as if it did + buffering is to wrap it into a buffering directive (see <a class="link" href="../directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">buffer</span><span class="special">[-</span><span class="identifier">a</span><span class="special">]</span></pre> +<p> + </p> +<p> + which will <span class="emphasis"><em>not</em></span> generate any output in case of + a failing generator <code class="computeroutput"><span class="special">-</span><span class="identifier">a</span></code>. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.optional.h5"></a> + <span><a name="spirit.karma.reference.operator.optional.complexity"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the optional generator is defined by the + complexity of its embedded generator. The complexity of the optional + generator itself is O(1). + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.optional.h6"></a> + <span><a name="spirit.karma.reference.operator.optional.example"></a></span><a class="link" href="optional.html#spirit.karma.reference.operator.optional.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of an optional generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">val</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0"</span><span class="special">,</span> <span class="special">-</span><span class="identifier">double_</span><span class="special">,</span> <span class="identifier">val</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"2.0"</span><span class="special">,</span> <span class="special">-</span><span class="identifier">double_</span><span class="special">,</span> <span class="number">2.0</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + Usage and result of an empty optional generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">val</span><span class="special">;</span> <span class="comment">// empty optional</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="special">-</span><span class="identifier">double_</span><span class="special">,</span> <span class="identifier">val</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="list.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="and_predicate.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/plus.html b/libs/spirit/doc/html/spirit/karma/reference/operator/plus.html new file mode 100755 index 0000000000..5c44a0b843 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/plus.html @@ -0,0 +1,301 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Plus Generator (+a)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="kleene.html" title="Kleene Star Generator (*a)"> +<link rel="next" href="list.html" title="List Generator (a % b)"> +</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="kleene.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="list.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.plus"></a><a class="link" href="plus.html" title="Plus Generator (+a)">Plus Generator + (<code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.plus.h0"></a> + <span><a name="spirit.karma.reference.operator.plus.description"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.description">Description</a> + </h6> +<p> + The Plus generator is used to repeat the execution of an embedded generator + one or more times. It succeeds if the embedded generator has been successfully + executed at least once. + </p> +<h6> +<a name="spirit.karma.reference.operator.plus.h1"></a> + <span><a name="spirit.karma.reference.operator.plus.header"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/plus.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.plus.h2"></a> + <span><a name="spirit.karma.reference.operator.plus.model_of"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.plus.h3"></a> + <span><a name="spirit.karma.reference.operator.plus.expression_semantics"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/unarygenerator.html" title="UnaryGenerator"><code class="computeroutput"><span class="identifier">UnaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code> + </p> + </td> +<td> + <p> + The generator <code class="computeroutput"><span class="identifier">a</span></code> + is executed one or more times depending on the availability + of an attribute. The execution of <code class="computeroutput"><span class="identifier">a</span></code> + stops after the attribute values passed to the plus generator + are exhausted. The plus generator succeeds as long as its embedded + generator has been successfully executed at least once (unless + the underlying output stream reports an error). + </p> + </td> +</tr></tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + All failing iterations of the embedded generator will consume one element + from the supplied attribute. The overall <code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code> will succeed as long as at least + one invocation of the embedded generator will succeed (unless the underlying + output stream reports an error). + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.plus.h4"></a> + <span><a name="spirit.karma.reference.operator.plus.attributes"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code> + (unary <code class="computeroutput"><span class="special">+</span></code>) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</span><span class="special">:</span> <span class="identifier">A</span> <span class="special">--></span> <span class="special">+</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">vector</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="identifier">Unused</span> <span class="special">--></span> <span class="special">+</span><span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The table above uses <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as a placeholder only. The notation + of <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> + stands for <span class="emphasis"><em>any STL container</em></span> holding elements + of type <code class="computeroutput"><span class="identifier">A</span></code>. + </p></td></tr> +</table></div> +<p> + The Plus generator will execute its embedded generator once for each + element in the provided container attribute as long as the embedded generator + succeeds. On each iteration it will pass the next consecutive element + from the container attribute to the embedded generator. Therefore the + number of iterations will not be larger than the number of elements in + the container passed as its attribute. An empty container will make the + plus generator fail. + </p> +<p> + It is important to note, that the plus generator does not perform any + buffering of the output generated by its embedded elements. That means + that any failing element generator might have already generated some + output, which is <span class="emphasis"><em>not</em></span> rolled back. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The simplest way to force a plus generator to behave as if it did buffering + is to wrap it into a buffering directive (see <a class="link" href="../directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">buffer</span><span class="special">[+</span><span class="identifier">a</span><span class="special">]</span></pre> +<p> + </p> +<p> + which will <span class="emphasis"><em>not</em></span> generate any output in case of + a failing generator <code class="computeroutput"><span class="special">+</span><span class="identifier">a</span></code>. The expression: + </p> +<p> +</p> +<pre class="programlisting"><span class="special">+(</span><span class="identifier">buffer</span><span class="special">[</span><span class="identifier">a</span><span class="special">])</span></pre> +<p> + </p> +<p> + will not generate any partial output from a generator <code class="computeroutput"><span class="identifier">a</span></code> if it fails generating in the middle + of its output. The overall expression will still generate the output + as produced by all successful invocations of the generator <code class="computeroutput"><span class="identifier">a</span></code>. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.plus.h5"></a> + <span><a name="spirit.karma.reference.operator.plus.complexity"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the plus generator is defined by the complexity + of its embedded generator multiplied by the number of executed iterations. + The complexity of the plus generator itself is O(N), where N is the + number of elements in the container passed as its attribute. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.plus.h6"></a> + <span><a name="spirit.karma.reference.operator.plus.example"></a></span><a class="link" href="plus.html#spirit.karma.reference.operator.plus.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">space</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a plus generator: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v1</span><span class="special">;</span> +<span class="identifier">v1</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">1.0</span><span class="special">);</span> +<span class="identifier">v1</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">2.0</span><span class="special">);</span> +<span class="identifier">v1</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="number">3.0</span><span class="special">);</span> +<span class="identifier">test_generator_attr_delim</span><span class="special">(</span><span class="string">"1.0 2.0 3.0 "</span><span class="special">,</span> <span class="special">+</span><span class="identifier">double_</span><span class="special">,</span> <span class="identifier">space</span><span class="special">,</span> <span class="identifier">v1</span><span class="special">);</span> +</pre> +<p> + </p> +<p> + A more sophisticated use case showing how to leverage the fact that plus + is failing for empty containers passed as its attribute: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">v2</span><span class="special">;</span> <span class="comment">// empty container</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"empty"</span><span class="special">,</span> <span class="special">+</span><span class="identifier">double_</span> <span class="special">|</span> <span class="string">"empty"</span><span class="special">,</span> <span class="identifier">v2</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="kleene.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../operator.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="list.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/operator/sequence.html b/libs/spirit/doc/html/spirit/karma/reference/operator/sequence.html new file mode 100755 index 0000000000..b5e5d0b976 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/operator/sequence.html @@ -0,0 +1,275 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Sequence Generator (a << b)</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="Spirit 2.5.2"> +<link rel="up" href="../operator.html" title="Generator Operators"> +<link rel="prev" href="../operator.html" title="Generator Operators"> +<link rel="next" href="alternative.html" title="Alternative Generator (a | b)"> +</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="../operator.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="alternative.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.operator.sequence"></a><a class="link" href="sequence.html" title="Sequence Generator (a << b)">Sequence + Generator (<code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> + <span class="identifier">b</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.operator.sequence.h0"></a> + <span><a name="spirit.karma.reference.operator.sequence.description"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.description">Description</a> + </h6> +<p> + Generator sequences are used to consecutively combine different, more + primitive generators. All generators in a sequence are invoked from left + to right as long as they succeed. + </p> +<h6> +<a name="spirit.karma.reference.operator.sequence.h1"></a> + <span><a name="spirit.karma.reference.operator.sequence.header"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/operator/sequence.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_sequence</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.operator.sequence.h2"></a> + <span><a name="spirit.karma.reference.operator.sequence.model_of"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.model_of">Model of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/narygenerator.html" title="NaryGenerator"><code class="computeroutput"><span class="identifier">NaryGenerator</span></code></a> + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.sequence.h3"></a> + <span><a name="spirit.karma.reference.operator.sequence.expression_semantics"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/narygenerator.html" title="NaryGenerator"><code class="computeroutput"><span class="identifier">NaryGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> + <span class="identifier">b</span></code> + </p> + </td> +<td> + <p> + The generators <code class="computeroutput"><span class="identifier">a</span></code> + and <code class="computeroutput"><span class="identifier">b</span></code> are executed + sequentially from left to right and as long as they succeed. + A failed generator stops the execution of the entire sequence + and makes the sequence fail as well. + </p> + </td> +</tr></tbody> +</table></div> +<p> + It is important to note, that sequences don't perform any buffering of + the output generated by its elements. That means that any failing sequence + might have already generated some output, which is <span class="emphasis"><em>not</em></span> + rolled back. + </p> +<div class="tip"><table border="0" summary="Tip"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../../images/tip.png"></td> +<th align="left">Tip</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The simplest way to force a sequence to behave as if it did buffering + is to wrap it into a buffering directive (see <a class="link" href="../directive/buffer.html" title="Generator Directive for Temporary Output Buffering (buffer[])"><code class="computeroutput"><span class="identifier">buffer</span></code></a>): + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">buffer</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></pre> +<p> + </p> +<p> + which will <span class="emphasis"><em>not</em></span> generate any output in case of + a failing sequence. + </p> +</td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.operator.sequence.h4"></a> + <span><a name="spirit.karma.reference.operator.sequence.attributes"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.attributes">Attributes</a> + </h6> +<p> + See <a class="link" href="../../quick_reference/compound_attribute_rules.html#spirit.karma.quick_reference.compound_attribute_rules.notation">Compound + Attribute Notation</a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">a</span> <span class="special"><<</span> + <span class="identifier">b</span></code> (sequence) + </p> + </td> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">a</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">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">tuple</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">a</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">Unused</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">A</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">b</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">B</span> +<span class="identifier">a</span><span class="special">:</span> <span class="identifier">Unused</span><span class="special">,</span> <span class="identifier">b</span><span class="special">:</span> <span class="identifier">Unused</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">Unused</span> + +<span class="identifier">a</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">A</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">vector</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="identifier">vector</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">A</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">vector</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="identifier">A</span><span class="special">,</span> <span class="identifier">b</span><span class="special">:</span> <span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></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">vector</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="identifier">vector</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">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></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">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></pre> +<p> + </p> + </td> +</tr></tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"> +<p> + The table above uses <code class="computeroutput"><span class="identifier">tuple</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> as placeholders only. + </p> +<p> + The notation <code class="computeroutput"><span class="identifier">tuple</span><span class="special"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span></code> stands for <span class="emphasis"><em>any fusion + sequence of two elements</em></span>, where <code class="computeroutput"><span class="identifier">A</span></code> + is the type of its first element and <code class="computeroutput"><span class="identifier">B</span></code> + is the type of its second element. + </p> +<p> + The notation of <code class="computeroutput"><span class="identifier">vector</span><span class="special"><</span><span class="identifier">A</span><span class="special">></span></code> stands for <span class="emphasis"><em>any STL container</em></span> + holding elements of type <code class="computeroutput"><span class="identifier">A</span></code>. + </p> +</td></tr> +</table></div> +<p> + The attribute composition and propagation rules as shown in the table + above make sequences somewhat special as they can operate in two modes + if all elements have the same attribute type: consuming fusion sequences + and consuming STL containers. The selected mode depends on the type of + the attribute supplied. + </p> +<h6> +<a name="spirit.karma.reference.operator.sequence.h5"></a> + <span><a name="spirit.karma.reference.operator.sequence.complexity"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + The overall complexity of the sequence generator is defined by the + sum of the complexities of its elements. The complexity of the sequence + itself is O(N), where N is the number of elements in the sequence. + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.operator.sequence.h6"></a> + <span><a name="spirit.karma.reference.operator.sequence.example"></a></span><a class="link" href="sequence.html#spirit.karma.reference.operator.sequence.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">double_</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of a sequence: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"1.0,2.0"</span><span class="special">,</span> <span class="identifier">double_</span> <span class="special"><<</span> <span class="char">','</span> <span class="special"><<</span> <span class="identifier">double_</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">(</span><span class="number">1.0</span><span class="special">,</span> <span class="number">2.0</span><span class="special">));</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../operator.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="alternative.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/stream.html b/libs/spirit/doc/html/spirit/karma/reference/stream.html new file mode 100755 index 0000000000..6830602c67 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/stream.html @@ -0,0 +1,61 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Stream Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="operator/not_predicate.html" title="Not-Predicate Generator (!a)"> +<link rel="next" href="stream/stream.html" title="Stream Generators (stream, wstream, etc.)"> +</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/not_predicate.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="stream/stream.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="spirit.karma.reference.stream"></a><a class="link" href="stream.html" title="Stream Generators">Stream Generators</a> +</h4></div></div></div> +<div class="toc"><dl><dt><span class="section"><a href="stream/stream.html">Stream Generators + (<code class="computeroutput"><span class="identifier">stream</span></code>, <code class="computeroutput"><span class="identifier">wstream</span></code>, etc.)</a></span></dt></dl></div> +<p> + This module includes the description of the different variants of the + <code class="computeroutput"><span class="identifier">stream</span></code> generator. It can + be used to utilize existing streaming operators (<code class="computeroutput"><span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&,</span> <span class="special">...)</span></code>) + for output generation. + </p> +<h6> +<a name="spirit.karma.reference.stream.h0"></a> + <span><a name="spirit.karma.reference.stream.header"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/stream.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_stream</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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/not_predicate.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="stream/stream.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/stream/stream.html b/libs/spirit/doc/html/spirit/karma/reference/stream/stream.html new file mode 100755 index 0000000000..2f9f2b0d33 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/stream/stream.html @@ -0,0 +1,594 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Stream Generators (stream, wstream, etc.)</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="Spirit 2.5.2"> +<link rel="up" href="../stream.html" title="Stream Generators"> +<link rel="prev" href="../stream.html" title="Stream Generators"> +<link rel="next" href="../string.html" title="String Generators"> +</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="../stream.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stream.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="../string.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.stream.stream"></a><a class="link" href="stream.html" title="Stream Generators (stream, wstream, etc.)">Stream Generators + (<code class="computeroutput"><span class="identifier">stream</span></code>, <code class="computeroutput"><span class="identifier">wstream</span></code>, etc.)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h0"></a> + <span><a name="spirit.karma.reference.stream.stream.description"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.description">Description</a> + </h6> +<p> + The <code class="computeroutput"><span class="identifier">stream_generator</span></code> + is a primitive which allows to use pre-existing standard streaming operators + for output generation integrated with <span class="emphasis"><em>Spirit.Karma</em></span>. + It provides a wrapper generator dispatching the value to output to the + stream operator of the corresponding type. Any value <code class="computeroutput"><span class="identifier">a</span></code> + to be formatted using the <code class="computeroutput"><span class="identifier">stream_generator</span></code> + will result in invoking the standard streaming operator for its type + <code class="computeroutput"><span class="identifier">A</span></code>, for instance: + </p> +<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&,</span> <span class="identifier">A</span> <span class="keyword">const</span><span class="special">&);</span> +</pre> +<h6> +<a name="spirit.karma.reference.stream.stream.h1"></a> + <span><a name="spirit.karma.reference.stream.stream.header"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/stream.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_stream</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.stream.stream.h2"></a> + <span><a name="spirit.karma.reference.stream.stream.namespace"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">stream</span> <span class="comment">// + alias: boost::spirit::karma::stream</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">wstream</span> <span class="comment">// + alias: boost::spirit::karma::wstream</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h3"></a> + <span><a name="spirit.karma.reference.stream.stream.synopsis"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Char</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">stream_generator</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.stream.stream.h4"></a> + <span><a name="spirit.karma.reference.stream.stream.template_parameters"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody><tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Char</span></code> + </p> + </td> +<td> + <p> + The character type to use to generate the output. This type + will be used while assigning the generated characters to the + underlying output iterator. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">char</span></code> + </p> + </td> +</tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h5"></a> + <span><a name="spirit.karma.reference.stream.stream.model_of"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt> +<dd><p> + A variable instance of any type with a defined matching streaming + <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> + or a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to any type with a defined matching + streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.stream.stream.h6"></a> + <span><a name="spirit.karma.reference.stream.stream.expression_semantics"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream</span></code> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + mandatory attribute. The output emitted by this operator will + be the result of the <code class="computeroutput"><span class="identifier">stream</span></code> + generator. This generator never fails (unless the underlying + output stream reports an error). The character type of the + I/O ostream is assumed to be <code class="computeroutput"><span class="keyword">char</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + immediate value <code class="computeroutput"><span class="identifier">s</span></code>. + The output emitted by this operator will be the result of the + <code class="computeroutput"><span class="identifier">stream</span></code> generator. + This generator never fails (unless the underlying output stream + reports an error). The character type of the I/O ostream is + assumed to be <code class="computeroutput"><span class="keyword">char</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">wstream</span></code> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + mandatory attribute. The output emitted by this operator will + be the result of the <code class="computeroutput"><span class="identifier">stream</span></code> + generator. This generator never fails (unless the underlying + output stream reports an error). The character type of the + I/O ostream is assumed to be <code class="computeroutput"><span class="keyword">wchar_t</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">wstream</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + immediate value <code class="computeroutput"><span class="identifier">s</span></code>. + The output emitted by this operator will be the result of the + <code class="computeroutput"><span class="identifier">stream</span></code> generator. + This generator never fails (unless the underlying output stream + reports an error). The character type of the I/O ostream is + assumed to be <code class="computeroutput"><span class="keyword">wchar_t</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + All generators listed in the table above are predefined specializations + of the <code class="computeroutput"><span class="identifier">stream_generator</span><span class="special"><</span><span class="identifier">Char</span><span class="special">></span></code> basic stream generator type described + below. It is possible to directly use this type to create stream generators + using an arbitrary underlying character type. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">stream_generator</span><span class="special"><</span> + <span class="identifier">Char</span> +<span class="special">>()</span></pre> +<p> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + mandatory attribute. The output emitted by this operator will + be the result of the <code class="computeroutput"><span class="identifier">stream</span></code> + generator. This generator never fails (unless the underlying + output stream reports an error). The character type of the + I/O ostream is assumed to be <code class="computeroutput"><span class="identifier">Char</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> +</p> +<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">stream_generator</span><span class="special"><</span> + <span class="identifier">Char</span> +<span class="special">>()(</span><span class="identifier">s</span><span class="special">)</span></pre> +<p> + </p> + </td> +<td> + <p> + Call the streaming <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> for the type of the + immediate value <code class="computeroutput"><span class="identifier">s</span></code>. + The output emitted by this operator will be the result of the + <code class="computeroutput"><span class="identifier">stream</span></code> generator. + This generator never fails (unless the underlying output stream + reports an error). The character type of the I/O ostream is + assumed to be <code class="computeroutput"><span class="identifier">Char</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h7"></a> + <span><a name="spirit.karma.reference.stream.stream.additional_requirements"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.additional_requirements">Additional + Requirements</a> + </h6> +<p> + All of the stream generators listed above require the type of the value + to generate output for (either the immediate value or the associated + attribute) to implement a streaming operator conforming to the usual + I/O streams conventions (where <code class="computeroutput"><span class="identifier">attribute_type</span></code> + is the type of the value to generate output for): + </p> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Ostream</span><span class="special">></span> +<span class="identifier">Ostream</span><span class="special">&</span> <span class="keyword">operator</span><span class="special"><<</span> <span class="special">(</span><span class="identifier">Ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">attribute_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">)</span> +<span class="special">{</span> + <span class="comment">// type specific output generation</span> + <span class="keyword">return</span> <span class="identifier">os</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + This operator will be called by the stream generators to gather the output + for the attribute of type <code class="computeroutput"><span class="identifier">attribute_type</span></code>. + All data streamed into the given <code class="computeroutput"><span class="identifier">Ostream</span></code> + will end up being generated by the corresponding stream generator instance. + </p> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + If the <code class="computeroutput"><span class="identifier">stream</span></code> generator + is invoked inside a <a class="link" href="../generate_api/stream_api.html" title="Stream Based Generator API"><code class="computeroutput"><span class="identifier">format</span></code></a> (or <a class="link" href="../generate_api/stream_api.html" title="Stream Based Generator API"><code class="computeroutput"><span class="identifier">format_delimited</span></code></a>) stream manipulator + the <code class="computeroutput"><span class="identifier">Ostream</span></code> passed + to the <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<()</span></code> + will have registered (imbued) the same standard locale instance as + the stream the <a class="link" href="../generate_api/stream_api.html" title="Stream Based Generator API"><code class="computeroutput"><span class="identifier">format</span></code></a> (or <a class="link" href="../generate_api/stream_api.html" title="Stream Based Generator API"><code class="computeroutput"><span class="identifier">format_delimited</span></code></a>) manipulator + has been used with. This ensures all facets registered (imbued) with + the original I/O stream object are used during output generation. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h8"></a> + <span><a name="spirit.karma.reference.stream.stream.attributes"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">hold_any</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">wstream</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">whold_any</span></code>, + attribute is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">wstream</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream_generator</span><span class="special"><</span><span class="identifier">Char</span><span class="special">>()</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">basic_hold_any</span><span class="special"><</span><span class="identifier">Char</span><span class="special">></span></code>, attribute is mandatory + (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">stream_generator</span><span class="special"><</span><span class="identifier">Char</span><span class="special">>()(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="important"><table border="0" summary="Important"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../images/important.png"></td> +<th align="left">Important</th> +</tr> +<tr><td align="left" valign="top"><p> + The attribute type <code class="computeroutput"><span class="identifier">hold_any</span></code> + exposed by some of the stream generators is semantically and syntactically + equivalent to the type implemented by <a href="../../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. + It has been added to <span class="emphasis"><em>Spirit</em></span> as it has better a + performance and a smaller footprint if compared to <a href="../../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. + </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="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">Attrib</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">Attrib</span></code> and emit the value stored + in the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h9"></a> + <span><a name="spirit.karma.reference.stream.stream.complexity"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where N is the number of characters emitted by the stream generator + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.stream.stream.h10"></a> + <span><a name="spirit.karma.reference.stream.stream.example"></a></span><a class="link" href="stream.html#spirit.karma.reference.stream.stream.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">stream</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + And a class definition used in the examples: + </p> +<p> +</p> +<pre class="programlisting"><span class="comment">// a simple complex number representation z = a + bi</span> +<span class="keyword">struct</span> <span class="identifier">complex</span> +<span class="special">{</span> + <span class="identifier">complex</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">double</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">a</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span> + <span class="special">{}</span> + + <span class="keyword">double</span> <span class="identifier">a</span><span class="special">;</span> + <span class="keyword">double</span> <span class="identifier">b</span><span class="special">;</span> +<span class="special">};</span> +</pre> +<p> + </p> +<p> +</p> +<pre class="programlisting"><span class="comment">// define streaming operator for the type complex</span> +<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> +<span class="keyword">operator</span><span class="special"><<</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">complex</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">z</span><span class="special">)</span> +<span class="special">{</span> + <span class="identifier">os</span> <span class="special"><<</span> <span class="string">"{"</span> <span class="special"><<</span> <span class="identifier">z</span><span class="special">.</span><span class="identifier">a</span> <span class="special"><<</span> <span class="string">","</span> <span class="special"><<</span> <span class="identifier">z</span><span class="special">.</span><span class="identifier">b</span> <span class="special"><<</span> <span class="string">"}"</span><span class="special">;</span> + <span class="keyword">return</span> <span class="identifier">os</span><span class="special">;</span> +<span class="special">}</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">stream</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">stream</span><span class="special">,</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">stream</span><span class="special">(</span><span class="string">"abc"</span><span class="special">));</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">stream</span><span class="special">,</span> <span class="identifier">complex</span><span class="special">(</span><span class="number">1.2</span><span class="special">,</span> <span class="number">2.4</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">stream</span><span class="special">(</span><span class="identifier">complex</span><span class="special">(</span><span class="number">1.2</span><span class="special">,</span> <span class="number">2.4</span><span class="special">)));</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../stream.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../stream.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="../string.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/string.html b/libs/spirit/doc/html/spirit/karma/reference/string.html new file mode 100755 index 0000000000..cad96e06ec --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/string.html @@ -0,0 +1,66 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>String Generators</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="Spirit 2.5.2"> +<link rel="up" href="../reference.html" title="Reference"> +<link rel="prev" href="stream/stream.html" title="Stream Generators (stream, wstream, etc.)"> +<link rel="next" href="string/string.html" title="String Generators (string, lit)"> +</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="stream/stream.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="string/string.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="spirit.karma.reference.string"></a><a class="link" href="string.html" title="String Generators">String Generators</a> +</h4></div></div></div> +<div class="toc"><dl> +<dt><span class="section"><a href="string/string.html">String Generators + (<code class="computeroutput"><span class="identifier">string</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a></span></dt> +<dt><span class="section"><a href="string/symbols.html">Symbols Generator + (<code class="computeroutput"><span class="identifier">symbols</span></code>)</a></span></dt> +</dl></div> +<p> + This module includes different string oriented generators allowing to output + character sequences. It includes the <code class="computeroutput"><span class="identifier">symbols</span></code> + generator and variants of the <code class="computeroutput"><span class="identifier">string</span></code> + generator. + </p> +<h6> +<a name="spirit.karma.reference.string.h0"></a> + <span><a name="spirit.karma.reference.string.module_header"></a></span><a class="link" href="string.html#spirit.karma.reference.string.module_header">Module + Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/string.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="stream/stream.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="string/string.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/string/string.html b/libs/spirit/doc/html/spirit/karma/reference/string/string.html new file mode 100755 index 0000000000..87bae5e4b9 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/string/string.html @@ -0,0 +1,413 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>String Generators (string, lit)</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="Spirit 2.5.2"> +<link rel="up" href="../string.html" title="String Generators"> +<link rel="prev" href="../string.html" title="String Generators"> +<link rel="next" href="symbols.html" title="Symbols Generator (symbols)"> +</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="../string.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string.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="symbols.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.string.string"></a><a class="link" href="string.html" title="String Generators (string, lit)">String Generators + (<code class="computeroutput"><span class="identifier">string</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.string.string.h0"></a> + <span><a name="spirit.karma.reference.string.string.description"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.description">Description</a> + </h6> +<p> + The string generators described in this section are: + </p> +<p> + The <code class="computeroutput"><span class="identifier">string</span></code> generator + emits a string of characters. The <code class="computeroutput"><span class="identifier">string</span></code> + generator is implicitly verbatim: the <code class="computeroutput"><span class="identifier">delimit</span></code> + parser is not applied in between characters of the string. The <code class="computeroutput"><span class="identifier">string</span></code> generator has an associated + <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. This is needed when doing basic operations + such as forcing lower or upper case. Examples: + </p> +<pre class="programlisting"><span class="identifier">string</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">)</span> +<span class="identifier">string</span><span class="special">(</span><span class="identifier">L</span><span class="string">"Hello"</span><span class="special">)</span> +<span class="identifier">string</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span> <span class="comment">// s is a std::string</span> +</pre> +<p> + <code class="computeroutput"><span class="identifier">lit</span></code>, like <code class="computeroutput"><span class="identifier">string</span></code>, also emits a string of characters. + The main difference is that <code class="computeroutput"><span class="identifier">lit</span></code> + does not consumes an attribute. A plain string like <code class="computeroutput"><span class="string">"hello"</span></code> + or a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code> is equivalent to a <code class="computeroutput"><span class="identifier">lit</span></code>. Examples: + </p> +<pre class="programlisting"><span class="string">"Hello"</span> +<span class="identifier">lit</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">)</span> +<span class="identifier">lit</span><span class="special">(</span><span class="identifier">L</span><span class="string">"Hello"</span><span class="special">)</span> +<span class="identifier">lit</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span> <span class="comment">// s is a std::string</span> +</pre> +<h6> +<a name="spirit.karma.reference.string.string.h1"></a> + <span><a name="spirit.karma.reference.string.string.header"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/string/lit.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.string.string.h2"></a> + <span><a name="spirit.karma.reference.string.string.namespace"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias: + boost::spirit::karma::lit</span></code> + </p> + </td></tr> +<tr><td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">string</span></code> + </p> + </td></tr> +</tbody> +</table></div> +<p> + In the table above, <code class="computeroutput"><span class="identifier">ns</span></code> + represents a <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a> used by the corresponding string generator. + </p> +<h6> +<a name="spirit.karma.reference.string.string.h3"></a> + <span><a name="spirit.karma.reference.string.string.model_of"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt> +<dd><p> + Character-class specific string (See Character Class Types), or + a <a class="link" href="../basics.html#spirit.karma.reference.basics.lazy_argument">Lazy + Argument</a> that evaluates to a character-class specific string + value + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">S</span></code></span></dt> +<dd><p> + The type of a character-class specific string <code class="computeroutput"><span class="identifier">s</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt> +<dd><p> + A <a class="link" href="../basics.html#spirit.karma.reference.basics.character_encoding_namespace">Character + Encoding Namespace</a>. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.string.string.h4"></a> + <span><a name="spirit.karma.reference.string.string.expression_semantics"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Description + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">s</span></code> + </p> + </td> +<td> + <p> + Generate the string literal <code class="computeroutput"><span class="identifier">s</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the string literal <code class="computeroutput"><span class="identifier">s</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">string</span></code> + </p> + </td> +<td> + <p> + Generate the string provided by a mandatory attribute interpreted + in the character set defined by <code class="computeroutput"><span class="identifier">ns</span></code>. + This generator never fails (unless the underlying output stream + reports an error). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Generate the string <code class="computeroutput"><span class="identifier">s</span></code> + as provided by the immediate literal value the generator is + initialized from. If this generator has an associated attribute + it succeeds only if the attribute is equal to the immediate + literal (unless the underlying output stream reports an error). + Otherwise this generator fails and does not generate any output. + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The generators <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">string</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> can be initialized either using a + string literal value (i.e. <code class="computeroutput"><span class="string">"abc"</span></code>), + or using a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special"><</span><span class="identifier">char_type</span><span class="special">,</span> + <span class="special">...></span></code>, where <code class="computeroutput"><span class="identifier">char_type</span></code> is the required value type + of the underlying character sequence. + </p></td></tr> +</table></div> +<div class="caution"><table border="0" summary="Caution"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../images/caution.png"></td> +<th align="left">Caution</th> +</tr> +<tr><td align="left" valign="top"><p> + The generator <code class="computeroutput"><span class="identifier">string</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> up to version 2.4.1 of Spirit has + an undocumented feature. Given argument <code class="computeroutput"><span class="identifier">s</span></code> + generator succeds as long as <code class="computeroutput"><span class="identifier">s</span></code> + is a prefix of given attribute. This problem has been fixed in Spirit + V2.4.2. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.string.string.h5"></a> + <span><a name="spirit.karma.reference.string.string.attributes"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.attributes">Attributes</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Attribute + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">s</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">string</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">S</span></code>, attribute + is mandatory (otherwise compilation will fail) + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">S</span></code>, attribute + is optional, if it is supplied, the generator compares the + attribute with <code class="computeroutput"><span class="identifier">s</span></code> + and succeeds only if both are equal, failing otherwise + </p> + </td> +</tr> +</tbody> +</table></div> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + In addition to their usual attribute of type <code class="computeroutput"><span class="identifier">S</span></code> + all listed generators accept an instance of a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><</span><span class="identifier">S</span><span class="special">></span></code> as well. If the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> is initialized (holds a value) + the generators behave as if their attribute was an instance of <code class="computeroutput"><span class="identifier">S</span></code> and emit the value stored in the + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code>. + Otherwise the generators will fail. + </p></td></tr> +</table></div> +<h6> +<a name="spirit.karma.reference.string.string.h6"></a> + <span><a name="spirit.karma.reference.string.string.complexity"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.complexity">Complexity</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + O(N), where N is the number of characters emitted by the string generator + </p></blockquote></div> +<h6> +<a name="spirit.karma.reference.string.string.h7"></a> + <span><a name="spirit.karma.reference.string.string.example"></a></span><a class="link" href="string.html#spirit.karma.reference.string.string.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">lit</span><span class="special">;</span> +<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">ascii</span><span class="special">::</span><span class="identifier">string</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">string</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="string">"abc"</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">lit</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="string">"abc"</span><span class="special">)));</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">string</span><span class="special">,</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">string</span><span class="special">(</span><span class="string">"abc"</span><span class="special">));</span> +<span class="identifier">test_generator</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">string</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="string">"abc"</span><span class="special">)));</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"abc"</span><span class="special">,</span> <span class="identifier">string</span><span class="special">(</span><span class="string">"abc"</span><span class="special">),</span> <span class="string">"abc"</span><span class="special">);</span> +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">string</span><span class="special">(</span><span class="string">"abc"</span><span class="special">),</span> <span class="string">"cba"</span><span class="special">);</span> <span class="comment">// fails (as "abc" != "cba")</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="../string.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string.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="symbols.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> diff --git a/libs/spirit/doc/html/spirit/karma/reference/string/symbols.html b/libs/spirit/doc/html/spirit/karma/reference/string/symbols.html new file mode 100755 index 0000000000..f9dcf38455 --- /dev/null +++ b/libs/spirit/doc/html/spirit/karma/reference/string/symbols.html @@ -0,0 +1,737 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Symbols Generator (symbols)</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="Spirit 2.5.2"> +<link rel="up" href="../string.html" title="String Generators"> +<link rel="prev" href="string.html" title="String Generators (string, lit)"> +<link rel="next" href="../../performance_measurements.html" title="Performance Measurements"> +</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="string.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string.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="../../performance_measurements.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +<div class="section"> +<div class="titlepage"><div><div><h5 class="title"> +<a name="spirit.karma.reference.string.symbols"></a><a class="link" href="symbols.html" title="Symbols Generator (symbols)">Symbols Generator + (<code class="computeroutput"><span class="identifier">symbols</span></code>)</a> +</h5></div></div></div> +<h6> +<a name="spirit.karma.reference.string.symbols.h0"></a> + <span><a name="spirit.karma.reference.string.symbols.description"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.description">Description</a> + </h6> +<p> + The class <code class="computeroutput"><span class="identifier">symbols</span></code> implements + an 'inverse' symbol table: an associative container (or map) of key-value + pairs where the values are (most of the time) strings. It maps the value + to be generated (the key) to any other value which will be emitted instead + of the original key. + </p> +<p> + The Karma symbol table class <code class="computeroutput"><span class="identifier">symbols</span></code> + is-a generator, an instance of which may be used anywhere in the grammar + specification. It is an example of a dynamic generator. A dynamic generator + is characterized by its ability to modify its behavior at run time. Initially, + an empty symbols object will emit nothing. At any time, symbols may be + added, thus, dynamically altering its behavior. + </p> +<h6> +<a name="spirit.karma.reference.string.symbols.h1"></a> + <span><a name="spirit.karma.reference.string.symbols.header"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.header">Header</a> + </h6> +<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/karma/string/symbols.hpp></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma_symbols</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +</pre> +<p> + Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>. + </p> +<h6> +<a name="spirit.karma.reference.string.symbols.h2"></a> + <span><a name="spirit.karma.reference.string.symbols.namespace"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.namespace">Namespace</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup><col></colgroup> +<thead><tr><th> + <p> + Name + </p> + </th></tr></thead> +<tbody><tr><td> + <p> + <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">symbols</span></code> + </p> + </td></tr></tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.string.symbols.h3"></a> + <span><a name="spirit.karma.reference.string.symbols.synopsis"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.synopsis">Synopsis</a> + </h6> +<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Attrib</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lookup</span> + <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CharEncoding</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">></span> +<span class="keyword">struct</span> <span class="identifier">symbols</span><span class="special">;</span> +</pre> +<h6> +<a name="spirit.karma.reference.string.symbols.h4"></a> + <span><a name="spirit.karma.reference.string.symbols.template_parameters"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.template_parameters">Template + parameters</a> + </h6> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Parameter + </p> + </th> +<th> + <p> + Description + </p> + </th> +<th> + <p> + Default + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Attrib</span></code> + </p> + </td> +<td> + <p> + The type of the original attribute to be used as the key into + the symbol generator (the symbol). + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="keyword">char</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">T</span></code> + </p> + </td> +<td> + <p> + The data type associated with each key. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Lookup</span></code> + </p> + </td> +<td> + <p> + The symbol search implementation + </p> + </td> +<td> + <p> + if T is <code class="computeroutput"><span class="identifier">unused_type</span></code>, + <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">></span></code>, + and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">,</span> + <span class="identifier">T</span><span class="special">></span></code> + otherwise + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">CharEncoding</span></code> + </p> + </td> +<td> + <p> + Used for character set selection, normally not used by end + user. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Tag</span></code> + </p> + </td> +<td> + <p> + Used for character set selection, normally not used by end + user. + </p> + </td> +<td> + <p> + <code class="computeroutput"><span class="identifier">unused_type</span></code> + </p> + </td> +</tr> +</tbody> +</table></div> +<h6> +<a name="spirit.karma.reference.string.symbols.h5"></a> + <span><a name="spirit.karma.reference.string.symbols.model_of"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.model_of">Model + of</a> + </h6> +<div class="blockquote"><blockquote class="blockquote"><p> + <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a> + </p></blockquote></div> +<div class="variablelist"> +<p class="title"><b>Notation</b></p> +<dl> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Sym</span></code></span></dt> +<dd><p> + A <code class="computeroutput"><span class="identifier">symbols</span></code> type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">Attrib</span></code></span></dt> +<dd><p> + An attribute type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">T</span></code></span></dt> +<dd><p> + A data type. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">sym</span></code>, <code class="computeroutput"><span class="identifier">sym2</span></code></span></dt> +<dd><p> + <code class="computeroutput"><span class="identifier">symbols</span></code> objects. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">sseq</span></code></span></dt> +<dd><p> + An <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of strings. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">dseq</span></code></span></dt> +<dd><p> + An <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of data with <code class="computeroutput"><span class="identifier">value_type</span></code> + <code class="computeroutput"><span class="identifier">T</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code></span></dt> +<dd><p> + A <a class="link" href="../../../qi/reference/basics.html#spirit.qi.reference.basics.string">String</a>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">d1</span></code>...<code class="computeroutput"><span class="identifier">dN</span></code></span></dt> +<dd><p> + Objects of type <code class="computeroutput"><span class="identifier">T</span></code>. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code></span></dt> +<dd><p> + A callable function or function object. + </p></dd> +<dt><span class="term"><code class="computeroutput"><span class="identifier">f</span></code>, <code class="computeroutput"><span class="identifier">l</span></code></span></dt> +<dd><p> + <code class="computeroutput"><span class="identifier">ForwardIterator</span></code> + first/last pair. + </p></dd> +</dl> +</div> +<h6> +<a name="spirit.karma.reference.string.symbols.h6"></a> + <span><a name="spirit.karma.reference.string.symbols.expression_semantics"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.expression_semantics">Expression + Semantics</a> + </h6> +<p> + Semantics of an expression is defined only where it differs from, or + is not defined in <a class="link" href="../generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. + </p> +<div class="informaltable"><table class="table"> +<colgroup> +<col> +<col> +</colgroup> +<thead><tr> +<th> + <p> + Expression + </p> + </th> +<th> + <p> + Semantics + </p> + </th> +</tr></thead> +<tbody> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Construct an empty symbols object instance named <code class="computeroutput"><span class="string">"symbols"</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Construct an empty symbols object instance named <code class="computeroutput"><span class="identifier">name</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">sym2</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Copy construct a symbols from <code class="computeroutput"><span class="identifier">sym2</span></code> + (Another <code class="computeroutput"><span class="identifier">symbols</span></code> + object). + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">sseq</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Construct symbols from <code class="computeroutput"><span class="identifier">sseq</span></code> + (An <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of symbols of type <code class="computeroutput"><span class="identifier">Attrib</span></code>) + named <code class="computeroutput"><span class="string">"symbols"</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">sseq</span><span class="special">,</span> + <span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Construct symbols from <code class="computeroutput"><span class="identifier">sseq</span></code> + (an <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of symbols of type <code class="computeroutput"><span class="identifier">Attrib</span></code>) + named <code class="computeroutput"><span class="identifier">name</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">sseq</span><span class="special">,</span> + <span class="identifier">dseq</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Construct symbols from <code class="computeroutput"><span class="identifier">sseq</span></code> + and <code class="computeroutput"><span class="identifier">dseq</span></code> (An + <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of symbols of type <code class="computeroutput"><span class="identifier">Attrib</span></code> + and an <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> + container of data with <code class="computeroutput"><span class="identifier">value_type</span></code> + <code class="computeroutput"><span class="identifier">T</span></code>) which is + named <code class="computeroutput"><span class="string">"symbols"</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">Sym</span><span class="special">(</span><span class="identifier">sseq</span><span class="special">,</span> + <span class="identifier">dseq</span><span class="special">,</span> + <span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Construct symbols from <code class="computeroutput"><span class="identifier">sseq</span></code> + and <code class="computeroutput"><span class="identifier">dseq</span></code> (An + <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> container + of symbols of type <code class="computeroutput"><span class="identifier">Attrib</span></code> + and an <a href="http://www.sgi.com/tech/stl/" target="_top">STL</a> + container of data with <code class="computeroutput"><span class="identifier">value_type</span></code> + <code class="computeroutput"><span class="identifier">T</span></code>) which is + named <code class="computeroutput"><span class="identifier">name</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span> <span class="special">=</span> + <span class="identifier">sym2</span></code> + </p> + </td> +<td> + <p> + Assign <code class="computeroutput"><span class="identifier">sym2</span></code> + to <code class="computeroutput"><span class="identifier">sym</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span> <span class="special">=</span> + <span class="identifier">s1</span><span class="special">,</span> + <span class="identifier">s2</span><span class="special">,</span> + <span class="special">...,</span> <span class="identifier">sN</span></code> + </p> + </td> +<td> + <p> + Assign one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) to <code class="computeroutput"><span class="identifier">sym</span></code>. + The associated data values of type <code class="computeroutput"><span class="identifier">T</span></code> + are default constructed. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span> <span class="special">+=</span> + <span class="identifier">s1</span><span class="special">,</span> + <span class="identifier">s2</span><span class="special">,</span> + <span class="special">...,</span> <span class="identifier">sN</span></code> + </p> + </td> +<td> + <p> + Add one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) to <code class="computeroutput"><span class="identifier">sym</span></code>. + The associated data values of type <code class="computeroutput"><span class="identifier">T</span></code> + are default constructed. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">s1</span><span class="special">)(</span><span class="identifier">s2</span><span class="special">)...(</span><span class="identifier">sN</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Add one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) to <code class="computeroutput"><span class="identifier">sym</span></code>. + The associated data values of type <code class="computeroutput"><span class="identifier">T</span></code> + are default constructed. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span><span class="identifier">s1</span><span class="special">,</span> + <span class="identifier">d1</span><span class="special">)(</span><span class="identifier">s2</span><span class="special">,</span> + <span class="identifier">d2</span><span class="special">)...(</span><span class="identifier">sN</span><span class="special">,</span> + <span class="identifier">dN</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Add one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) with associated data + (<code class="computeroutput"><span class="identifier">d1</span></code>...<code class="computeroutput"><span class="identifier">dN</span></code>) to <code class="computeroutput"><span class="identifier">sym</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span> <span class="special">-=</span> + <span class="identifier">s1</span><span class="special">,</span> + <span class="identifier">s2</span><span class="special">,</span> + <span class="special">...,</span> <span class="identifier">sN</span></code> + </p> + </td> +<td> + <p> + Remove one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) from <code class="computeroutput"><span class="identifier">sym</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">remove</span><span class="special">(</span><span class="identifier">s1</span><span class="special">)(</span><span class="identifier">s2</span><span class="special">)...(</span><span class="identifier">sN</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Remove one or more symbols (<code class="computeroutput"><span class="identifier">s1</span></code>...<code class="computeroutput"><span class="identifier">sN</span></code>) from <code class="computeroutput"><span class="identifier">sym</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">clear</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Erase all of the symbols in <code class="computeroutput"><span class="identifier">sym</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">at</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Return a reference to the object associated with symbol, <code class="computeroutput"><span class="identifier">s</span></code>. If <code class="computeroutput"><span class="identifier">sym</span></code> + does not already contain such an object, <code class="computeroutput"><span class="identifier">at</span></code> + inserts the default object <code class="computeroutput"><span class="identifier">T</span><span class="special">()</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">find</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Return a pointer to the object associated with symbol, <code class="computeroutput"><span class="identifier">s</span></code>. If <code class="computeroutput"><span class="identifier">sym</span></code> + does not already contain such an object, <code class="computeroutput"><span class="identifier">find</span></code> + returns a null pointer. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">f</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + For each symbol in <code class="computeroutput"><span class="identifier">sym</span></code> + <code class="computeroutput"><span class="identifier">s</span></code> invoke <code class="computeroutput"><span class="identifier">f</span><span class="special">(</span><span class="keyword">typename</span> <span class="identifier">Lookup</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">)</span></code>. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">name</span><span class="special">()</span></code> + </p> + </td> +<td> + <p> + Retrieve the current name of the symbols object. + </p> + </td> +</tr> +<tr> +<td> + <p> + <code class="computeroutput"><span class="identifier">sym</span><span class="special">.</span><span class="identifier">name</span><span class="special">(</span><span class="identifier">name</span><span class="special">)</span></code> + </p> + </td> +<td> + <p> + Set the current name of the symbols object to be <code class="computeroutput"><span class="identifier">name</span></code>. + </p> + </td> +</tr> +</tbody> +</table></div> +<p> + The symbols generator uses the supplied attribute as the key to be looked + up in the internal associative container. If the key exists the generator + emits the associated value and succeeds (unless the underlying output + stream reports an error). If the value type stored in the symbol generator + is <code class="computeroutput"><span class="identifier">unused_type</span></code> it will + emit the key instead. If the key does not exist the generator fails while + not emitting anything. + </p> +<h6> +<a name="spirit.karma.reference.string.symbols.h7"></a> + <span><a name="spirit.karma.reference.string.symbols.attributes"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.attributes">Attributes</a> + </h6> +<p> + The attribute of <code class="computeroutput"><span class="identifier">symbol</span><span class="special"><</span><span class="identifier">Attrib</span><span class="special">,</span> <span class="identifier">T</span><span class="special">></span></code> is <code class="computeroutput"><span class="identifier">Attrib</span></code>. + </p> +<p> + If the supplied attribute is a <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence, then the symbol table generator will use the first element + of that <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence as the key to be used for lookup. The type of that first element + needs to be convertible to <code class="computeroutput"><span class="identifier">Attrib</span></code>. + In this case the second element of the <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence is used as the attribute while calling a generator derived from + the value stored in the symbol table for the found entry. + </p> +<p> + If the supplied attribute is a container type (<a class="link" href="../../../advanced/customize/is_container.html" title="Determine if a Type Should be Treated as a Container (Qi and Karma)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">is_container</span></code></a> resolves to <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>), then the symbol table generator + will use the first element stored in that container as the key to be + used for lookup. The <code class="computeroutput"><span class="identifier">value_type</span></code> + (returned by <a class="link" href="../../../advanced/customize/store_value/container_value.html" title="Determine the Type to be Stored in a Container (Qi)"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">container_value</span></code></a>) has to be convertible + to <code class="computeroutput"><span class="identifier">Attrib</span></code>. In this case + the second element stored in that container is used as the attribute + while calling a generator derived from the value stored in the symbol + table for the found entry. + </p> +<p> + If the supplied attribute is not a <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence and not a container type, the supplied attribute is directly + used as the key for item lookup. The attribute is used as the attribute + while calling a generator derived from the value stored in the symbol + table for the found entry. + </p> +<p> + In any case, because the supplied key (i.e. either the first element + of the <a href="../../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> + sequence, the first container element, or the attribute otherwise) is + passed as the attribute to a generator derived from the value stored + in the symbol table for the found entry, the symbol table may store generators, + which will produce output based on that value. For instance: + </p> +<pre class="programlisting"><span class="comment">// The symbol table maps a single character key to a rule<></span> +<span class="comment">// The rule<> exposes an attribute of char as well</span> +<span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="keyword">char</span><span class="special">()></span> <span class="identifier">r1</span> <span class="special">=</span> <span class="identifier">char_</span><span class="special">;</span> + +<span class="identifier">symbols</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">rule</span><span class="special"><</span><span class="identifier">output_iterator_type</span><span class="special">,</span> <span class="keyword">char</span><span class="special">()></span> <span class="special">></span> <span class="identifier">sym</span><span class="special">;</span> +<span class="identifier">sym</span><span class="special">.</span><span class="identifier">add</span> + <span class="special">(</span><span class="char">'j'</span><span class="special">,</span> <span class="identifier">r1</span><span class="special">.</span><span class="identifier">alias</span><span class="special">())</span> + <span class="special">(</span><span class="char">'h'</span><span class="special">,</span> <span class="identifier">r1</span><span class="special">.</span><span class="identifier">alias</span><span class="special">())</span> + <span class="special">(</span><span class="char">'t'</span><span class="special">,</span> <span class="identifier">r1</span><span class="special">.</span><span class="identifier">alias</span><span class="special">())</span> + <span class="special">(</span><span class="char">'k'</span><span class="special">,</span> <span class="identifier">r1</span><span class="special">.</span><span class="identifier">alias</span><span class="special">())</span> +<span class="special">;</span> + +<span class="comment">// Supplying a fusion vector as the attribute will use the first element</span> +<span class="comment">// (the 'j') as the key to be looked up, while the second element (the 'J') </span> +<span class="comment">// is passed on as the attribute to the rule<> stored in the symbol table. </span> +<span class="comment">// Consequently, the example generates a single 'J'.</span> +<span class="identifier">BOOST_ASSERT</span><span class="special">(</span><span class="identifier">test</span><span class="special">(</span><span class="string">"J"</span><span class="special">,</span> <span class="identifier">sym</span><span class="special">,</span> <span class="identifier">make_vector</span><span class="special">(</span><span class="char">'j'</span><span class="special">,</span> <span class="char">'J'</span><span class="special">)));</span> +</pre> +<h6> +<a name="spirit.karma.reference.string.symbols.h8"></a> + <span><a name="spirit.karma.reference.string.symbols.complexity"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.complexity">Complexity</a> + </h6> +<p> + The default implementation uses a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special"><></span></code> or a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span><span class="special"><></span></code> with a complexity of: + </p> +<div class="blockquote"><blockquote class="blockquote"><p> + O(log n) + </p></blockquote></div> +<p> + Where n is the number of stored symbols. + </p> +<h6> +<a name="spirit.karma.reference.string.symbols.h9"></a> + <span><a name="spirit.karma.reference.string.symbols.example"></a></span><a class="link" href="symbols.html#spirit.karma.reference.string.symbols.example">Example</a> + </h6> +<div class="note"><table border="0" summary="Note"> +<tr> +<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td> +<th align="left">Note</th> +</tr> +<tr><td align="left" valign="top"><p> + The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.karma.reference.basics.examples">Basics Examples</a> + section. + </p></td></tr> +</table></div> +<p> + Some includes: + </p> +<p> +</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">karma</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</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">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</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">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">std_pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> +<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> +</pre> +<p> + </p> +<p> + Some using declarations: + </p> +<p> +</p> +<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">karma</span><span class="special">::</span><span class="identifier">symbols</span><span class="special">;</span> +</pre> +<p> + </p> +<p> + Basic usage of <code class="computeroutput"><span class="identifier">symbol</span></code> + generators: + </p> +<p> +</p> +<pre class="programlisting"><span class="identifier">symbols</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="keyword">char</span> <span class="keyword">const</span><span class="special">*></span> <span class="identifier">sym</span><span class="special">;</span> + +<span class="identifier">sym</span><span class="special">.</span><span class="identifier">add</span> + <span class="special">(</span><span class="char">'a'</span><span class="special">,</span> <span class="string">"Apple"</span><span class="special">)</span> + <span class="special">(</span><span class="char">'b'</span><span class="special">,</span> <span class="string">"Banana"</span><span class="special">)</span> + <span class="special">(</span><span class="char">'o'</span><span class="special">,</span> <span class="string">"Orange"</span><span class="special">)</span> +<span class="special">;</span> + +<span class="identifier">test_generator_attr</span><span class="special">(</span><span class="string">"Banana"</span><span class="special">,</span> <span class="identifier">sym</span><span class="special">,</span> <span class="char">'b'</span><span class="special">);</span> +</pre> +<p> + </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 © 2001-2011 Joel de Guzman, Hartmut Kaiser<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="string.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../string.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="../../performance_measurements.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> +</div> +</body> +</html> |