SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
|
A CRTP-base that makes defining a custom alphabet easier. More...
#include <seqan3/alphabet/alphabet_base.hpp>
Public Member Functions | |
Constructors, destructor and assignment | |
constexpr | alphabet_base () noexcept=default |
Defaulted. | |
constexpr | alphabet_base (alphabet_base const &) noexcept=default |
Defaulted. | |
constexpr | alphabet_base (alphabet_base &&) noexcept=default |
Defaulted. | |
constexpr alphabet_base & | operator= (alphabet_base const &) noexcept=default |
Defaulted. | |
constexpr alphabet_base & | operator= (alphabet_base &&) noexcept=default |
Defaulted. | |
~alphabet_base () noexcept=default | |
Defaulted. | |
Read functions | |
constexpr char_type | to_char () const noexcept |
Return the letter as a character of char_type. | |
constexpr rank_type | to_rank () const noexcept |
Return the letter's numeric value (rank in the alphabet). | |
Write functions | |
constexpr derived_type & | assign_char (char_type const chr) noexcept |
Assign from a character, implicitly converts invalid characters. | |
constexpr derived_type & | assign_rank (rank_type const c) noexcept |
Assign from a numeric value. | |
Static Public Attributes | |
static constexpr detail::min_viable_uint_t< size > | alphabet_size = size |
The size of the alphabet, i.e. the number of different values it can take. | |
Protected Types | |
Member types | |
using | char_type = std::conditional_t< std::same_as< char_t, void >, char, char_t > |
The char representation; conditional needed to make semi alphabet definitions legal. | |
using | rank_type = detail::min_viable_uint_t< size - 1 > |
The type of the alphabet when represented as a number (e.g. via to_rank()). | |
Friends | |
Comparison operators | |
constexpr bool | operator== (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letters lhs and rhs are equal. | |
constexpr bool | operator!= (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letters lhs and rhs are unequal. | |
constexpr bool | operator< (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letter lhs is smaller than rhs . | |
constexpr bool | operator> (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letter lhs is greater than rhs . | |
constexpr bool | operator<= (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letter lhs is smaller than or equal to rhs . | |
constexpr bool | operator>= (derived_type const lhs, derived_type const rhs) noexcept |
Checks whether the letter lhs is bigger than or equal to rhs . | |
A CRTP-base that makes defining a custom alphabet easier.
derived_type | The CRTP parameter type. |
size | The size of the alphabet. |
char_t | The character type of the alphabet (set this to void when defining just a seqan3::semialphabet). |
You can use this class to define your own alphabet, but types are not required to be based on it to model seqan3::alphabet, it is purely a way to avoid code duplication.
The base class represents the alphabet value as the rank and automatically deduces the rank type from the size and defines all required member functions. The derived type needs to define only the following two static member functions (can be private if the base class is befriended):
static constexpr char_type rank_to_char(rank_type const rank);
that defines for every possible rank value the corresponding char value. (The implementation can be a lookup-table or an arithmetic expression.)static constexpr rank_type char_to_rank(char_type const chr);
that defines for every possible character value the corresponding rank value (adapt size if char_type isn't char
). (The implementation can be a lookup-table or an arithmetic expression.)This creates an alphabet called ab
which has size two and the two letters 'A' and 'B':
|
protected |
The char representation; conditional needed to make semi alphabet definitions legal.
We need a return type for seqan3::alphabet_base::to_char and seqan3::alphabet_base::assign_char other than void to make these in-class definitions valid when char_t
is void.
|
protected |
The type of the alphabet when represented as a number (e.g. via to_rank()).
|
inlineconstexprnoexcept |
Assign from a character, implicitly converts invalid characters.
chr | The character to be assigned. |
Provides an implementation for seqan3::assign_char_to, required to model seqan3::alphabet.
Constant.
Guaranteed not to throw.
|
inlineconstexprnoexcept |
Assign from a numeric value.
c | The rank to be assigned. |
Provides an implementation for seqan3::assign_rank_to, required to model seqan3::semialphabet.
Constant.
Guaranteed not to throw.
|
inlineconstexprnoexcept |
Return the letter as a character of char_type.
Provides an implementation for seqan3::to_char, required to model seqan3::alphabet.
Constant.
Guaranteed not to throw.
|
inlineconstexprnoexcept |
Return the letter's numeric value (rank in the alphabet).
Provides an implementation for seqan3::to_rank, required to model seqan3::semialphabet.
Constant.
Guaranteed not to throw.
|
friend |
Checks whether the letters lhs
and rhs
are unequal.
|
friend |
Checks whether the letter lhs
is smaller than rhs
.
|
friend |
Checks whether the letter lhs
is smaller than or equal to rhs
.
|
friend |
Checks whether the letters lhs
and rhs
are equal.
|
friend |
Checks whether the letter lhs
is greater than rhs
.
|
friend |
Checks whether the letter lhs
is bigger than or equal to rhs
.
|
staticconstexpr |
The size of the alphabet, i.e. the number of different values it can take.