Iros
 
Loading...
Searching...
No Matches
transform.h
Go to the documentation of this file.
1#pragma once
2
8
9namespace di::parser {
10namespace detail {
11 template<typename Parser, typename Fun>
12 class TransformParser : public ParserBase<TransformParser<Parser, Fun>> {
13 public:
14 template<typename P, typename F>
15 constexpr explicit TransformParser(InPlace, P&& parser, F&& function)
16 : m_parser(util::forward<P>(parser)), m_function(util::forward<F>(function)) {}
17
18 template<concepts::ParserContext Context, typename Value = meta::ParserValue<Context, Parser>>
20 constexpr auto parse(Context& context) const {
21 return m_parser.parse(context).transform(m_function);
22 }
23
24 private:
25 Parser m_parser;
26 Fun m_function;
27 };
28
30 template<concepts::DecayConstructible Parser, concepts::DecayConstructible Fun>
31 constexpr auto operator()(Parser&& parser, Fun&& function) const {
33 util::forward<Fun>(function));
34 }
35 };
36}
37
38constexpr inline auto transform = detail::TransformFunction {};
39
40template<concepts::DecayConstructible Parser, concepts::DecayConstructible Fun>
42constexpr auto operator%(Parser&& parser, Fun&& function) {
43 return transform(util::forward<Parser>(parser), util::forward<Fun>(function));
44}
45}
Definition parser_base.h:5
Definition transform.h:12
constexpr auto parse(Context &context) const
Definition transform.h:20
constexpr TransformParser(InPlace, P &&parser, F &&function)
Definition transform.h:15
Definition operations.h:114
Definition parser.h:10
Definition as_bool.h:8
Conditional< concepts::LanguageArray< RemoveReference< T > >, RemoveExtent< RemoveReference< T > > *, Conditional< concepts::LanguageFunction< RemoveReference< T > >, AddPointer< RemoveReference< T > >, RemoveCVRef< T > > > Decay
Definition language.h:574
Definition zstring_parser.h:10
Definition zstring_parser.h:9
constexpr auto transform
Definition transform.h:38
Definition vocab.h:96
constexpr auto in_place
Definition in_place.h:8
Definition transform.h:29
constexpr auto operator()(Parser &&parser, Fun &&function) const
Definition transform.h:31
Definition in_place.h:4