Chris@102: /*============================================================================= Chris@102: Copyright (c) 2001-2014 Joel de Guzman Chris@102: Chris@102: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@102: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@102: ==============================================================================*/ Chris@102: #if !defined(BOOST_SPIRIT_X3_REAL_APRIL_18_2006_0850AM) Chris@102: #define BOOST_SPIRIT_X3_REAL_APRIL_18_2006_0850AM Chris@102: Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: #include Chris@102: Chris@102: namespace boost { namespace spirit { namespace x3 Chris@102: { Chris@102: template > Chris@102: struct real_parser : parser > Chris@102: { Chris@102: typedef T attribute_type; Chris@102: static bool const has_attribute = true; Chris@102: Chris@102: real_parser() Chris@102: : policies() {} Chris@102: Chris@102: real_parser(RealPolicies const& policies) Chris@102: : policies(policies) {} Chris@102: Chris@102: template Chris@102: bool parse(Iterator& first, Iterator const& last Chris@102: , Context& context, unused_type, T& attr_) const Chris@102: { Chris@102: x3::skip_over(first, last, context); Chris@102: return extract_real::parse(first, last, attr_, policies); Chris@102: } Chris@102: Chris@102: template Chris@102: bool parse(Iterator& first, Iterator const& last Chris@102: , Context& context, unused_type, Attribute& attr_param) const Chris@102: { Chris@102: // this case is called when Attribute is not T Chris@102: T attr_; Chris@102: if (parse(first, last, context, unused, attr_)) Chris@102: { Chris@102: traits::move_to(attr_, attr_param); Chris@102: return true; Chris@102: } Chris@102: return false; Chris@102: } Chris@102: Chris@102: RealPolicies policies; Chris@102: }; Chris@102: Chris@102: typedef real_parser float_type; Chris@102: float_type const float_ = {}; Chris@102: Chris@102: typedef real_parser double_type; Chris@102: double_type const double_ = {}; Chris@102: Chris@102: }}} Chris@102: Chris@102: #endif