• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*=============================================================================
2     Copyright (c) 2015 Mario Lang
3     Copyright (c) 2001-2011 Hartmut Kaiser
4 
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8 #if !defined(BOOST_SPIRIT_HOME_X3_EXTENSIONS_MATCHES_HPP)
9 #define BOOST_SPIRIT_HOME_X3_EXTENSIONS_MATCHES_HPP
10 
11 #include <boost/spirit/home/x3/core/parser.hpp>
12 #include <boost/spirit/home/x3/support/traits/move_to.hpp>
13 #include <boost/spirit/home/x3/support/unused.hpp>
14 
15 namespace boost { namespace spirit { namespace x3
16 {
17     template <typename Subject>
18     struct matches_directive : unary_parser<Subject, matches_directive<Subject>>
19     {
20         using base_type = unary_parser<Subject, matches_directive<Subject>>;
21         static bool const has_attribute = true;
22         using attribute_type = bool;
23 
matches_directiveboost::spirit::x3::matches_directive24         constexpr matches_directive(Subject const& subject) : base_type(subject) {}
25 
26         template <typename Iterator, typename Context
27           , typename RContext, typename Attribute>
parseboost::spirit::x3::matches_directive28         bool parse(Iterator& first, Iterator const& last
29           , Context const& context, RContext& rcontext, Attribute& attr) const
30         {
31             bool const result = this->subject.parse(
32                     first, last, context, rcontext, unused);
33             traits::move_to(result, attr);
34             return true;
35         }
36     };
37 
38     struct matches_gen
39     {
40         template <typename Subject>
41         constexpr matches_directive<typename extension::as_parser<Subject>::value_type>
operator []boost::spirit::x3::matches_gen42         operator[](Subject const& subject) const
43         {
44             return { as_parser(subject) };
45         }
46     };
47 
48     constexpr auto matches = matches_gen{};
49 }}}
50 
51 #endif
52