| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
| <title>Real Numbers (float_, double_, etc.)</title> |
| <link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.75.0"> |
| <link rel="home" href="../../../../index.html" title="Spirit 2.4.1"> |
| <link rel="up" href="../numeric.html" title="Numeric"> |
| <link rel="prev" href="int.html" title="Signed Integers (int_, etc.)"> |
| <link rel="next" href="boolean.html" title="Boolean Parser (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="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.qi.reference.numeric.real"></a><a class="link" href="real.html" title="Real Numbers (float_, double_, etc.)">Real Numbers (<code class="computeroutput"><span class="identifier">float_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, |
| etc.)</a> |
| </h5></div></div></div> |
| <a name="spirit.qi.reference.numeric.real.description"></a><h6> |
| <a name="id909922"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.description">Description</a> |
| </h6> |
| <p> |
| The <code class="computeroutput"><span class="identifier">real_parser</span></code> can parse |
| real numbers of arbitrary length and size limited by its template parameter, |
| <code class="computeroutput"><span class="identifier">T</span></code>. The numeric base type |
| <code class="computeroutput"><span class="identifier">T</span></code> can be a user defined |
| numeric type such as fixed_point (fixed point reals) and bignum (unlimited |
| precision numbers) as long as the type follows certain expression requirements |
| (documented below). |
| </p> |
| <a name="spirit.qi.reference.numeric.real.header"></a><h6> |
| <a name="id909960"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.header">Header</a> |
| </h6> |
| <pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/qi/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">qi_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> |
| <a name="spirit.qi.reference.numeric.real.namespace"></a><h6> |
| <a name="id910034"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.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">float_</span> <span class="comment">// |
| alias: boost::spirit::qi::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::qi::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::qi::long_double</span></code> |
| </p> |
| </td></tr> |
| </tbody> |
| </table></div> |
| <a name="spirit.qi.reference.numeric.real.synopsis"></a><h6> |
| <a name="id910190"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.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">typename</span> <span class="identifier">RealPolicies</span><span class="special">></span> |
| <span class="keyword">struct</span> <span class="identifier">real_parser</span><span class="special">;</span> |
| </pre> |
| <a name="spirit.qi.reference.numeric.real.template_parameters"></a><h6> |
| <a name="id910265"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.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> |
| none |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RealPolicies</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Policies control the parser's behavior. |
| </p> |
| </td> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <a name="spirit.qi.reference.numeric.real.model_of"></a><h6> |
| <a name="id910403"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.model_of">Model of</a> |
| </h6> |
| <div class="blockquote"><blockquote class="blockquote"><p> |
| <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</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">NP</span></code></span></dt> |
| <dd><p> |
| An instance of <code class="computeroutput"><span class="identifier">real_parser</span></code> |
| (type). |
| </p></dd> |
| <dt><span class="term"><code class="computeroutput"><span class="identifier">RP</span></code></span></dt> |
| <dd><p> |
| A <code class="computeroutput"><span class="identifier">RealPolicies</span></code> |
| (type). |
| </p></dd> |
| <dt><span class="term"><code class="computeroutput"><span class="identifier">n</span></code></span></dt> |
| <dd><p> |
| An object of <code class="computeroutput"><span class="identifier">T</span></code>, |
| the numeric base type. |
| </p></dd> |
| <dt><span class="term"><code class="computeroutput"><span class="identifier">exp</span></code></span></dt> |
| <dd><p> |
| A <code class="computeroutput"><span class="keyword">int</span></code> exponent. |
| </p></dd> |
| <dt><span class="term"><code class="computeroutput"><span class="identifier">b</span></code></span></dt> |
| <dd><p> |
| A <code class="computeroutput"><span class="keyword">bool</span></code> flag. |
| </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> |
| <a href="http://www.sgi.com/tech/stl/ForwardIterator.html" target="_top"><code class="computeroutput"><span class="identifier">ForwardIterator</span></code></a>. first/last |
| iterator pair. |
| </p></dd> |
| </dl> |
| </div> |
| <a name="spirit.qi.reference.numeric.real.expression_semantics"></a><h6> |
| <a name="id910610"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.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="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</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">NP</span><span class="special">()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Instantiate and (default) construct an <code class="computeroutput"><span class="identifier">real_parser</span></code> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">float_</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Create an <code class="computeroutput"><span class="identifier">real_parser</span><span class="special"><</span><span class="keyword">float</span><span class="special">,</span> <span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">double_</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Create an <code class="computeroutput"><span class="identifier">real_parser</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">long_double</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Create an <code class="computeroutput"><span class="identifier">real_parser</span><span class="special"><</span><span class="keyword">long</span> |
| <span class="keyword">double</span><span class="special">,</span> |
| <span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> |
| <span class="special">></span></code> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <a name="spirit.qi.reference.numeric.real.attributes"></a><h6> |
| <a name="id910904"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.attributes">Attributes</a> |
| </h6> |
| <div class="blockquote"><blockquote class="blockquote"><p> |
| <code class="computeroutput"><span class="identifier">T</span></code>, The numeric base |
| type of the numeric parser. |
| </p></blockquote></div> |
| <a name="spirit.qi.reference.numeric.real.complexity"></a><h6> |
| <a name="id910932"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.complexity">Complexity</a> |
| </h6> |
| <div class="blockquote"><blockquote class="blockquote"><p> |
| O(N), where N is the number of characters (including the digits, exponent, |
| sign, etc.) being parsed. |
| </p></blockquote></div> |
| <a name="spirit.qi.reference.numeric.real.minimum_expression_requirements_for__code__phrase_role__identifier__t__phrase___code_"></a><h6> |
| <a name="id910952"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.minimum_expression_requirements_for__code__phrase_role__identifier__t__phrase___code_">Minimum |
| Expression Requirements for <code class="computeroutput"><span class="identifier">T</span></code></a> |
| </h6> |
| <p> |
| The numeric base type, <code class="computeroutput"><span class="identifier">T</span></code>, |
| the minimum expression requirements listed below must be valid. Take |
| note that additional requirements may be imposed by custom policies. |
| </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">T</span><span class="special">()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Default construct. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">T</span><span class="special">(</span><span class="number">0</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Construct from an <code class="computeroutput"><span class="keyword">int</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">n</span> <span class="special">+</span> |
| <span class="identifier">n</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Addition. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">n</span> <span class="special">-</span> |
| <span class="identifier">n</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Subtraction. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span> |
| <span class="identifier">n</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Multiplication. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <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">is_bounded</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="keyword">true</span></code> or <code class="computeroutput"><span class="keyword">false</span></code> if <code class="computeroutput"><span class="identifier">T</span></code> |
| bounded. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <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">digits</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Maximum Digits for <code class="computeroutput"><span class="identifier">T</span></code>, |
| radix digits. Required only if <code class="computeroutput"><span class="identifier">T</span></code> |
| is bounded. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <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></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Maximum Digits for <code class="computeroutput"><span class="identifier">T</span></code>, |
| base 10. Required only if <code class="computeroutput"><span class="identifier">T</span></code> |
| is bounded. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <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">max</span><span class="special">()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Maximum value for <code class="computeroutput"><span class="identifier">T</span></code>. |
| Required only if <code class="computeroutput"><span class="identifier">T</span></code> |
| is bounded. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <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">min</span><span class="special">()</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Minimum value for <code class="computeroutput"><span class="identifier">T</span></code>. |
| Required only if <code class="computeroutput"><span class="identifier">T</span></code> |
| is bounded. |
| </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">scale</span><span class="special">(</span><span class="identifier">exp</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Multiply <code class="computeroutput"><span class="identifier">n</span></code> |
| by <code class="computeroutput"><span class="number">10</span><span class="special">^</span><span class="identifier">exp</span></code>. Default implementation |
| is provided for <code class="computeroutput"><span class="keyword">float</span></code>, |
| <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">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">traits</span><span class="special">::</span><span class="identifier">negate</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Negate <code class="computeroutput"><span class="identifier">n</span></code> if |
| <code class="computeroutput"><span class="identifier">b</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>. Default implementation |
| is provided for <code class="computeroutput"><span class="keyword">float</span></code>, |
| <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">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">traits</span><span class="special">::</span><span class="identifier">is_equal_to_one</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Return <code class="computeroutput"><span class="keyword">true</span></code> if |
| <code class="computeroutput"><span class="identifier">n</span></code> is equal |
| to <code class="computeroutput"><span class="number">1.0</span></code>. Default |
| implementation is provided for <code class="computeroutput"><span class="keyword">float</span></code>, |
| <code class="computeroutput"><span class="keyword">double</span></code> and <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">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 additional spirit real number traits above are provided to allow |
| custom implementations to implement efficient real number parsers. |
| For example, for certain custom real numbers, scaling to a base 10 |
| exponent is a very cheap operation. |
| </p></td></tr> |
| </table></div> |
| <a name="spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code_"></a><h6> |
| <a name="id911862"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code_"><code class="computeroutput"><span class="identifier">RealPolicies</span></code></a> |
| </h6> |
| <p> |
| The <code class="computeroutput"><span class="identifier">RealPolicies</span></code> template |
| parameter is a class that groups all the policies that control the parser's |
| behavior. Policies control the real number parsers' behavior. |
| </p> |
| <p> |
| The default is <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span></code>. The default is provided to take |
| care of the most common case (there are many ways to represent, and hence |
| parse, real numbers). In most cases, the default policies are sufficient |
| and can be used straight out of the box. They are designed to parse C/C++ |
| style floating point numbers of the form <code class="computeroutput"><span class="identifier">nnn</span><span class="special">.</span><span class="identifier">fff</span><span class="special">.</span><span class="identifier">Eeee</span></code> |
| where <code class="computeroutput"><span class="identifier">nnn</span></code> is the whole |
| number part, <code class="computeroutput"><span class="identifier">fff</span></code> is the |
| fractional part, <code class="computeroutput"><span class="identifier">E</span></code> is |
| <code class="computeroutput"><span class="char">'e'</span></code> or <code class="computeroutput"><span class="char">'E'</span></code> |
| and <code class="computeroutput"><span class="identifier">eee</span></code> is the exponent |
| optionally preceded by <code class="computeroutput"><span class="char">'-'</span></code> |
| or <code class="computeroutput"><span class="char">'+'</span></code> with the additional |
| detection of NaN and Inf as mandated by the C99 Standard and proposed |
| for inclusion into the C++0x Standard: nan, nan(...), inf and infinity |
| (the matching is case-insensitive). This corresponds to the following |
| grammar: |
| </p> |
| <pre class="programlisting"><span class="identifier">sign</span> |
| <span class="special">=</span> <span class="identifier">lit</span><span class="special">(</span><span class="char">'+'</span><span class="special">)</span> <span class="special">|</span> <span class="char">'-'</span> |
| <span class="special">;</span> |
| |
| <span class="identifier">nan</span> |
| <span class="special">=</span> <span class="special">-</span><span class="identifier">lit</span><span class="special">(</span><span class="string">"1.0#"</span><span class="special">)</span> <span class="special">>></span> <span class="identifier">no_case</span><span class="special">[</span><span class="string">"nan"</span><span class="special">]</span> |
| <span class="special">>></span> <span class="special">-(</span><span class="char">'('</span> <span class="special">>></span> <span class="special">*(</span><span class="identifier">char_</span> <span class="special">-</span> <span class="char">')'</span><span class="special">)</span> <span class="special">>></span> <span class="char">')'</span><span class="special">)</span> |
| <span class="special">;</span> |
| |
| <span class="identifier">inf</span> |
| <span class="special">=</span> <span class="identifier">no_case</span><span class="special">[</span><span class="identifier">lit</span><span class="special">(</span><span class="string">"inf"</span><span class="special">)</span> <span class="special">>></span> <span class="special">-</span><span class="identifier">lit</span><span class="special">(</span><span class="string">"inity"</span><span class="special">)]</span> |
| <span class="special">;</span> |
| |
| <span class="identifier">floating_literal</span> |
| <span class="special">=</span> <span class="special">-</span><span class="identifier">sign</span> <span class="special">>></span> |
| <span class="special">(</span> <span class="identifier">nan</span> |
| <span class="special">|</span> <span class="identifier">inf</span> |
| <span class="special">|</span> <span class="identifier">fractional_constant</span> <span class="special">>></span> <span class="special">!</span><span class="identifier">exponent_part</span> |
| <span class="special">|</span> <span class="special">+</span><span class="identifier">digit</span> <span class="special">>></span> <span class="identifier">exponent_part</span> |
| <span class="special">)</span> |
| <span class="special">;</span> |
| |
| <span class="identifier">fractional_constant</span> |
| <span class="special">=</span> <span class="special">*</span><span class="identifier">digit</span> <span class="special">>></span> <span class="char">'.'</span> <span class="special">>></span> <span class="special">+</span><span class="identifier">digit</span> |
| <span class="special">|</span> <span class="special">+</span><span class="identifier">digit</span> <span class="special">>></span> <span class="special">-</span><span class="identifier">lit</span><span class="special">(</span><span class="char">'.'</span><span class="special">)</span> |
| <span class="special">;</span> |
| |
| <span class="identifier">exponent_part</span> |
| <span class="special">=</span> <span class="special">(</span><span class="identifier">lit</span><span class="special">(</span><span class="char">'e'</span><span class="special">)</span> <span class="special">|</span> <span class="char">'E'</span><span class="special">)</span> <span class="special">>></span> <span class="special">-</span><span class="identifier">sign</span> <span class="special">>></span> <span class="special">+</span><span class="identifier">digit</span> |
| <span class="special">;</span> |
| </pre> |
| <p> |
| There are four <code class="computeroutput"><span class="identifier">RealPolicies</span></code> |
| predefined for immediate use: |
| </p> |
| <div class="table"> |
| <a name="id913562"></a><p class="title"><b>Table 4. Predefined Policies</b></p> |
| <div class="table-contents"><table class="table" summary="Predefined Policies"> |
| <colgroup> |
| <col> |
| <col> |
| </colgroup> |
| <thead><tr> |
| <th> |
| <p> |
| Policies |
| </p> |
| </th> |
| <th> |
| <p> |
| Description |
| </p> |
| </th> |
| </tr></thead> |
| <tbody> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">ureal_policies</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Without sign. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">real_policies</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| With sign. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">strict_ureal_policies</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Without sign, dot required. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">strict_real_policies</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| With sign, dot required. |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| <br class="table-break"><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> |
| Integers are considered a subset of real numbers, so for instance, |
| <code class="computeroutput"><span class="identifier">double_</span></code> recognizes |
| integer numbers (without a dot) just as well. To avoid this ambiguity, |
| <code class="computeroutput"><span class="identifier">strict_ureal_policies</span></code> |
| and <code class="computeroutput"><span class="identifier">strict_real_policies</span></code> |
| require a dot to be present for a number to be considered a successful |
| match. |
| </p></td></tr> |
| </table></div> |
| <a name="spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code__expression_requirements"></a><h6> |
| <a name="id913797"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code__expression_requirements"><code class="computeroutput"><span class="identifier">RealPolicies</span></code> Expression Requirements</a> |
| </h6> |
| <p> |
| For models of <code class="computeroutput"><span class="identifier">RealPolicies</span></code> |
| the following expressions must be valid: |
| </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">RP</span><span class="special">::</span><span class="identifier">allow_leading_dot</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Allow leading dot. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">allow_trailing_dot</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Allow trailing dot. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">expect_dot</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Require a dot. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_sign</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the prefix sign (e.g. '-'). Return <code class="computeroutput"><span class="keyword">true</span></code> |
| if successful, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_n</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the integer at the left of the decimal point. Return |
| <code class="computeroutput"><span class="keyword">true</span></code> if successful, |
| otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| If successful, place the result into <code class="computeroutput"><span class="identifier">n</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_dot</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the decimal point. Return <code class="computeroutput"><span class="keyword">true</span></code> |
| if successful, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_frac_n</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the fraction after the decimal point. Return <code class="computeroutput"><span class="keyword">true</span></code> if successful, otherwise |
| <code class="computeroutput"><span class="keyword">false</span></code>. If successful, |
| place the result into <code class="computeroutput"><span class="identifier">n</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_exp</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the exponent prefix (e.g. 'e'). Return <code class="computeroutput"><span class="keyword">true</span></code> if successful, otherwise |
| <code class="computeroutput"><span class="keyword">false</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_exp_n</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse the actual exponent. Return <code class="computeroutput"><span class="keyword">true</span></code> |
| if successful, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| If successful, place the result into <code class="computeroutput"><span class="identifier">n</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_nan</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse a NaN. Return <code class="computeroutput"><span class="keyword">true</span></code> |
| if successful, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| If successful, place the result into <code class="computeroutput"><span class="identifier">n</span></code>. |
| </p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p> |
| <code class="computeroutput"><span class="identifier">RP</span><span class="special">::</span><span class="identifier">parse_inf</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span> |
| <span class="identifier">l</span><span class="special">,</span> |
| <span class="identifier">n</span><span class="special">)</span></code> |
| </p> |
| </td> |
| <td> |
| <p> |
| Parse an Inf. Return <code class="computeroutput"><span class="keyword">true</span></code> |
| if successful, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. |
| If successful, place the result into <code class="computeroutput"><span class="identifier">n</span></code>. |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| <p> |
| The <code class="computeroutput"><span class="identifier">parse_nan</span></code> and <code class="computeroutput"><span class="identifier">parse_inf</span></code> functions get called whenever: |
| </p> |
| <div class="blockquote"><blockquote class="blockquote"><p> |
| a number to parse does not start with a digit (after having successfully |
| parsed an optional sign) |
| </p></blockquote></div> |
| <p> |
| or |
| </p> |
| <div class="blockquote"><blockquote class="blockquote"><p> |
| after a real number of the value 1 (having no exponential part and |
| a fractional part value of 0) has been parsed. |
| </p></blockquote></div> |
| <p> |
| The first call recognizes representations of NaN or Inf starting with |
| a non-digit character (such as NaN, Inf, QNaN etc.). The second call |
| recognizes representation formats starting with a <code class="computeroutput"><span class="number">1.0</span></code> |
| (such as <code class="computeroutput"><span class="string">"1.0#NAN"</span></code> |
| or <code class="computeroutput"><span class="string">"1.0#INF"</span></code> etc.). |
| </p> |
| <p> |
| The functions should return true if a Nan or Inf has been found. In this |
| case the attribute <code class="computeroutput"><span class="identifier">n</span></code> |
| should be set to the matched value (NaN or Inf). The optional sign will |
| be automatically applied afterwards. |
| </p> |
| <a name="spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code__specializations"></a><h6> |
| <a name="id914648"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real._code__phrase_role__identifier__realpolicies__phrase___code__specializations"><code class="computeroutput"><span class="identifier">RealPolicies</span></code> Specializations</a> |
| </h6> |
| <p> |
| The easiest way to implement a proper real parsing policy is to derive |
| a new type from the the type <code class="computeroutput"><span class="identifier">real_policies</span></code> |
| while overriding the aspects of the parsing which need to be changed. |
| For example, here's the implementation of the predefined <code class="computeroutput"><span class="identifier">strict_real_policies</span></code>: |
| </p> |
| <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">strict_real_policies</span> <span class="special">:</span> <span class="identifier">real_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> |
| <span class="special">{</span> |
| <span class="keyword">static</span> <span class="keyword">bool</span> <span class="keyword">const</span> <span class="identifier">expect_dot</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span> |
| <span class="special">};</span> |
| </pre> |
| <a name="spirit.qi.reference.numeric.real.example"></a><h6> |
| <a name="id914782"></a> |
| <a class="link" href="real.html#spirit.qi.reference.numeric.real.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.qi.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">qi</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">qi</span><span class="special">::</span><span class="identifier">real_parser</span><span class="special">;</span> |
| </pre> |
| <p> |
| </p> |
| <p> |
| Basic real number parsing: |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">test_parser</span><span class="special">(</span><span class="string">"+12345e6"</span><span class="special">,</span> <span class="identifier">double_</span><span class="special">);</span> |
| </pre> |
| <p> |
| </p> |
| <p> |
| A custom real number policy: |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="comment">/////////////////////////////////////////////////////////////////////////////// |
| </span><span class="comment">// These policies can be used to parse thousand separated |
| </span><span class="comment">// numbers with at most 2 decimal digits after the decimal |
| </span><span class="comment">// point. e.g. 123,456,789.01 |
| </span><span class="comment">/////////////////////////////////////////////////////////////////////////////// |
| </span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> |
| <span class="keyword">struct</span> <span class="identifier">ts_real_policies</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">qi</span><span class="special">::</span><span class="identifier">ureal_policies</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> |
| <span class="special">{</span> |
| <span class="comment">// 2 decimal places Max |
| </span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attribute</span><span class="special">></span> |
| <span class="keyword">static</span> <span class="keyword">bool</span> |
| <span class="identifier">parse_frac_n</span><span class="special">(</span><span class="identifier">Iterator</span><span class="special">&</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Attribute</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">)</span> |
| <span class="special">{</span> |
| <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span> |
| <span class="identifier">extract_uint</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="number">10</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="keyword">true</span><span class="special">>::</span><span class="identifier">call</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">);</span> |
| <span class="special">}</span> |
| |
| <span class="comment">// No exponent |
| </span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">></span> |
| <span class="keyword">static</span> <span class="keyword">bool</span> |
| <span class="identifier">parse_exp</span><span class="special">(</span><span class="identifier">Iterator</span><span class="special">&,</span> <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&)</span> |
| <span class="special">{</span> |
| <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span> |
| <span class="special">}</span> |
| |
| <span class="comment">// No exponent |
| </span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attribute</span><span class="special">></span> |
| <span class="keyword">static</span> <span class="keyword">bool</span> |
| <span class="identifier">parse_exp_n</span><span class="special">(</span><span class="identifier">Iterator</span><span class="special">&,</span> <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&,</span> <span class="identifier">Attribute</span><span class="special">&)</span> |
| <span class="special">{</span> |
| <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span> |
| <span class="special">}</span> |
| |
| <span class="comment">// Thousands separated numbers |
| </span> <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attribute</span><span class="special">></span> |
| <span class="keyword">static</span> <span class="keyword">bool</span> |
| <span class="identifier">parse_n</span><span class="special">(</span><span class="identifier">Iterator</span><span class="special">&</span> <span class="identifier">first</span><span class="special">,</span> <span class="identifier">Iterator</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">Attribute</span><span class="special">&</span> <span class="identifier">attr</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">qi</span><span class="special">::</span><span class="identifier">uint_parser</span><span class="special">;</span> |
| <span class="keyword">namespace</span> <span class="identifier">qi</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">qi</span><span class="special">;</span> |
| |
| <span class="identifier">uint_parser</span><span class="special"><</span><span class="keyword">unsigned</span><span class="special">,</span> <span class="number">10</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">3</span><span class="special">></span> <span class="identifier">uint3</span><span class="special">;</span> |
| <span class="identifier">uint_parser</span><span class="special"><</span><span class="keyword">unsigned</span><span class="special">,</span> <span class="number">10</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">3</span><span class="special">></span> <span class="identifier">uint3_3</span><span class="special">;</span> |
| |
| <span class="identifier">T</span> <span class="identifier">result</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> |
| <span class="keyword">if</span> <span class="special">(</span><span class="identifier">parse</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">uint3</span><span class="special">,</span> <span class="identifier">result</span><span class="special">))</span> |
| <span class="special">{</span> |
| <span class="keyword">bool</span> <span class="identifier">hit</span> <span class="special">=</span> <span class="keyword">false</span><span class="special">;</span> |
| <span class="identifier">T</span> <span class="identifier">n</span><span class="special">;</span> |
| <span class="identifier">Iterator</span> <span class="identifier">save</span> <span class="special">=</span> <span class="identifier">first</span><span class="special">;</span> |
| |
| <span class="keyword">while</span> <span class="special">(</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">parse</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="char">','</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">parse</span><span class="special">(</span><span class="identifier">first</span><span class="special">,</span> <span class="identifier">last</span><span class="special">,</span> <span class="identifier">uint3_3</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> |
| <span class="special">{</span> |
| <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">result</span> <span class="special">*</span> <span class="number">1000</span> <span class="special">+</span> <span class="identifier">n</span><span class="special">;</span> |
| <span class="identifier">save</span> <span class="special">=</span> <span class="identifier">first</span><span class="special">;</span> |
| <span class="identifier">hit</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span> |
| <span class="special">}</span> |
| |
| <span class="identifier">first</span> <span class="special">=</span> <span class="identifier">save</span><span class="special">;</span> |
| <span class="keyword">if</span> <span class="special">(</span><span class="identifier">hit</span><span class="special">)</span> |
| <span class="identifier">attr</span> <span class="special">=</span> <span class="identifier">result</span><span class="special">;</span> |
| <span class="keyword">return</span> <span class="identifier">hit</span><span class="special">;</span> |
| <span class="special">}</span> |
| <span class="keyword">return</span> <span class="keyword">false</span><span class="special">;</span> |
| <span class="special">}</span> |
| <span class="special">};</span> |
| </pre> |
| <p> |
| </p> |
| <p> |
| And its use: |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">real_parser</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">ts_real_policies</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="special">></span> <span class="identifier">ts_real</span><span class="special">;</span> |
| <span class="identifier">test_parser</span><span class="special">(</span><span class="string">"123,456,789.01"</span><span class="special">,</span> <span class="identifier">ts_real</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-2010 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="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> |