20namespace seqan3::detail
39constexpr char sam_tag_type_char[12] = {
'A',
'i',
'f',
'Z',
'H',
'B',
'B',
'B',
'B',
'B',
'B',
'B'};
42constexpr char sam_tag_type_char_extra[12] = {
'\0',
'\0',
'\0',
'\0',
'\0',
'c',
'C',
's',
'S',
'i',
'I',
'f'};
48inline namespace literals
70template <small_
string<2> str>
71constexpr uint16_t
operator""_tag()
73 static_assert(str.size() == 2,
"Illegal SAM tag: Exactly two characters must be given.");
75 constexpr char char0 = str[0];
76 constexpr char char1 = str[1];
80 return static_cast<uint16_t
>(
char0) * 256 +
static_cast<uint16_t
>(
char1);
163template <u
int16_t tag_value>
172template <u
int16_t tag_value>
179template <>
struct sam_tag_type<
"BC"_tag> {
using type =
std::string; };
180template <>
struct sam_tag_type<
"BQ"_tag> {
using type =
std::string; };
181template <>
struct sam_tag_type<
"BZ"_tag> {
using type =
std::string; };
182template <>
struct sam_tag_type<
"CB"_tag> {
using type =
std::string; };
183template <>
struct sam_tag_type<
"CC"_tag> {
using type =
std::string; };
185template <>
struct sam_tag_type<
"CM"_tag> {
using type = int32_t; };
186template <>
struct sam_tag_type<
"CO"_tag> {
using type =
std::string; };
187template <>
struct sam_tag_type<
"CP"_tag> {
using type = int32_t; };
188template <>
struct sam_tag_type<
"CQ"_tag> {
using type =
std::string; };
189template <>
struct sam_tag_type<
"CR"_tag> {
using type =
std::string; };
190template <>
struct sam_tag_type<
"CS"_tag> {
using type =
std::string; };
191template <>
struct sam_tag_type<
"CT"_tag> {
using type =
std::string; };
192template <>
struct sam_tag_type<
"CY"_tag> {
using type =
std::string; };
193template <>
struct sam_tag_type<
"E2"_tag> {
using type =
std::string; };
194template <>
struct sam_tag_type<
"FI"_tag> {
using type = int32_t; };
195template <>
struct sam_tag_type<
"FS"_tag> {
using type =
std::string; };
202template <>
struct sam_tag_type<
"H0"_tag> {
using type = int32_t; };
203template <>
struct sam_tag_type<
"H1"_tag> {
using type = int32_t; };
204template <>
struct sam_tag_type<
"H2"_tag> {
using type = int32_t; };
205template <>
struct sam_tag_type<
"HI"_tag> {
using type = int32_t; };
206template <>
struct sam_tag_type<
"IH"_tag> {
using type = int32_t; };
207template <>
struct sam_tag_type<
"LB"_tag> {
using type =
std::string; };
208template <>
struct sam_tag_type<
"MC"_tag> {
using type =
std::string; };
209template <>
struct sam_tag_type<
"MD"_tag> {
using type =
std::string; };
213template <>
struct sam_tag_type<
"MI"_tag> {
using type =
std::string; };
214template <>
struct sam_tag_type<
"MQ"_tag> {
using type = int32_t; };
215template <>
struct sam_tag_type<
"NH"_tag> {
using type = int32_t; };
216template <>
struct sam_tag_type<
"NM"_tag> {
using type = int32_t; };
217template <>
struct sam_tag_type<
"OC"_tag> {
using type =
std::string; };
218template <>
struct sam_tag_type<
"OP"_tag> {
using type = int32_t; };
219template <>
struct sam_tag_type<
"OQ"_tag> {
using type =
std::string; };
220template <>
struct sam_tag_type<
"OX"_tag> {
using type =
std::string; };
221template <>
struct sam_tag_type<
"PG"_tag> {
using type =
std::string; };
222template <>
struct sam_tag_type<
"PQ"_tag> {
using type = int32_t; };
223template <>
struct sam_tag_type<
"PT"_tag> {
using type =
std::string; };
224template <>
struct sam_tag_type<
"PU"_tag> {
using type =
std::string; };
225template <>
struct sam_tag_type<
"Q2"_tag> {
using type =
std::string; };
226template <>
struct sam_tag_type<
"QT"_tag> {
using type =
std::string; };
227template <>
struct sam_tag_type<
"QX"_tag> {
using type =
std::string; };
228template <>
struct sam_tag_type<
"R2"_tag> {
using type =
std::string; };
229template <>
struct sam_tag_type<
"RG"_tag> {
using type =
std::string; };
230template <>
struct sam_tag_type<
"RT"_tag> {
using type =
std::string; };
231template <>
struct sam_tag_type<
"RX"_tag> {
using type =
std::string; };
235template <>
struct sam_tag_type<
"SA"_tag> {
using type =
std::string; };
236template <>
struct sam_tag_type<
"SM"_tag> {
using type = int32_t; };
240template <>
struct sam_tag_type<
"TC"_tag> {
using type = int32_t; };
241template <>
struct sam_tag_type<
"U2"_tag> {
using type =
std::string; };
242template <>
struct sam_tag_type<
"UQ"_tag> {
using type = int32_t; };
352 template <u
int16_t tag>
353 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
356 if ((*this).count(
tag) == 0)
359 return std::get<sam_tag_type_t<tag>>((*this)[
tag]);
363 template <u
int16_t tag>
364 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
367 if ((*this).count(
tag) == 0)
370 return std::get<sam_tag_type_t<tag>>(std::move((*
this)[
tag]));
375 template <u
int16_t tag>
376 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
377 auto const &
get()
const &
379 return std::get<sam_tag_type_t<tag>>((*this).at(
tag));
384 template <u
int16_t tag>
385 requires (!std::same_as<sam_tag_type_t<tag>,
variant_type>)
386 auto const &&
get()
const &&
388 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:327
detail::sam_tag_variant variant_type
The variant type defining all valid SAM tag field types.
Definition sam_tag_dictionary.hpp:334
auto && get() &&
Uses std::map::operator[] for access and default initializes new keys.
Definition sam_tag_dictionary.hpp:365
auto & get() &
Uses std::map::operator[] for access and default initializes new keys.
Definition sam_tag_dictionary.hpp:354
auto const && get() const &&
Uses std::map::at() for access and throws when the key is unknown.
Definition sam_tag_dictionary.hpp:386
auto const & get() const &
Uses std::map::at() for access and throws when the key is unknown.
Definition sam_tag_dictionary.hpp:377
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:165
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:167
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:173
Provides type traits for working with templates.