2
0
mirror of https://github.com/boostorg/spirit.git synced 2026-01-19 04:42:11 +00:00

Revert "Merge pull request #822 from saki7/modernize-matches"

This reverts commit 495f936af2, reversing
changes made to b86852dd88.
This commit is contained in:
Nana Sakisaka
2025-09-13 08:57:02 +09:00
parent 5d52405c56
commit 26d6ec1a64
2 changed files with 25 additions and 46 deletions

View File

@@ -2,7 +2,7 @@
Copyright (c) 2015 Mario Lang Copyright (c) 2015 Mario Lang
Copyright (c) 2001-2011 Hartmut Kaiser Copyright (c) 2001-2011 Hartmut Kaiser
Copyright (c) 2017 wanghan02 Copyright (c) 2017 wanghan02
Copyright (c) 2024-2025 Nana Sakisaka Copyright (c) 2024 Nana Sakisaka
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -15,64 +15,45 @@
#include <boost/spirit/home/x3/support/expectation.hpp> #include <boost/spirit/home/x3/support/expectation.hpp>
#include <boost/spirit/home/x3/support/unused.hpp> #include <boost/spirit/home/x3/support/unused.hpp>
#include <iterator> namespace boost { namespace spirit { namespace x3
#include <type_traits>
#include <utility>
namespace boost::spirit::x3
{ {
template <typename Subject> template <typename Subject>
struct matches_directive : unary_parser<Subject, matches_directive<Subject>> struct matches_directive : unary_parser<Subject, matches_directive<Subject>>
{ {
using base_type = unary_parser<Subject, matches_directive<Subject>>; using base_type = unary_parser<Subject, matches_directive<Subject>>;
static constexpr bool has_attribute = true; static bool const has_attribute = true;
using attribute_type = bool; using attribute_type = bool;
template <typename SubjectT> constexpr matches_directive(Subject const& subject) : base_type(subject) {}
requires std::is_constructible_v<Subject, SubjectT>
constexpr matches_directive(SubjectT&& subject)
noexcept(std::is_nothrow_constructible_v<Subject, SubjectT>)
: base_type(std::forward<SubjectT>(subject))
{}
template <std::forward_iterator It, std::sentinel_for<It> Se, typename Context, typename RContext, typename Attribute> template <typename Iterator, typename Context
[[nodiscard]] constexpr bool , typename RContext, typename Attribute>
parse(It& first, Se const& last, Context const& context, RContext& rcontext, Attribute& attr) const bool parse(Iterator& first, Iterator const& last
noexcept( , Context const& context, RContext& rcontext, Attribute& attr) const
is_nothrow_parsable_v<Subject, It, Se, Context, RContext, unused_type> &&
noexcept(traits::move_to(std::declval<bool const&>(), attr))
)
{ {
bool const matched = this->subject.parse(first, last, context, rcontext, unused); bool const result = this->subject.parse(
first, last, context, rcontext, unused);
#if !BOOST_SPIRIT_X3_THROW_EXPECTATION_FAILURE #if !BOOST_SPIRIT_X3_THROW_EXPECTATION_FAILURE
if (x3::has_expectation_failure(context)) return false; if (has_expectation_failure(context)) return false;
#endif #endif
traits::move_to(matched, attr); traits::move_to(result, attr);
return true; return true;
} }
}; };
namespace detail struct matches_gen
{ {
struct matches_gen template <typename Subject>
constexpr matches_directive<typename extension::as_parser<Subject>::value_type>
operator[](Subject const& subject) const
{ {
template <X3Subject Subject> return { as_parser(subject) };
[[nodiscard]] constexpr matches_directive<as_parser_plain_t<Subject>> }
operator[](Subject&& subject) const };
noexcept(is_parser_nothrow_constructible_v<matches_directive<as_parser_plain_t<Subject>>, Subject>)
{
return { as_parser(std::forward<Subject>(subject)) };
}
};
} // detail
inline namespace cpos constexpr auto matches = matches_gen{};
{ }}}
inline constexpr detail::matches_gen matches{};
} // cpos
} // boost::spirit::x3
#endif #endif

View File

@@ -1,18 +1,16 @@
/*============================================================================= /*=============================================================================
Copyright (c) 2001-2015 Joel de Guzman Copyright (c) 2001-2015 Joel de Guzman
Copyright (c) 2001-2010 Hartmut Kaiser Copyright (c) 2001-2010 Hartmut Kaiser
Copyright (c) 2025 Nana Sakisaka
Distributed under the Boost Software License, Version 1.0. (See accompanying Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/ =============================================================================*/
#include <boost/spirit/home/x3.hpp>
#include <iostream>
#include "test.hpp" #include "test.hpp"
#include <boost/spirit/home/x3.hpp> int
main()
#include <iostream>
int main()
{ {
using spirit_test::test; using spirit_test::test;
using spirit_test::test_attr; using spirit_test::test_attr;