The CRTP base for a combined alphabet that contains multiple values of different alphabets at the same time..
More...
|
|
These overloads enable comparison for all types that a component type is comparable with.
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator== (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_eq_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator== (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_eq_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator!= (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_eq_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator!= (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_eq_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator< (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator< (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator<= (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator<= (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator> (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator> (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator>= (derived_type_t const lhs, indirect_component_type const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
template<typename derived_type_t , typename indirect_component_type > |
constexpr auto | operator>= (indirect_component_type const lhs, derived_type_t const rhs) noexcept -> std::enable_if_t< detail::tuple_order_guard< derived_type_t, derived_type, indirect_component_type, component_types... >, bool > |
| Comparison against types comparable with components.
|
|
|
|
- Attention
- Please do not directly use the CRTP base class. The functions are only public for the usage in their derived classes (e.g. seqan3::qualified, seqan3::masked, seqan3::structure_rna and seqan3::structure_aa).
|
constexpr | alphabet_tuple_base (component_types... components) noexcept |
| Construction from initialiser-list.
|
|
template<typename component_type >
requires (!std::is_base_of_v<alphabet_tuple_base, component_type>) && is_unique_component<component_type> |
constexpr | alphabet_tuple_base (component_type const alph) noexcept |
| Construction via a value of one of the components.
|
|
template<typename indirect_component_type >
requires ((detail::instantiate_if_v< detail::lazy<std::is_convertible, indirect_component_type, component_types>, detail::tuple_general_guard<derived_type, indirect_component_type, component_types...>> || ...)) |
constexpr | alphabet_tuple_base (indirect_component_type const alph) noexcept |
| Construction via a value of a subtype that is assignable to one of the components.
|
|
template<typename component_type >
requires (!std::derived_from<component_type, alphabet_tuple_base>) && is_unique_component<component_type> |
constexpr derived_type & | operator= (component_type const alph) noexcept |
| Assignment via a value of one of the components.
|
|
template<typename indirect_component_type >
requires ((!std::derived_from<indirect_component_type, alphabet_tuple_base>) && (!is_unique_component<indirect_component_type>) && (std::assignable_from<component_types, indirect_component_type> || ...)) |
constexpr derived_type & | operator= (indirect_component_type const alph) noexcept |
| Assignment via a value of a subtype that is assignable to one of the components.
|
|
template<
typename derived_type, typename... component_types>
requires (detail::writable_constexpr_semialphabet<
component_types> && ...) && (std::regular<
component_types> && ...)
class seqan3::alphabet_tuple_base< derived_type, component_types >
The CRTP base for a combined alphabet that contains multiple values of different alphabets at the same time.
.
- Template Parameters
-
component_types | Types of letters; must model std::regular and seqan3::writable_semialphabet and all required function calls need to be callable in constexpr -context. |
This data structure is a CRTP base class for combined alphabets, where the different alphabet letters exist independently as a components, similar to a tuple.
Short description:
- combines multiple alphabets as independent components, similar to a tuple;
- models seqan3::tuple_like, i.e. provides a get interface to its component_list;
- is itself a seqan3::writable_semialphabet, but most derived types implement the full seqan3::writable_alphabet;
- its alphabet size is the product of the individual sizes;
- constructible, assignable and comparable with each component type and also all types that these are constructible/assignable/comparable with;
- explicitly convertible to each of its component types
- Attention
- This is a "pure base class", you cannot instantiate it, you can only inherit from it. Most likely you are interested in using one of it's descendants like seqan3::qualified or seqan3::masked.
- See also
- qualified
-
masked
This entity is stable. Since version 3.1.