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.
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: 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.