Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2011 Hartmut Kaiser Chris@16: Copyright (c) 2001-2011 Joel de Guzman Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #if !defined(BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1202PM) Chris@16: #define BOOST_SPIRIT_MATCH_MANIP_MAY_05_2007_1202PM Chris@16: Chris@16: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: namespace boost { namespace spirit { namespace qi Chris@16: { Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: inline typename detail::match::type Chris@16: match( Chris@16: Expr const& expr) Chris@16: { Chris@16: return detail::match::call(expr); Chris@16: } Chris@16: Chris@16: template Chris@16: inline detail::match_manip< Chris@16: Expr, mpl::false_, mpl::false_, unused_type, Attribute Chris@16: > Chris@16: match( Chris@16: Expr const& xpr Chris@16: , Attribute& p) Chris@16: { Chris@16: using qi::detail::match_manip; Chris@16: Chris@16: // Report invalid expression error as early as possible. Chris@16: // If you got an error_invalid_expression error message here, Chris@16: // then the expression (expr) is not a valid spirit qi expression. Chris@16: BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr); Chris@16: return match_manip( Chris@16: xpr, unused, p); Chris@16: } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: inline typename detail::phrase_match::type Chris@16: phrase_match( Chris@16: Expr const& expr Chris@16: , Skipper const& s Chris@16: , BOOST_SCOPED_ENUM(skip_flag) post_skip = skip_flag::postskip) Chris@16: { Chris@16: return detail::phrase_match::call(expr, s, post_skip); Chris@16: } Chris@16: Chris@16: template Chris@16: inline detail::match_manip< Chris@16: Expr, mpl::false_, mpl::false_, Skipper, Attribute Chris@16: > Chris@16: phrase_match( Chris@16: Expr const& xpr Chris@16: , Skipper const& s Chris@16: , BOOST_SCOPED_ENUM(skip_flag) post_skip Chris@16: , Attribute& p) Chris@16: { Chris@16: using qi::detail::match_manip; Chris@16: Chris@16: // Report invalid expression error as early as possible. Chris@16: // If you got an error_invalid_expression error message here, Chris@16: // then either the expression (expr) or skipper is not a valid Chris@16: // spirit qi expression. Chris@16: BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr); Chris@16: BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper); Chris@16: return match_manip( Chris@16: xpr, s, post_skip, p); Chris@16: } Chris@16: Chris@16: template Chris@16: inline detail::match_manip< Chris@16: Expr, mpl::false_, mpl::false_, Skipper, Attribute Chris@16: > Chris@16: phrase_match( Chris@16: Expr const& xpr Chris@16: , Skipper const& s Chris@16: , Attribute& p) Chris@16: { Chris@16: using qi::detail::match_manip; Chris@16: Chris@16: // Report invalid expression error as early as possible. Chris@16: // If you got an error_invalid_expression error message here, Chris@16: // then either the expression (expr) or skipper is not a valid Chris@16: // spirit qi expression. Chris@16: BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Expr); Chris@16: BOOST_SPIRIT_ASSERT_MATCH(qi::domain, Skipper); Chris@16: return match_manip( Chris@16: xpr, s, p); Chris@16: } Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: inline std::basic_istream& Chris@16: operator>>(std::basic_istream& is, parser const& p) Chris@16: { Chris@16: typedef spirit::basic_istream_iterator input_iterator; Chris@16: Chris@16: input_iterator f(is); Chris@16: input_iterator l; Chris@16: if (!p.derived().parse(f, l, unused, unused, unused)) Chris@16: { Chris@16: is.setstate(std::ios_base::failbit); Chris@16: } Chris@16: return is; Chris@16: } Chris@16: Chris@16: }}} Chris@16: Chris@16: #endif Chris@16: