Boost logo

Boost :

Subject: [boost] [boost/spirit] numeric policy
From: Brian Schrom (brian.schrom_at_[hidden])
Date: 2013-07-31 12:37:55


I've had the case where I needed to retain formatting information for a
number (general, fixed, scientific) and was nicely accomplished by
extending the policy, but needed to have a begin_parse() and end_parse()
for the policy to be complete. It seems that it makes some sense or is
this accomplished another way? Maybe something to consider for policies
in general?

Index: qi/numeric/real_policies.hpp
===================================================================
--- qi/numeric/real_policies.hpp (revision 85166)
+++ qi/numeric/real_policies.hpp (working copy)
@@ -28,6 +28,18 @@
         static bool const allow_trailing_dot = true;
         static bool const expect_dot = false;
 
+ template <typename Attribute>
+ static void
+ begin_parse(Attribute& attr_)
+ {
+ }
+
+ template <typename Attribute>
+ static void
+ end_parse(Attribute& attr_,bool /* result */)
+ {
+ }
+
         template <typename Iterator>
         static bool
         parse_sign(Iterator& /*first*/, Iterator const& /*last*/)
Index: qi/numeric/detail/real_impl.hpp
===================================================================
--- qi/numeric/detail/real_impl.hpp (revision 85166)
+++ qi/numeric/detail/real_impl.hpp (working copy)
@@ -133,6 +133,7 @@
         parse(Iterator& first, Iterator const& last, Attribute& attr,
             RealPolicies const& p)
         {
+ p.begin_parse(attr);
             if (first == last)
                 return false;
             Iterator save = first;
@@ -257,6 +258,7 @@
             // If we got a negative sign, negate the number
             traits::assign_to(traits::negate(neg, n), attr);
 
+ p.end_parse(attr, true); // maybe this should return a
bool and be the return value?
             // Success!!!
             return true;
         }


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk