SeqAn3  3.0.2
The Modern C++ library for sequence analysis.
seqan3::alphabet_base< derived_type, size, char_t > Class Template Reference

A CRTP-base that makes defining a custom alphabet easier. More...

#include <seqan3/alphabet/alphabet_base.hpp>

+ Inheritance diagram for seqan3::alphabet_base< derived_type, size, char_t >:

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_baseoperator= (alphabet_base const &) noexcept=default
 Defaulted.
 
constexpr alphabet_baseoperator= (alphabet_base &&) noexcept=default
 Defaulted.
 
 ~alphabet_base () noexcept=default
 
Read functions
constexpr char_type to_char () const noexcept
 Return the letter as a character of char_type. More...
 
constexpr rank_type to_rank () const noexcept
 Return the letter's numeric value (rank in the alphabet). More...
 
Write functions
constexpr derived_type & assign_char (char_type const c) noexcept
 Assign from a character, implicitly converts invalid characters. More...
 
constexpr derived_type & assign_rank (rank_type const c) noexcept
 Assign from a numeric value. More...
 

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 friend bool operator== (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letters lhs and rhs are equal.
 
constexpr friend bool operator!= (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letters lhs and rhs are unequal.
 
constexpr friend bool operator< (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letter lhs is smaller than rhs.
 
constexpr friend bool operator> (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letter lhs is greater than rhs.
 
constexpr friend bool operator<= (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letter lhs is smaller than or equal to rhs.
 
constexpr friend bool operator>= (derived_type const lhs, derived_type const rhs) noexcept
 Checks whether the letter lhs is bigger than or equal to rhs.
 

Detailed Description

template<typename derived_type, size_t size, typename char_t = char>
class seqan3::alphabet_base< derived_type, size, char_t >

A CRTP-base that makes defining a custom alphabet easier.

Template Parameters
derived_typeThe CRTP parameter type.
sizeThe size of the alphabet.
char_tThe 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 tables as static member variables (can be private if the base class is befriended):

  • static std::array<char_type, alphabet_size> constexpr rank_to_char that defines for every possible rank value the corresponding char value.
  • static std::array<rank_type, 256> constexpr char_to_rank that defines for every possible character value the corresponding rank value (adapt size if char_type isn't char).

Example

This creates an alphabet called ab which has size two and the two letters 'A' and 'B':

class ab : public seqan3::alphabet_base<ab, 2>
{
private:
// map 0 -> A and 1 -> B
static std::array<char_type, alphabet_size> constexpr rank_to_char{'A', 'B'};
// map every letter to rank zero, except Bs
static std::array<rank_type, 256> constexpr char_to_rank
{
// initialise with an immediately evaluated lambda expression:
[]()
{
std::array<rank_type, 256> ret{}; // initialise all values with 0 / 'A'
// only 'b' and 'B' result in rank 1
ret['b'] = 1;
ret['B'] = 1;
return ret;
}()
};
// make the base class a friend so it can access the tables:
friend alphabet_base<ab, 2>;
};
static_assert(seqan3::alphabet<ab>);

Constructor & Destructor Documentation

◆ ~alphabet_base()

template<typename derived_type , size_t size, typename char_t = char>
seqan3::alphabet_base< derived_type, size, char_t >::~alphabet_base ( )
defaultnoexcept

Defaulted.

Member Function Documentation

◆ assign_char()

template<typename derived_type , size_t size, typename char_t = char>
constexpr derived_type& seqan3::alphabet_base< derived_type, size, char_t >::assign_char ( char_type const  c)
inlineconstexprnoexcept

Assign from a character, implicitly converts invalid characters.

Parameters
cThe character to be assigned.

Provides an implementation for seqan3::assign_char_to, required to model seqan3::alphabet.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ assign_rank()

template<typename derived_type , size_t size, typename char_t = char>
constexpr derived_type& seqan3::alphabet_base< derived_type, size, char_t >::assign_rank ( rank_type const  c)
inlineconstexprnoexcept

Assign from a numeric value.

Parameters
cThe rank to be assigned.

Provides an implementation for seqan3::assign_rank_to, required to model seqan3::semialphabet.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ to_char()

template<typename derived_type , size_t size, typename char_t = char>
constexpr char_type seqan3::alphabet_base< derived_type, size, char_t >::to_char ( ) const
inlineconstexprnoexcept

Return the letter as a character of char_type.

Provides an implementation for seqan3::to_char, required to model seqan3::alphabet.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ to_rank()

template<typename derived_type , size_t size, typename char_t = char>
constexpr rank_type seqan3::alphabet_base< derived_type, size, char_t >::to_rank ( ) const
inlineconstexprnoexcept

Return the letter's numeric value (rank in the alphabet).

Provides an implementation for seqan3::to_rank, required to model seqan3::semialphabet.

Complexity

Constant.

Exceptions

Guaranteed not to throw.


The documentation for this class was generated from the following file:
alphabet_base.hpp
Provides seqan3::alphabet_base.
seqan3::alphabet_base
A CRTP-base that makes defining a custom alphabet easier.
Definition: alphabet_base.hpp:54
std::array< char_type, alphabet_size >
alphabet
The generic alphabet concept that covers most data types used in ranges.
concept.hpp
Core alphabet concept and free function/type trait wrappers.