SeqAn3  3.0.0
The Modern C++ library for sequence analysis.
rna15.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2019, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2019, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <vector>
16 
19 
20 // ------------------------------------------------------------------
21 // rna15
22 // ------------------------------------------------------------------
23 
24 namespace seqan3
25 {
26 
48 class rna15 : public nucleotide_base<rna15, 15>
49 {
50 private:
53 
55  friend base_t;
57  friend base_t::base_t;
59 
60 public:
64  constexpr rna15() noexcept = default;
65  constexpr rna15(rna15 const &) noexcept = default;
66  constexpr rna15(rna15 &&) noexcept = default;
67  constexpr rna15 & operator=(rna15 const &) noexcept = default;
68  constexpr rna15 & operator=(rna15 &&) noexcept = default;
69  ~rna15() noexcept = default;
70 
71  using base_t::base_t;
72 
74  constexpr rna15(dna15 const & r) noexcept
75  {
76  assign_rank(r.to_rank());
77  }
79 
80 protected:
82 
84  static constexpr char_type rank_to_char[alphabet_size]
85  {
86  'A',
87  'B',
88  'C',
89  'D',
90  'G',
91  'H',
92  'K',
93  'M',
94  'N',
95  'R',
96  'S',
97  'U',
98  'V',
99  'W',
100  'Y'
101  };
102 
104  static constexpr std::array<rank_type, 256> char_to_rank = dna15::char_to_rank;
105 
107  static const std::array<rna15, alphabet_size> complement_table;
108 };
109 
110 // ------------------------------------------------------------------
111 // containers
112 // ------------------------------------------------------------------
113 
117 
118 // ------------------------------------------------------------------
119 // literals
120 // ------------------------------------------------------------------
121 
130 constexpr rna15 operator""_rna15(char const c) noexcept
131 {
132  return rna15{}.assign_char(c);
133 }
134 
144 inline rna15_vector operator""_rna15(char const * s, std::size_t n)
145 {
146  rna15_vector r;
147  r.resize(n);
148 
149  for (size_t i = 0; i < n; ++i)
150  r[i].assign_char(s[i]);
151 
152  return r;
153 }
155 
156 // ------------------------------------------------------------------
157 // rna15 (deferred definition)
158 // ------------------------------------------------------------------
159 
160 constexpr std::array<rna15, rna15::alphabet_size> rna15::complement_table
161 {
162  'U'_rna15, // complement of 'A'_rna15
163  'V'_rna15, // complement of 'B'_rna15
164  'G'_rna15, // complement of 'C'_rna15
165  'H'_rna15, // complement of 'D'_rna15
166  'C'_rna15, // complement of 'G'_rna15
167  'D'_rna15, // complement of 'H'_rna15
168  'M'_rna15, // complement of 'K'_rna15
169  'K'_rna15, // complement of 'M'_rna15
170  'N'_rna15, // complement of 'N'_rna15
171  'Y'_rna15, // complement of 'R'_rna15
172  'S'_rna15, // complement of 'S'_rna15
173  'A'_rna15, // complement of 'U'_rna15
174  'B'_rna15, // complement of 'V'_rna15
175  'W'_rna15, // complement of 'W'_rna15
176  'R'_rna15 // complement of 'Y'_rna15
177 };
178 
179 } // namespace seqan3
constexpr rna15() noexcept=default
Defaulted.
The 15 letter DNA alphabet, containing all IUPAC smybols minus the gap.
Definition: dna15.hpp:48
The main SeqAn3 namespace.
~rna15() noexcept=default
Defaulted.
constexpr rna15(dna15 const &r) noexcept
Allow implicit construction from dna/rna of the same size.
Definition: rna15.hpp:74
T resize(T... args)
constexpr rna15 & operator=(rna15 const &) noexcept=default
Defaulted.
constexpr rna15 & assign_rank(rank_type const c) noexcept
Assign from a numeric value.
Definition: alphabet_base.hpp:166
Provides seqan3::nucleotide_base.
The 15 letter RNA alphabet, containing all IUPAC smybols minus the gap.
Definition: rna15.hpp:48
static detail::min_viable_uint_t< size > constexpr alphabet_size
The size of the alphabet, i.e. the number of different values it can take.
Definition: alphabet_base.hpp:175
Provides seqan3::dna15, container aliases and string literals.
A CRTP-base that refines seqan3::alphabet_base and is used by the nucleotides.
Definition: nucleotide_base.hpp:40
constexpr derived_type & assign_char(char_type const c) noexcept
Assign from a character, implicitly converts invalid characters.
Definition: alphabet_base.hpp:141
std::conditional_t< std::Same< char, void >, char, char > char_type
The char representation; conditional needed to make semi alphabet definitions legal.
Definition: alphabet_base.hpp:61