71namespace seqan3::detail::adl_only
75template <
typename ...args_t>
76void to_rank(args_t ...) =
delete;
80struct to_rank_cpo :
public detail::customisation_point_object<to_rank_cpo, 2>
83 using base_t = detail::customisation_point_object<to_rank_cpo, 2>;
91 template <
typename alphabet_t>
101 template <
typename alphabet_t>
111 template <
typename alphabet_t>
114 std::forward<alphabet_t>(
alphabet).to_rank()
164inline constexpr auto to_rank = detail::adl_only::to_rank_cpo{};
169template <
typename semi_alphabet_type>
171 requires requires { {
seqan3::to_rank(std::declval<semi_alphabet_type>()) }; }
181namespace seqan3::detail::adl_only
185template <
typename ...args_t>
190struct assign_rank_to_cpo :
public detail::customisation_point_object<assign_rank_to_cpo, 2>
193 using base_t = detail::customisation_point_object<assign_rank_to_cpo, 2>;
195 using base_t::base_t;
210 template <
typename alphabet_t>
231 template <
typename alphabet_t>
249 template <
typename alphabet_t>
254 static_cast<alphabet_t
>(std::forward<alphabet_t>(
alphabet).assign_rank(rank))
309inline constexpr auto assign_rank_to = detail::adl_only::assign_rank_to_cpo{};
317namespace seqan3::detail::adl_only
321template <
typename ...args_t>
322void to_char(args_t ...) =
delete;
326struct to_char_cpo :
public detail::customisation_point_object<to_char_cpo, 2>
329 using base_t = detail::customisation_point_object<to_char_cpo, 2>;
331 using base_t::base_t;
337 template <
typename alphabet_t>
347 template <
typename alphabet_t>
357 template <
typename alphabet_t>
360 std::forward<alphabet_t>(
alphabet).to_char()
411inline constexpr auto to_char = detail::adl_only::to_char_cpo{};
419template <
typename alphabet_type>
431namespace seqan3::detail::adl_only
435template <
typename ...args_t>
440struct assign_char_to_cpo :
public detail::customisation_point_object<assign_char_to_cpo, 2>
443 using base_t = detail::customisation_point_object<assign_char_to_cpo, 2>;
445 using base_t::base_t;
460 template <
typename alphabet_t>
481 template <
typename alphabet_t>
499 template <
typename alphabet_t>
504 static_cast<alphabet_t
>(
alphabet.assign_char(chr))
559inline constexpr auto assign_char_to = detail::adl_only::assign_char_to_cpo{};
567namespace seqan3::detail::adl_only
571template <
typename ...args_t>
578template <
typename alphabet_t>
579struct char_is_valid_for_cpo :
public detail::customisation_point_object<char_is_valid_for_cpo<alphabet_t>, 3>
582 using base_t = detail::customisation_point_object<char_is_valid_for_cpo<alphabet_t>, 3>;
584 using base_t::base_t;
589 template <
typename alphabet_type>
590 using alphabet_or_type_identity
599 template <
typename alphabet_type = alphabet_t>
600 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<3>, alphabet_char_t<alphabet_type>
const chr)
615 template <
typename alphabet_type = alphabet_t>
616 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<2>, alphabet_char_t<alphabet_type>
const chr)
625 template <
typename alphabet_type = alphabet_t>
626 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<1>, alphabet_char_t<alphabet_type>
const chr)
651 template <
typename alphabet_type = alphabet_t>
652 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<0>, alphabet_char_t<alphabet_type>
const chr)
711template <
typename alph_t>
713 requires requires { {
to_char(std::declval<alph_t>()) }; }
715inline constexpr auto char_is_valid_for = detail::adl_only::char_is_valid_for_cpo<alph_t>{};
723namespace seqan3::detail::adl_only
728struct assign_char_strictly_to_fn
731 template <
typename alphabet_t>
737 std::convertible_to, alphabet_t);
742 if (!seqan3::char_is_valid_for<alphabet_t>(chr))
787namespace seqan3::detail::adl_only
791template <
typename ...args_t>
798template <
typename alphabet_t>
799struct alphabet_size_cpo :
public detail::customisation_point_object<alphabet_size_cpo<alphabet_t>, 2>
802 using base_t = detail::customisation_point_object<alphabet_size_cpo<alphabet_t>, 2>;
804 using base_t::base_t;
809 template <
typename alphabet_type>
810 using alphabet_or_type_identity
812 seqan3::is_constexpr_default_constructible_v<std::remove_cvref_t<alphabet_type>>,
819 template <
typename alphabet_type = alphabet_t>
833 template <
typename alphabet_type = alphabet_t>
842 template <
typename alphabet_type = alphabet_t>
849#if SEQAN3_WORKAROUND_GCC_89953
850template <
typename alph_t>
851 requires requires { { alphabet_size_cpo<alph_t>{} }; }
852inline constexpr auto alphabet_size_obj = alphabet_size_cpo<alph_t>{};
903#if SEQAN3_WORKAROUND_GCC_89953
904template <
typename alph_t>
906 requires requires { { detail::adl_only::alphabet_size_cpo<alph_t>{} }; } &&
907 requires { { detail::adl_only::alphabet_size_obj<alph_t>() }; }
909inline constexpr auto alphabet_size = detail::adl_only::alphabet_size_obj<alph_t>();
911template <
typename alph_t>
913 requires requires { { detail::adl_only::alphabet_size_cpo<alph_t>{}() }; }
915inline constexpr auto alphabet_size = detail::adl_only::alphabet_size_cpo<alph_t>{}();
966 std::totally_ordered<t> &&
967 std::copy_constructible<t> &&
968 std::is_nothrow_copy_constructible_v<t> &&
971 { seqan3::alphabet_size<t> };
1015template <
typename t>
1054template <
typename t>
1102template <
typename t>
1134template <cereal_output_archive archive_t, semialphabet alphabet_t>
1135alphabet_rank_t<alphabet_t> CEREAL_SAVE_MINIMAL_FUNCTION_NAME(archive_t
const &, alphabet_t
const & l)
1153template <cereal_input_archive archive_t,
typename wrapped_alphabet_t>
1154void CEREAL_LOAD_MINIMAL_FUNCTION_NAME(archive_t
const &,
1155 wrapped_alphabet_t && l,
1156 alphabet_rank_t<detail::strip_cereal_wrapper_t<wrapped_alphabet_t>>
const & r)
1159 assign_rank_to(r,
static_cast<detail::strip_cereal_wrapper_t<wrapped_alphabet_t> &
>(l));
1167namespace seqan3::detail
1182template <
typename t>
1204template <
typename t>
1226template <
typename t>
1227SEQAN3_CONCEPT constexpr_alphabet = constexpr_semialphabet<t> &&
alphabet<t> &&
requires
1249template <
typename t>
1250SEQAN3_CONCEPT writable_constexpr_alphabet =
1251 constexpr_alphabet<t> && writable_constexpr_semialphabet<t> &&
writable_alphabet<t> &&
requires
Exceptions thrown by entities in the alphabet module.
Provides various type traits on generic types.
Adaptions of concepts from the Cereal library.
Helper utilities for defining customisation point objects (CPOs).
#define SEQAN3_CPO_OVERLOAD(...)
A macro that helps to define a seqan3::detail::customisation_point_object.
Definition: customisation_point.hpp:102
Provides concepts for core language types and relations that don't have concepts in C++20 (yet).
constexpr auto assign_char_to
Assign a character to an alphabet object.
Definition: concept.hpp:523
constexpr auto to_char
Return the char representation of an alphabet object.
Definition: concept.hpp:384
decltype(seqan3::to_rank(std::declval< semi_alphabet_type >())) alphabet_rank_t
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank.
Definition: concept.hpp:164
constexpr auto alphabet_size
A type trait that holds the size of a (semi-)alphabet.
Definition: concept.hpp:858
constexpr auto assign_rank_to
Assign a rank to an alphabet object.
Definition: concept.hpp:291
decltype(seqan3::to_char(std::declval< alphabet_type const >())) alphabet_char_t
The char_type of the alphabet; defined as the return type of seqan3::to_char.
Definition: concept.hpp:396
constexpr auto char_is_valid_for
Returns whether a character is in the valid set of a seqan3::alphabet (usually implies a bijective ma...
Definition: concept.hpp:667
constexpr auto assign_char_strictly_to
Assign a character to an alphabet object, throw if the character is not valid.
Definition: concept.hpp:731
constexpr auto to_rank
Return the rank representation of a (semi-)alphabet object.
Definition: concept.hpp:155
#define SEQAN3_IS_CONSTEXPR(...)
Returns true if the expression passed to this macro can be evaluated at compile time,...
Definition: basic.hpp:28
The generic alphabet concept that covers most data types used in ranges.
The basis for seqan3::alphabet, but requires only rank interface (not char).
Refines seqan3::alphabet and adds assignability.
A refinement of seqan3::semialphabet that adds assignability.
A namespace for third party and standard library specialisations of SeqAn customisation points.
Definition: char.hpp:44
The main SeqAn3 namespace.
Definition: cigar_operation_table.hpp:2
A type that can be specialised to provide customisation point implementations so that third party typ...
Definition: concept.hpp:49
An exception typically thrown by seqan3::alphabet::assign_char_strict.
Definition: exception.hpp:30
Provides traits to inspect some information of a type, for example its name.
Provides C++20 additions to the type_traits header.