4 #ifndef LEXY_DSL_FLAGS_HPP_INCLUDED
5 #define LEXY_DSL_FLAGS_HPP_INCLUDED
16 return "duplicate flag";
23 template <const auto& Table,
typename Token,
typename Tag>
26 template <
typename FlagRule, auto Default,
typename DuplicateError =
void>
30 using _int_type = std::underlying_type_t<_enum_type>;
32 template <
typename NextParser>
35 template <
typename Context,
typename Reader>
42 auto begin = reader.position();
45 if (!bp.try_parse(context.control_block, reader))
68 template <
typename Context,
typename Reader,
typename... Args>
72 if (!
_parse(result, context, reader))
78 template <
typename Tag>
82 template <auto Default, const auto& Table,
typename Token,
typename Tag>
87 static_assert(std::is_same_v<enum_type, typename table_type::mapped_type>);
88 static_assert(std::is_enum_v<enum_type>);
90 return _flags<decltype(flag_rule), Default>{};
92 template <const auto& Table,
typename Token,
typename Tag>
96 using enum_type =
typename table_type::mapped_type;
97 static_assert(std::is_enum_v<enum_type>);
99 return _flags<decltype(flag_rule), enum_type{}>{};
105 template <
typename Rule, auto If, auto Else>
108 template <
typename NextParser>
111 template <
typename Context,
typename Reader,
typename... Args>
115 if (branch.try_parse(context.control_block, reader))
116 return branch.template finish<NextParser>(context, reader,
LEXY_FWD(args)..., If);
119 branch.cancel(context);
133 template <
typename Rule>
136 return flag<true, false>(rule);
140 #endif // LEXY_DSL_FLAGS_HPP_INCLUDED