71 namespace seqan3::detail::adl_only
75 template <
typename ...args_t>
76 void to_rank(args_t ...) =
delete;
80 struct 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()
164 inline constexpr
auto to_rank = detail::adl_only::to_rank_cpo{};
169 template <
typename semi_alphabet_type>
171 requires requires { {
seqan3::to_rank(std::declval<semi_alphabet_type>()) }; }
181 namespace seqan3::detail::adl_only
185 template <
typename ...args_t>
190 struct 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))
309 inline constexpr
auto assign_rank_to = detail::adl_only::assign_rank_to_cpo{};
317 namespace seqan3::detail::adl_only
321 template <
typename ...args_t>
322 void to_char(args_t ...) =
delete;
326 struct 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()
411 inline constexpr
auto to_char = detail::adl_only::to_char_cpo{};
419 template <
typename alphabet_type>
431 namespace seqan3::detail::adl_only
435 template <
typename ...args_t>
440 struct 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))
559 inline constexpr
auto assign_char_to = detail::adl_only::assign_char_to_cpo{};
567 namespace seqan3::detail::adl_only
571 template <
typename ...args_t>
578 template <
typename alphabet_t>
579 struct 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)
711 template <
typename alph_t>
713 requires requires { {
to_char(std::declval<alph_t>()) }; }
715 inline constexpr
auto char_is_valid_for = detail::adl_only::char_is_valid_for_cpo<alph_t>{};
723 namespace seqan3::detail::adl_only
728 struct 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))
787 namespace seqan3::detail::adl_only
791 template <
typename ...args_t>
798 template <
typename alphabet_t>
799 struct 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
850 template <
typename alph_t>
851 requires requires { { alphabet_size_cpo<alph_t>{} }; }
852 inline constexpr
auto alphabet_size_obj = alphabet_size_cpo<alph_t>{};
903 #if SEQAN3_WORKAROUND_GCC_89953
904 template <
typename alph_t>
906 requires requires { { detail::adl_only::alphabet_size_cpo<alph_t>{} }; } &&
907 requires { { detail::adl_only::alphabet_size_obj<alph_t>() }; }
909 inline constexpr
auto alphabet_size = detail::adl_only::alphabet_size_obj<alph_t>();
911 template <
typename alph_t>
913 requires requires { { detail::adl_only::alphabet_size_cpo<alph_t>{}() }; }
915 inline constexpr
auto alphabet_size = detail::adl_only::alphabet_size_cpo<alph_t>{}();
964 template <
typename t>
966 std::totally_ordered<t> &&
967 std::copy_constructible<t> &&
968 std::is_nothrow_copy_constructible_v<t> &&
971 { seqan3::alphabet_size<t> };
1015 template <
typename t>
1054 template <
typename t>
1102 template <
typename t>
1134 template <cereal_output_archive archive_t, semialphabet alphabet_t>
1135 alphabet_rank_t<alphabet_t> CEREAL_SAVE_MINIMAL_FUNCTION_NAME(archive_t
const &, alphabet_t
const & l)
1153 template <cereal_input_archive archive_t,
typename wrapped_alphabet_t>
1154 void 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));
1167 namespace seqan3::detail
1182 template <
typename t>
1204 template <
typename t>
1226 template <
typename t>
1227 SEQAN3_CONCEPT constexpr_alphabet = constexpr_semialphabet<t> &&
alphabet<t> && requires
1249 template <
typename t>
1250 SEQAN3_CONCEPT writable_constexpr_alphabet =
1251 constexpr_alphabet<t> && writable_constexpr_semialphabet<t> &&
writable_alphabet<t> && requires
Exceptions thrown by entities in the alphabet module.
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:113
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: aligned_sequence_concept.hpp:29
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.
Provides various type traits on generic types.