24 namespace seqan3::detail
36 char constexpr sam_tag_type_char[12] = {
'A',
'i',
'f',
'Z',
'H',
'B',
'B',
'B',
'B',
'B',
'B',
'B'};
38 char constexpr sam_tag_type_char_extra[12] = {
'\0',
'\0',
'\0',
'\0',
'\0',
'c',
'C',
's',
'S',
'i',
'I',
'f'};
44 inline namespace literals
67 #ifdef __cpp_nontype_template_parameter_class
68 template <small_
string<2> str>
69 constexpr uint16_t
operator""_tag()
72 #pragma GCC diagnostic push
73 #pragma GCC diagnostic ignored "-Wpedantic"
74 template <
typename char_t, char_t ...s>
75 constexpr uint16_t
operator""_tag()
77 static_assert(std::same_as<char_t, char>,
"Illegal SAM tag: Type must be char.");
79 #pragma GCC diagnostic pop
82 static_assert(str.size() == 2,
"Illegal SAM tag: Exactly two characters must be given.");
84 char constexpr char0 = str[0];
85 char constexpr char1 = str[1];
88 "Illegal SAM tag: a SAM tag must match /[A-Za-z][A-Za-z0-9]/.");
90 return static_cast<uint16_t
>(char0) * 256 +
static_cast<uint16_t
>(char1);
172 template <u
int16_t tag_value>
181 template <u
int16_t tag_value>
185 template <>
struct sam_tag_type<"AM"_tag> {
using type = int32_t; };
186 template <>
struct sam_tag_type<"AS"_tag> {
using type = int32_t; };
187 template <>
struct sam_tag_type<"BC"_tag> {
using type =
std::string; };
188 template <>
struct sam_tag_type<"BQ"_tag> {
using type =
std::string; };
189 template <>
struct sam_tag_type<"BZ"_tag> {
using type =
std::string; };
190 template <>
struct sam_tag_type<"CB"_tag> {
using type =
std::string; };
191 template <>
struct sam_tag_type<"CC"_tag> {
using type =
std::string; };
193 template <>
struct sam_tag_type<"CM"_tag> {
using type = int32_t; };
194 template <>
struct sam_tag_type<"CO"_tag> {
using type =
std::string; };
195 template <>
struct sam_tag_type<"CP"_tag> {
using type = int32_t; };
196 template <>
struct sam_tag_type<"CQ"_tag> {
using type =
std::string; };
197 template <>
struct sam_tag_type<"CR"_tag> {
using type =
std::string; };
198 template <>
struct sam_tag_type<"CS"_tag> {
using type =
std::string; };
199 template <>
struct sam_tag_type<"CT"_tag> {
using type =
std::string; };
200 template <>
struct sam_tag_type<"CY"_tag> {
using type =
std::string; };
201 template <>
struct sam_tag_type<"E2"_tag> {
using type =
std::string; };
202 template <>
struct sam_tag_type<"FI"_tag> {
using type = int32_t; };
203 template <>
struct sam_tag_type<"FS"_tag> {
using type =
std::string; };
210 template <>
struct sam_tag_type<"H0"_tag> {
using type = int32_t; };
211 template <>
struct sam_tag_type<"H1"_tag> {
using type = int32_t; };
212 template <>
struct sam_tag_type<"H2"_tag> {
using type = int32_t; };
213 template <>
struct sam_tag_type<"HI"_tag> {
using type = int32_t; };
214 template <>
struct sam_tag_type<"IH"_tag> {
using type = int32_t; };
215 template <>
struct sam_tag_type<"LB"_tag> {
using type =
std::string; };
216 template <>
struct sam_tag_type<"MC"_tag> {
using type =
std::string; };
217 template <>
struct sam_tag_type<"MD"_tag> {
using type =
std::string; };
221 template <>
struct sam_tag_type<"MI"_tag> {
using type =
std::string; };
222 template <>
struct sam_tag_type<"MQ"_tag> {
using type = int32_t; };
223 template <>
struct sam_tag_type<"NH"_tag> {
using type = int32_t; };
224 template <>
struct sam_tag_type<"NM"_tag> {
using type = int32_t; };
225 template <>
struct sam_tag_type<"OC"_tag> {
using type =
std::string; };
226 template <>
struct sam_tag_type<"OP"_tag> {
using type = int32_t; };
227 template <>
struct sam_tag_type<"OQ"_tag> {
using type =
std::string; };
228 template <>
struct sam_tag_type<"OX"_tag> {
using type =
std::string; };
229 template <>
struct sam_tag_type<"PG"_tag> {
using type =
std::string; };
230 template <>
struct sam_tag_type<"PQ"_tag> {
using type = int32_t; };
231 template <>
struct sam_tag_type<"PT"_tag> {
using type =
std::string; };
232 template <>
struct sam_tag_type<"PU"_tag> {
using type =
std::string; };
233 template <>
struct sam_tag_type<"Q2"_tag> {
using type =
std::string; };
234 template <>
struct sam_tag_type<"QT"_tag> {
using type =
std::string; };
235 template <>
struct sam_tag_type<"QX"_tag> {
using type =
std::string; };
236 template <>
struct sam_tag_type<"R2"_tag> {
using type =
std::string; };
237 template <>
struct sam_tag_type<"RG"_tag> {
using type =
std::string; };
238 template <>
struct sam_tag_type<"RT"_tag> {
using type =
std::string; };
239 template <>
struct sam_tag_type<"RX"_tag> {
using type =
std::string; };
243 template <>
struct sam_tag_type<"SA"_tag> {
using type =
std::string; };
244 template <>
struct sam_tag_type<"SM"_tag> {
using type = int32_t; };
248 template <>
struct sam_tag_type<"TC"_tag> {
using type = int32_t; };
249 template <>
struct sam_tag_type<"U2"_tag> {
using type =
std::string; };
250 template <>
struct sam_tag_type<"UQ"_tag> {
using type = int32_t; };
357 template <u
int16_t tag>
363 if ((*this).count(tag) == 0)
366 return std::get<sam_tag_type_t<tag>>((*this)[tag]);
370 template <u
int16_t tag>
376 if ((*this).count(tag) == 0)
379 return std::get<sam_tag_type_t<tag>>(
std::move((*
this)[tag]));
384 template <u
int16_t tag>
388 auto const &
get() const &
390 return std::get<sam_tag_type_t<tag>>((*this).at(tag));
395 template <u
int16_t tag>
399 auto const &&
get() const &&
401 return std::get<sam_tag_type_t<tag>>(
std::move((*this).at(tag)));
The SAM tag dictionary class that stores all optional SAM fields.
Definition: sam_tag_dictionary.hpp:332
Implements a small string that can be used for compile time computations.
Definition: small_string.hpp:44
Provides type traits for working with templates.
Provides concepts for core language types and relations that don't have concepts in C++20 (yet).
constexpr auto is_alnum
Checks whether c is a alphanumeric character.
Definition: predicate.hpp:220
constexpr auto is_alpha
Checks whether c is a alphabetical character.
Definition: predicate.hpp:239
typename sam_tag_type< tag_value >::type sam_tag_type_t
Short cut helper for seqan3::sam_tag_type::type.
Definition: sam_tag_dictionary.hpp:182
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:74
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: configuration.hpp:429
The generic base class.
Definition: sam_tag_dictionary.hpp:174
Provides character predicates for tokenisation.
A constexpr string implementation to manipulate string literals at compile time.