68namespace seqan3::detail::adl_only
72template <
typename... args_t>
73void to_rank(args_t...) =
delete;
77struct to_rank_cpo :
public detail::customisation_point_object<to_rank_cpo, 2>
80 using base_t = detail::customisation_point_object<to_rank_cpo, 2>;
88 template <
typename alphabet_t>
97 template <
typename alphabet_t>
106 template <
typename alphabet_t>
108 std::forward<alphabet_t>(
alphabet).to_rank()
158inline constexpr auto to_rank = detail::adl_only::to_rank_cpo{};
166template <
typename semi_alphabet_type>
180namespace seqan3::detail::adl_only
184template <
typename... args_t>
189struct assign_rank_to_cpo :
public detail::customisation_point_object<assign_rank_to_cpo, 2>
192 using base_t = detail::customisation_point_object<assign_rank_to_cpo, 2>;
194 using base_t::base_t;
209 template <
typename alphabet_t>
210 static constexpr auto
228 template <
typename alphabet_t>
229 static constexpr auto
244 template <
typename alphabet_t>
245 static constexpr auto
247 static_cast<alphabet_t
>(std::forward<alphabet_t>(
alphabet).assign_rank(rank))
302inline constexpr auto assign_rank_to = detail::adl_only::assign_rank_to_cpo{};
310namespace seqan3::detail::adl_only
314template <
typename... args_t>
315void to_char(args_t...) =
delete;
319struct to_char_cpo :
public detail::customisation_point_object<to_char_cpo, 2>
322 using base_t = detail::customisation_point_object<to_char_cpo, 2>;
324 using base_t::base_t;
330 template <
typename alphabet_t>
339 template <
typename alphabet_t>
348 template <
typename alphabet_t>
350 std::forward<alphabet_t>(
alphabet).to_char()
401inline constexpr auto to_char = detail::adl_only::to_char_cpo{};
409template <
typename alphabet_type>
410 requires requires (alphabet_type
const a) {
423namespace seqan3::detail::adl_only
427template <
typename... args_t>
432struct assign_char_to_cpo :
public detail::customisation_point_object<assign_char_to_cpo, 2>
435 using base_t = detail::customisation_point_object<assign_char_to_cpo, 2>;
437 using base_t::base_t;
452 template <
typename alphabet_t>
453 static constexpr auto
471 template <
typename alphabet_t>
472 static constexpr auto
487 template <
typename alphabet_t>
488 static constexpr auto
490 static_cast<alphabet_t
>(
alphabet.assign_char(chr))
545inline constexpr auto assign_char_to = detail::adl_only::assign_char_to_cpo{};
553namespace seqan3::detail::adl_only
557template <
typename... args_t>
564template <
typename alphabet_t>
565struct char_is_valid_for_cpo :
public detail::customisation_point_object<char_is_valid_for_cpo<alphabet_t>, 3>
568 using base_t = detail::customisation_point_object<char_is_valid_for_cpo<alphabet_t>, 3>;
570 using base_t::base_t;
575 template <
typename alphabet_type>
576 using alphabet_or_type_identity =
585 template <
typename alphabet_type = alphabet_t>
586 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<3>, alphabet_char_t<alphabet_type>
const chr)(
600 template <
typename alphabet_type = alphabet_t>
601 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<2>, alphabet_char_t<alphabet_type>
const chr)(
609 template <
typename alphabet_type = alphabet_t>
610 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<1>, alphabet_char_t<alphabet_type>
const chr)(
634 template <
typename alphabet_type = alphabet_t>
635 static constexpr auto SEQAN3_CPO_OVERLOAD(priority_tag<0>, alphabet_char_t<alphabet_type>
const chr)(
693template <
typename alph_t>
696 to_char(std::declval<alph_t>())
699inline constexpr auto char_is_valid_for = detail::adl_only::char_is_valid_for_cpo<alph_t>{};
707namespace seqan3::detail::adl_only
712struct assign_char_strictly_to_fn
715 template <
typename alphabet_t>
717 requires requires () {
720 } -> std::convertible_to<alphabet_t>;
722 seqan3::char_is_valid_for<alphabet_t>(chr)
723 } -> std::same_as<bool>;
726 if (!seqan3::char_is_valid_for<alphabet_t>(chr))
771namespace seqan3::detail::adl_only
775template <
typename... args_t>
782template <
typename alphabet_t>
783struct alphabet_size_cpo :
public detail::customisation_point_object<alphabet_size_cpo<alphabet_t>, 2>
786 using base_t = detail::customisation_point_object<alphabet_size_cpo<alphabet_t>, 2>;
788 using base_t::base_t;
793 template <
typename alphabet_type>
794 using alphabet_or_type_identity =
796 && seqan3::is_constexpr_default_constructible_v<std::remove_cvref_t<alphabet_type>>,
803 template <
typename alphabet_type = alphabet_t>
816 template <
typename alphabet_type = alphabet_t>
824 template <
typename alphabet_type = alphabet_t>
878template <
typename alph_t>
881 detail::adl_only::alphabet_size_cpo<alph_t>{}()
884inline constexpr auto alphabet_size = detail::adl_only::alphabet_size_cpo<alph_t>{}();
933concept semialphabet = std::totally_ordered<t> && std::copy_constructible<t> && std::is_nothrow_copy_constructible_v<t>
936 seqan3::alphabet_size<t>
1023template <
typename t>
1072template <
typename t>
1105template <cereal_output_archive archive_t, semialphabet alphabet_t>
1106alphabet_rank_t<alphabet_t> CEREAL_SAVE_MINIMAL_FUNCTION_NAME(archive_t
const &, alphabet_t
const & l)
1124template <cereal_input_archive archive_t,
typename wrapped_alphabet_t>
1125void CEREAL_LOAD_MINIMAL_FUNCTION_NAME(archive_t
const &,
1126 wrapped_alphabet_t && l,
1127 alphabet_rank_t<detail::strip_cereal_wrapper_t<wrapped_alphabet_t>>
const & r)
1130 assign_rank_to(r,
static_cast<detail::strip_cereal_wrapper_t<wrapped_alphabet_t> &
>(l));
1138namespace seqan3::detail
1153template <
typename t>
1154concept constexpr_semialphabet =
1175template <
typename t>
1176concept writable_constexpr_semialphabet =
1198template <
typename t>
1199concept constexpr_alphabet =
1200 constexpr_semialphabet<t> &&
alphabet<t> &&
requires {
1221template <
typename t>
1222concept writable_constexpr_alphabet =
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:104
constexpr auto assign_char_to
Assign a character to an alphabet object.
Definition alphabet/concept.hpp:521
constexpr auto to_char
Return the char representation of an alphabet object.
Definition alphabet/concept.hpp:383
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 alphabet/concept.hpp:166
constexpr auto alphabet_size
A type trait that holds the size of a (semi-)alphabet.
Definition alphabet/concept.hpp:846
constexpr auto assign_rank_to
Assign a rank to an alphabet object.
Definition alphabet/concept.hpp:290
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 alphabet/concept.hpp:397
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 alphabet/concept.hpp:667
constexpr auto assign_char_strictly_to
Assign a character to an alphabet object, throw if the character is not valid.
Definition alphabet/concept.hpp:731
constexpr auto to_rank
Return the rank representation of a (semi-)alphabet object.
Definition alphabet/concept.hpp:152
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:39
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
A type that can be specialised to provide customisation point implementations so that third party typ...
Definition alphabet/concept.hpp:46
An exception typically thrown by seqan3::alphabet::assign_char_strict.
Definition alphabet/exception.hpp:27
Provides traits to inspect some information of a type, for example its name.
Provides concepts that do not have equivalents in C++20.