29 #include <boost/mpl/at.hpp>
30 #include <boost/spirit/include/qi.hpp>
31 #include <boost/spirit/include/phoenix.hpp>
54 boost::spirit::qi::locals<
55 typename pni::core::type_info<CTYPE>::base_type,
56 typename pni::core::type_info<CTYPE>::base_type,
57 typename pni::core::type_info<CTYPE>::base_type
64 typedef typename pni::core::type_info<result_type>::base_type
base_t;
67 typename boost::mpl::at<spirit_rules,base_t>::type
base_rule;
74 boost::spirit::qi::rule<ITERT>
i_rule;
78 boost::spirit::qi::rule<ITERT,
79 boost::spirit::qi::locals<
base_t,
87 using namespace boost::spirit::qi;
89 using boost::spirit::qi::_1;
91 number_rule = base_rule[_val = _1];
92 sign_rule = char_(
'+')[_val=1] | char_(
'-')[_val=-1.] ;
93 i_rule = (char_(
'i') | char_(
'j') | char_(
'I'))>!sign_rule;
94 imag_rule = i_rule>number_rule[_val = _1];
96 complex_= eps[_a = 0,_b = 1, _c = 0] >>
98 (number_rule[_a = _1] || (sign_rule[_b = _1] > imag_rule[_c = _1]))
100 (sign_rule[_b = _1] || imag_rule[_c = _1])
101 )[_val = construct<result_type>(_a,_b*_c)] ;
boost::mpl::at< spirit_rules, base_t >::type base_rule
rule to parse the base type
Definition: complex_rule.hpp:67
boost::spirit::qi::rule< ITERT, base_t()> imag_rule
rule determining the imaginary part
Definition: complex_rule.hpp:76
boost::spirit::qi::rule< ITERT > i_rule
rule matching the separator i,j,I
Definition: complex_rule.hpp:74
boost::spirit::qi::rule< ITERT, boost::spirit::qi::locals< base_t, base_t, base_t >, result_type()> complex_
rule defining the entire complex number
Definition: complex_rule.hpp:82
CTYPE result_type
result type of the rule
Definition: complex_rule.hpp:62
Definition: cbf_reader.hpp:41
complex_rule()
default constructor
Definition: complex_rule.hpp:85
pni::core::type_info< result_type >::base_type base_t
base type of the complex number type
Definition: complex_rule.hpp:64
boost::spirit::qi::rule< ITERT, base_t()> sign_rule
rule obtaining the sign
Definition: complex_rule.hpp:72
boost::spirit::qi::rule< ITERT, base_t()> number_rule
rule matching a single numeric value
Definition: complex_rule.hpp:70
complex number rule
Definition: complex_rule.hpp:53