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 commit495f936af2, reversing changes made tob86852dd88.
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user