Core

Meta-header for the core module .

Author
Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>
Author
Rene Rahn <rene.rahn AT fu-berlin.de>

namespace seqan3

The main SeqAn3 namespace.

Helpers for seqan3::semi_alphabet_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::semi_alphabet_concept.

Helpers for seqan3::alphabet_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::alphabet_concept.

Helpers for seqan3::nucleotide_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::nucleotide_concept.

Alphabet aliases

Other names (typedefs) for seqan3::nucl16

Range concepts

Adapted from the Ranges TS.

Container concepts

Container concepts as defined by the standard library (or very close).

Container-of-container concepts

Shortcuts for multi-dimensional container concepts.

namespace detail

The internal SeqAn3 namespace.

The contents of this namespace are not visible to consumers of the library and the documentation is only generated for developers.

See
https://github.com/seqan/seqan3/wiki/Documentation

namespace literal

The SeqAn3 namespace for literals.

SeqAn implements “user defined” literals in multiple places, e.g. auto foo = "ACGTG"_dna4. These make working with small examples and tests a lot easier, but the risk of having a name collision with another library is higher so follow the example of the standard library and define all our literals in the namespace seqan3::literal.

Attention
This means you cannot use them, unless you explicitly add using namespace seqan3::literal; (in addition to using namespace seqan3;).

Contains platform and dependency checks.

Author
Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>

Contains seqan3::pod_tuple.

Author
Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>

namespace seqan3

The main SeqAn3 namespace.

Helpers for seqan3::semi_alphabet_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::semi_alphabet_concept.

Helpers for seqan3::alphabet_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::alphabet_concept.

Helpers for seqan3::nucleotide_concept

These functions and metafunctions expose member variables and types so that they satisfy seqan3::nucleotide_concept.

Alphabet aliases

Other names (typedefs) for seqan3::nucl16

Range concepts

Adapted from the Ranges TS.

Container concepts

Container concepts as defined by the standard library (or very close).

Container-of-container concepts

Shortcuts for multi-dimensional container concepts.

template <typename type0, typename... types>
struct pod_tuple
#include <core/pod_tuple.hpp>

Behaves like std::tuple but is an aggregate PODType.

This class behaves like std::tuple, but it is itself a POD type while std::tuple is not (even if all contained types are POD). Since the only benefit of this class is that it stays POD it actually enforces this on all types in the tuple (if you want to add non POD types, just use std::tuple instead).

Template Parameters
  • type0: The first value’s type (every tuple must contain at least one type).
  • ...types: 0-n further types (the types of the other values).

It (only) supports aggregate initialization, i.e. you must use brace-initializiers and cannot use paranthesis. You can use seqan3::get or std::get and also structured bindings to access the elements in the tuple.

pod_tuple<int, float> t{3, 4.7};
static_assert(std::is_pod_v<pod_tuple<int, float>>);

// template parameters are automatically deduced:
pod_tuple t2{17, 3.7f, 19l};

std::cout << std::get<0>(t2) << '\n'; // 17

auto [ i, f, l ] = t2; // creates an int i with value 17, float f...

Access an element of a pod_tuple by index

The same as std::get on an std::tuple.

Note that these functions are available, both, in the seqan3 namespace and in namespace std.

template <std::size_t i, typename... types>
constexpr auto &get(seqan3::pod_tuple<types...> &t)
template <std::size_t i, typename... types>
constexpr auto const &get(seqan3::pod_tuple<types...> const &t)
template <std::size_t i, typename... types>
constexpr auto &&get(seqan3::pod_tuple<types...> &&t)
template <std::size_t i, typename... types>
constexpr auto const &&get(seqan3::pod_tuple<types...> const &&t)

Access an element of a pod_tuple by type

The same as std::get on an std::tuple.

Note that these functions are available, both, in the seqan3 namespace and in namespace std. As is the case with std::tuple, this function is only defined if the type appears once in the tuple, i.e. std::get<int>(std::tuple<int, int>{1,2}) is not defined.

template <typename type, typename... types>
constexpr auto &get(seqan3::pod_tuple<types...> &t)
template <typename type, typename... types>
constexpr auto const &get(seqan3::pod_tuple<types...> const &t)
template <typename type, typename... types>
constexpr auto &&get(seqan3::pod_tuple<types...> &&t)
template <typename type, typename... types>
constexpr auto const &&get(seqan3::pod_tuple<types...> const &&t)

Comparison operators

Lexicographically compares the values in the tuple.

constexpr bool operator==(pod_tuple const &rhs) const
constexpr bool operator!=(pod_tuple const &rhs) const
constexpr bool operator<(pod_tuple const &rhs) const
constexpr bool operator>(pod_tuple const &rhs) const
constexpr bool operator<=(pod_tuple const &rhs) const
constexpr bool operator>=(pod_tuple const &rhs) const

Public Members

type0 _head

The first element as member.

pod_tuple<types...> _tail

The rest of the elements defined as a “recursive member”.

Related

template <typename... types>
pod_tuple(types&&...)

User defined deduction guide enables easy use.

template <typename type0>
template<>
struct pod_tuple<type0>

Public Functions

constexpr bool operator==(pod_tuple const &rhs) const
constexpr bool operator!=(pod_tuple const &rhs) const
constexpr bool operator<(pod_tuple const &rhs) const
constexpr bool operator>(pod_tuple const &rhs) const
constexpr bool operator<=(pod_tuple const &rhs) const
constexpr bool operator>=(pod_tuple const &rhs) const

Public Members

type0 _head