SeqAn3
seqan3::dna4 Class Reference

The four letter DNA alphabet of A,C,G,T. More...

#include <seqan3/alphabet/nucleotide/dna4.hpp>

Inheritance diagram for seqan3::dna4:
[legend]

Public Types

using char_type = char_t
 The type of the alphabet when converted to char (e.g. via to_char()).
 
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()).
 

Public Member Functions

Constructors, destructor and assignment
constexpr dna4 () noexcept
 
constexpr dna4 (dna4 const &)=default
 
constexpr dna4 (dna4 &&)=default
 
constexpr dna4operator= (dna4 const &)=default
 
constexpr dna4operator= (dna4 &&)=default
 
 ~dna4 ()=default
 
template<std::Same< rna4 > t>
constexpr dna4 (t const &r) noexcept
 Allow implicit construction from dna/rna of the same size.
 
Read functions
constexpr dna4 complement () const noexcept
 Return the complement of the letter. More...
 
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 dna4assign_char (std::conditional_t< std::Same< char_type, void >, char, char_type > const c) noexcept
 Assign from a character. More...
 
constexpr dna4assign_rank (rank_type const c) noexcept
 Assign from a numeric value. More...
 

Static Public Attributes

static detail::min_viable_uint_t< size > constexpr value_size
 The size of the alphabet, i.e. the number of different values it can take.
 

Related Functions

(Note that these are not member functions.)

using dna4_vector = std::vector< dna4 >
 Alias for an std::vector of seqan3::dna4. More...
 
Literals
constexpr dna4 operator""_dna4 (char const c) noexcept
 The seqan3::dna4 char literal. More...
 
dna4_vector operator""_dna4 (char const *s, std::size_t n)
 The seqan3::dna4 string literal. More...
 
Requirements for seqan3::nucleotide_concept

You can expect these functions on all types that implement seqan3::nucleotide_concept.

nucleotide_type complement (nucleotide_type const alph)
 Returns the alphabet letter's complement value. More...
 
Requirements for seqan3::alphabet_concept

You can expect these functions on all types that implement seqan3::alphabet_concept.

template<typename alphabet_type >
using underlying_char_t = typename underlying_char< alphabet_type >::type
 The char_type of the alphabet. [type metafunction shortcut]. More...
 
char_type to_char (alphabet_concept const alph)
 Returns the alphabet letter's value in character representation. More...
 
alphabet_concept && assign_char (alphabet_concept &&alph, char_type const chr)
 Returns the alphabet letter's value in character representation. More...
 
Requirements for seqan3::semi_alphabet_concept

You can expect these functions on all types that implement seqan3::semi_alphabet_concept.

template<typename semi_alphabet_type >
using underlying_rank_t = typename underlying_rank< semi_alphabet_type >::type
 The rank_type of the semi_alphabet. [type metafunction shortcut]. More...
 
template<typename alphabet_type >
constexpr auto alphabet_size_v = alphabet_size<alphabet_type>::value
 The size of the alphabet. [value metafunction shortcut]. More...
 
rank_type to_rank (semi_alphabet_concept const alph)
 Returns the alphabet letter's value in rank representation. More...
 
semi_alphabet_concept && assign_rank (semi_alphabet_concept &&alph, rank_type const rank)
 Returns the alphabet letter's value in rank representation. More...
 
Requirements for std::Swappable

You can expect these functions on all types that implement std::Swappable.

void swap (t &lhs, t &rhs)
 Swaps the contents of two objects. More...
 
Requirements for std::EqualityComparable

You can expect these functions on all types that implement std::Equality_comparable.

bool operator== (type const &lhs, type const &rhs)
 (In-)Equality comparison. More...
 
bool operator!= (type const &lhs, type const &rhs)
 (In-)Equality comparison. More...
 
Requirements for std::StrictTotallyOrdered

You can expect these functions on all types that implement std::StrictTotallyOrdered.

bool operator< (type const &lhs, type const &rhs)
 Less-than, greater-than and -or-equal comparisons. More...
 
bool operator<= (type const &lhs, type const &rhs)
 Less-than, greater-than and -or-equal comparisons. More...
 
bool operator> (type const &lhs, type const &rhs)
 Less-than, greater-than and -or-equal comparisons. More...
 
bool operator>= (type const &lhs, type const &rhs)
 Less-than, greater-than and -or-equal comparisons. More...
 

Detailed Description

The four letter DNA alphabet of A,C,G,T.

Note that you can assign 'U' as a character to dna4 and it will silently be converted to 'T'.

The alphabet may be brace initialized from the static letter members. Note that you cannot assign the alphabet by using letters of type char, but you instead have to use the function seqan3::dna4::assign_char().

dna4 my_letter{'A'_dna4};
// doesn't work:
// dna4 my_letter{'A'};
my_letter.assign_char('C'); // <- this does!
my_letter.assign_char('F'); // unknown characters are implicitly converted to A.
if (my_letter.to_char() == 'A')
debug_stream << "yeah\n"; // "yeah";

Member Function Documentation

◆ assign_char()

constexpr dna4 & seqan3::alphabet_base< dna4 , size, char >::assign_char ( std::conditional_t< std::Same< char_type, void >, char, char_type > const  c)
inlinenoexceptinherited

Assign from a character.

Satisfies the seqan3::alphabet_concept::assign_char() requirement via the seqan3::assign_char() wrapper.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ assign_rank()

constexpr dna4 & seqan3::alphabet_base< dna4 , size, char >::assign_rank ( rank_type const  c)
inlinenoexceptinherited

Assign from a numeric value.

Satisfies the seqan3::semi_alphabet_concept::assign_rank() requirement via the seqan3::assign_rank() wrapper.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ complement()

constexpr dna4 seqan3::nucleotide_base< dna4 , size >::complement ( ) const
inlinenoexceptinherited

Return the complement of the letter.

See Nucleotide for the actual values.

Satisfies the seqan3::nucleotide_concept::complement() requirement via the seqan3::complement() wrapper.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ to_char()

constexpr char_type seqan3::alphabet_base< dna4 , size, char >::to_char ( ) const
inlinenoexceptinherited

Return the letter as a character of char_type.

Satisfies the seqan3::alphabet_concept::to_char() requirement via the seqan3::to_char() wrapper.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

◆ to_rank()

constexpr rank_type seqan3::alphabet_base< dna4 , size, char >::to_rank ( ) const
inlinenoexceptinherited

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

Satisfies the seqan3::semi_alphabet_concept::to_rank() requirement via the to_rank() wrapper.

Complexity

Constant.

Exceptions

Guaranteed not to throw.

Friends And Related Function Documentation

◆ complement()

nucleotide_type complement ( nucleotide_type const  alph)
related

Returns the alphabet letter's complement value.

Parameters
alphThe alphabet letter for whom you wish to receive the complement.
Returns
The letter's complement, e.g. 'T' for 'A'.
Attention
This is a concept requirement, not an actual function (however types satisfying this concept will provide an implementation).

◆ dna4_vector

using dna4_vector = std::vector<dna4>
related

Alias for an std::vector of seqan3::dna4.

◆ operator""_dna4() [1/2]

constexpr dna4 operator""_dna4 ( char const  c)
related

The seqan3::dna4 char literal.

Returns
seqan3::dna4

◆ operator""_dna4() [2/2]

dna4_vector operator""_dna4 ( char const *  s,
std::size_t  n 
)
related

The seqan3::dna4 string literal.

Returns
seqan3::dna4_vector

You can use this string literal to easily assign to dna4_vector:

// these don't work:
// dna4_vector foo{"ACGTTA"};
// dna4_vector bar = "ACGTTA";
// but these do:
dna4_vector foo{"ACGTTA"_dna4};
dna4_vector bar = "ACGTTA"_dna4;
auto bax = "ACGTTA"_dna4;

The documentation for this class was generated from the following file: