22namespace seqan3::detail
41constexpr char sam_tag_type_char[12] = {
'A',
'i',
'f',
'Z',
'H',
'B',
'B',
'B',
'B',
'B',
'B',
'B'};
44constexpr char sam_tag_type_char_extra[12] = {
'\0',
'\0',
'\0',
'\0',
'\0',
'c',
'C',
's',
'S',
'i',
'I',
'f'};
50inline namespace literals
72template <small_
string<2> str>
73constexpr uint16_t
operator""_tag()
75 static_assert(str.size() == 2,
"Illegal SAM tag: Exactly two characters must be given.");
77 constexpr char char0 = str[0];
78 constexpr char char1 = str[1];
82 return static_cast<uint16_t
>(
char0) * 256 +
static_cast<uint16_t
>(
char1);
165template <u
int16_t tag_value>
174template <u
int16_t tag_value>
181template <>
struct sam_tag_type<
"BC"_tag> {
using type =
std::string; };
182template <>
struct sam_tag_type<
"BQ"_tag> {
using type =
std::string; };
183template <>
struct sam_tag_type<
"BZ"_tag> {
using type =
std::string; };
184template <>
struct sam_tag_type<
"CB"_tag> {
using type =
std::string; };
185template <>
struct sam_tag_type<
"CC"_tag> {
using type =
std::string; };
187template <>
struct sam_tag_type<
"CM"_tag> {
using type = int32_t; };
188template <>
struct sam_tag_type<
"CO"_tag> {
using type =
std::string; };
189template <>
struct sam_tag_type<
"CP"_tag> {
using type = int32_t; };
190template <>
struct sam_tag_type<
"CQ"_tag> {
using type =
std::string; };
191template <>
struct sam_tag_type<
"CR"_tag> {
using type =
std::string; };
192template <>
struct sam_tag_type<
"CS"_tag> {
using type =
std::string; };
193template <>
struct sam_tag_type<
"CT"_tag> {
using type =
std::string; };
194template <>
struct sam_tag_type<
"CY"_tag> {
using type =
std::string; };
195template <>
struct sam_tag_type<
"E2"_tag> {
using type =
std::string; };
196template <>
struct sam_tag_type<
"FI"_tag> {
using type = int32_t; };
197template <>
struct sam_tag_type<
"FS"_tag> {
using type =
std::string; };
204template <>
struct sam_tag_type<
"H0"_tag> {
using type = int32_t; };
205template <>
struct sam_tag_type<
"H1"_tag> {
using type = int32_t; };
206template <>
struct sam_tag_type<
"H2"_tag> {
using type = int32_t; };
207template <>
struct sam_tag_type<
"HI"_tag> {
using type = int32_t; };
208template <>
struct sam_tag_type<
"IH"_tag> {
using type = int32_t; };
209template <>
struct sam_tag_type<
"LB"_tag> {
using type =
std::string; };
210template <>
struct sam_tag_type<
"MC"_tag> {
using type =
std::string; };
211template <>
struct sam_tag_type<
"MD"_tag> {
using type =
std::string; };
215template <>
struct sam_tag_type<
"MI"_tag> {
using type =
std::string; };
216template <>
struct sam_tag_type<
"MQ"_tag> {
using type = int32_t; };
217template <>
struct sam_tag_type<
"NH"_tag> {
using type = int32_t; };
218template <>
struct sam_tag_type<
"NM"_tag> {
using type = int32_t; };
219template <>
struct sam_tag_type<
"OC"_tag> {
using type =
std::string; };
220template <>
struct sam_tag_type<
"OP"_tag> {
using type = int32_t; };
221template <>
struct sam_tag_type<
"OQ"_tag> {
using type =
std::string; };
222template <>
struct sam_tag_type<
"OX"_tag> {
using type =
std::string; };
223template <>
struct sam_tag_type<
"PG"_tag> {
using type =
std::string; };
224template <>
struct sam_tag_type<
"PQ"_tag> {
using type = int32_t; };
225template <>
struct sam_tag_type<
"PT"_tag> {
using type =
std::string; };
226template <>
struct sam_tag_type<
"PU"_tag> {
using type =
std::string; };
227template <>
struct sam_tag_type<
"Q2"_tag> {
using type =
std::string; };
228template <>
struct sam_tag_type<
"QT"_tag> {
using type =
std::string; };
229template <>
struct sam_tag_type<
"QX"_tag> {
using type =
std::string; };
230template <>
struct sam_tag_type<
"R2"_tag> {
using type =
std::string; };
231template <>
struct sam_tag_type<
"RG"_tag> {
using type =
std::string; };
232template <>
struct sam_tag_type<
"RT"_tag> {
using type =
std::string; };
233template <>
struct sam_tag_type<
"RX"_tag> {
using type =
std::string; };
237template <>
struct sam_tag_type<
"SA"_tag> {
using type =
std::string; };
238template <>
struct sam_tag_type<
"SM"_tag> {
using type = int32_t; };
242template <>
struct sam_tag_type<
"TC"_tag> {
using type = int32_t; };
243template <>
struct sam_tag_type<
"U2"_tag> {
using type =
std::string; };
244template <>
struct sam_tag_type<
"UQ"_tag> {
using type = int32_t; };
354 template <u
int16_t tag>
355 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
358 if ((*this).count(
tag) == 0)
361 return std::get<sam_tag_type_t<tag>>((*this)[
tag]);
365 template <u
int16_t tag>
366 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
369 if ((*this).count(
tag) == 0)
372 return std::get<sam_tag_type_t<tag>>(std::move((*
this)[
tag]));
377 template <u
int16_t tag>
378 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
379 auto const &
get()
const &
381 return std::get<sam_tag_type_t<tag>>((*this).at(
tag));
386 template <u
int16_t tag>
387 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
388 auto const &&
get()
const &&
390 return std::get<sam_tag_type_t<tag>>(std::move((*this).at(
tag)));
A "pretty printer" for most SeqAn data structures and related types.
Definition debug_stream_type.hpp:79
The SAM tag dictionary class that stores all optional SAM fields.
Definition sam_tag_dictionary.hpp:329
detail::sam_tag_variant variant_type
The variant type defining all valid SAM tag field types.
Definition sam_tag_dictionary.hpp:336
auto && get() &&
Uses std::map::operator[] for access and default initializes new keys.
Definition sam_tag_dictionary.hpp:367
auto & get() &
Uses std::map::operator[] for access and default initializes new keys.
Definition sam_tag_dictionary.hpp:356
auto const && get() const &&
Uses std::map::at() for access and throws when the key is unknown.
Definition sam_tag_dictionary.hpp:388
auto const & get() const &
Uses std::map::at() for access and throws when the key is unknown.
Definition sam_tag_dictionary.hpp:379
constexpr auto is_alnum
Checks whether c is a alphanumeric character.
Definition predicate.hpp:194
constexpr auto is_alpha
Checks whether c is a alphabetical character.
Definition predicate.hpp:211
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Provides character predicates for tokenisation.
A constexpr string implementation to manipulate string literals at compile time.
The generic base class.
Definition sam_tag_dictionary.hpp:167
detail::sam_tag_variant type
The type for all unknown tags with no extra overload defaults to a std::variant.
Definition sam_tag_dictionary.hpp:169
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:175
Provides type traits for working with templates.