40 class constexpr_pseudo_bitset :
public std::array<bool, N>
50 constexpr constexpr_pseudo_bitset
operator|(constexpr_pseudo_bitset rhs)
const noexcept
52 for (
size_t i = 0; i < N; ++i)
53 rhs[i] = rhs[i] || base_t::operator[](i);
58 constexpr constexpr_pseudo_bitset operator~() const noexcept
60 constexpr_pseudo_bitset ret{};
61 for (
size_t i = 0; i < N; ++i)
62 ret[i] = !base_t::operator[](i);
80 template <
char op,
typename condition_head_t,
typename ...condition_ts>
84 (condition_head_t::msg + ... +
85 (small_string{
" "} + small_string{{op, op,
'\0'}} + small_string{
" "} + condition_ts::msg)) +
94 template <
typename condition_t>
95 class char_predicate_base;
107 template <
typename condition_t>
109 SEQAN3_CONCEPT CharPredicate = requires
112 requires std::is_base_of_v<char_predicate_base<remove_cvref_t<condition_t>>,
113 remove_cvref_t<condition_t>>;
149 template <CharPredicate... condition_ts>
150 requires
sizeof...(condition_ts) >= 2
151 struct char_predicate_combiner;
153 template <CharPredicate condition_t>
154 struct char_predicate_negator;
163 template <
typename derived_t>
164 struct char_predicate_base
167 using data_t = constexpr_pseudo_bitset<257>;
173 template <CharPredicate rhs_t>
175 constexpr
auto operator||(rhs_t
const &)
const 177 return char_predicate_combiner<derived_t, rhs_t>{};
181 constexpr
auto operator!()
const 183 return char_predicate_negator<derived_t>{};
190 template <std::Integral value_t>
192 constexpr
bool operator()(value_t
const val)
const noexcept
193 requires
sizeof(value_t) == 1
197 template <std::Integral value_t>
198 constexpr
bool operator()(value_t
const val)
const noexcept
199 requires
sizeof(value_t) != 1
202 (
static_cast<decltype(EOF)
>(val) == EOF) ?
derived_t::data[256] :
false;
212 return derived_t::msg;
227 template <CharPredicate... condition_ts>
229 requires
sizeof...(condition_ts) >= 2
231 struct char_predicate_combiner :
public char_predicate_base<char_predicate_combiner<condition_ts...>>
237 using base_t = char_predicate_base<char_predicate_combiner<condition_ts...>>;
240 using typename base_t::data_t;
251 template <CharPredicate condition_t>
252 struct char_predicate_negator :
public char_predicate_base<char_predicate_negator<condition_t>>
255 static constexpr
auto msg = small_string{
'!'} + condition_t::msg;
258 using base_t = char_predicate_base<char_predicate_negator<condition_t>>;
261 using typename base_t::data_t;
263 static constexpr data_t
data = ~condition_t
::data;
278 template <u
int8_t
interval_first, u
int8_t
interval_last>
280 requires interval_first <= interval_last
282 struct is_in_interval_type :
public char_predicate_base<is_in_interval_type<interval_first, interval_last>>
285 static constexpr small_string msg = small_string{
"is_in_interval<'"} +
286 small_string{interval_first} +
287 small_string{
"', '"} +
288 small_string{interval_last} +
292 using base_t = char_predicate_base<is_in_interval_type<interval_first, interval_last>>;
295 using typename base_t::data_t;
297 static constexpr data_t
data = [] () constexpr
301 for (
size_t i = interval_first; i <= static_cast<size_t>(interval_last); ++i)
317 template <detail::ConstexprAlphabet alphabet_t>
318 struct is_in_alphabet_type :
public char_predicate_base<is_in_alphabet_type<alphabet_t>>
322 static constexpr
auto msg = small_string{
"is_in_alphabet<"} +
323 small_string{detail::get_display_name_v<alphabet_t>} +
327 using base_t = char_predicate_base<is_in_alphabet_type<alphabet_t>>;
330 using typename base_t::data_t;
332 static constexpr data_t
data = [] () constexpr
336 for (
size_t i = 0; i < 256; ++i)
337 ret[i] = char_is_valid_for<alphabet_t>(static_cast<uint8_t>(i));
352 template <
int char_v>
353 struct is_char_type :
public char_predicate_base<is_char_type<char_v>>
355 static_assert(char_v == EOF || static_cast<uint64_t>(char_v) < 256,
"TODO");
358 static constexpr
auto msg = small_string{
"is_char<'"} +
359 small_string{char_v} +
365 using base_t = char_predicate_base<is_char_type<char_v>>;
368 using typename base_t::data_t;
370 static constexpr data_t
data = [] () constexpr
377 ret[
static_cast<uint8_t
>(char_v)] =
true;
small_string constexpr condition_message_v
Defines a compound seqan3::small_string consisting of all given conditions separated by the operator-...
Definition: predicate_detail.hpp:82
::ranges::data data
Alias for ranges::data. Returns a pointer the block of data of a ContiguousRange. ...
Definition: ranges:184
Specifies whether the given callable is std::RegularInvocable and returns bool.
Definition: aligned_sequence_concept.hpp:35
A constexpr string implementation to manipulate string literals at compile time.
Provides various type traits on generic types.
auto operator|(validator1_type &&vali1, validator2_type &&vali2)
Enables the chaining of validators.
Definition: validators.hpp:889
Core alphabet concept and free function/type trait wrappers.
Static reflection for arbitrary types.