27 #include <pni/core/types.hpp>
28 #include <pni/core/type_erasures.hpp>
29 #include <boost/variant.hpp>
30 #include <boost/spirit/include/qi.hpp>
31 #include <boost/spirit/include/phoenix.hpp>
70 template<
typename ITERT>
71 struct value_rule : boost::spirit::qi::grammar<ITERT,pni::core::value()>
88 public boost::static_visitor<pni::core::value>
94 pni::core::value
operator()(
const pni::core::int64 &v)
const
96 return pni::core::value(v);
102 pni::core::value
operator()(
const pni::core::complex64 &v)
const
104 return pni::core::value(v);
110 pni::core::value
operator()(
const pni::core::float64 &v)
const
112 return pni::core::value(v);
142 template<
typename Arg>
154 typename boost::mpl::at<
160 typename boost::mpl::at<
168 boost::spirit::qi::rule<ITERT,pni::core::value()>
value_;
181 using namespace boost::spirit::qi;
184 using boost::spirit::qi::_1;
186 sign_rule = char_(
'+')|char_(
'-');
187 float_signs = char_(
'.')|char_(
'e');
189 value_ = ((integer_rule_ >> !(float_signs|
sign_rule))
visitor for value construction
Definition: value_rule.hpp:87
pni::core::value operator()(const pni::core::complex64 &v) const
complex64 value construction
Definition: value_rule.hpp:102
value_rule()
default constructor
Definition: value_rule.hpp:178
pni::core::value operator()(const pni::core::float64 &v) const
float64 value construction
Definition: value_rule.hpp:110
pni::core::value operator()(const pni::core::int64 &v) const
int64 value construction
Definition: value_rule.hpp:94
pni::core::value type
the return type
Definition: value_rule.hpp:129
complex_rule< ITERT, pni::core::complex64 > complex_rule_
rule for parsing a complex number
Definition: value_rule.hpp:166
Definition: cbf_reader.hpp:41
boost::spirit::qi::rule< ITERT > sign_rule
rule to match the + or - sign
Definition: value_rule.hpp:170
boost::mpl::at< spirit_rules, pni::core::float64 >::type float_rule_
rule for parsing a floating point number
Definition: value_rule.hpp:163
determine the return type of the function
Definition: value_rule.hpp:126
boost::mpl::at< spirit_rules, pni::core::int64 >::type integer_rule_
rule for parsing an integer
Definition: value_rule.hpp:157
boost::mpl::map< boost::mpl::pair< pni::core::uint8, boost::spirit::qi::uint_parser< pni::core::uint8, 10, 1, 4 > >, boost::mpl::pair< pni::core::uint16, >, boost::mpl::pair< pni::core::uint32, >, boost::mpl::pair< pni::core::uint64, >, boost::mpl::pair< pni::core::int8, boost::spirit::qi::uint_parser< pni::core::int8, 10, 1, 4 > >, boost::mpl::pair< pni::core::int16, >, boost::mpl::pair< pni::core::int32, >, boost::mpl::pair< pni::core::int64, >, boost::mpl::pair< core::float32, >, boost::mpl::pair< pni::core::float64, >, boost::mpl::pair< pni::core::float128, >, boost::mpl::pair< pni::core::bool_t, >, boost::mpl::pair< bool, > > spirit_rules
spirit rule map
Definition: spirit_rules.hpp:110
value construction lazy function
Definition: value_rule.hpp:123
value rule
Definition: value_rule.hpp:71
boost::spirit::qi::rule< ITERT, pni::core::value()> value_
value reading rule
Definition: value_rule.hpp:168
pni::core::value operator()(Arg const &n) const
lazy function implementation
Definition: value_rule.hpp:143
boost::phoenix::function< value_constructor > construct_value
lazy function to assemble a value instance
Definition: value_rule.hpp:174
boost::spirit::qi::rule< ITERT > float_signs
rule to match . or e used to denote a floating point number
Definition: value_rule.hpp:172