SeqAn3 3.1.0
The Modern C++ library for sequence analysis.
tuple.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2021, 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 <seqan3/std/concepts>
16#include <seqan3/std/ranges>
17
21
22namespace seqan3
23{
27} // namespace seqan3
28
29namespace seqan3::detail
30{
31
33template <typename char_t, typename tuple_t, std::size_t ...I>
34void print_tuple(debug_stream_type<char_t> & s, tuple_t && t, std::index_sequence<I...> const &)
35{
36 using std::get;
37 s << '(';
38 ((s << (I == 0 ? "" : ",") << get<I>(t)), ...);
39 s << ')';
40}
41
53template <typename tuple_t>
54SEQAN3_CONCEPT debug_streamable_tuple = !std::ranges::input_range<tuple_t> &&
55 !alphabet<tuple_t> && // exclude alphabet_tuple_base
58} // namespace seqan3::detail
59
60namespace seqan3
61{
62
69template <typename char_t, typename tuple_t>
71 requires (detail::debug_streamable_tuple<tuple_t>)
73inline debug_stream_type<char_t> & operator<<(debug_stream_type<char_t> & s, tuple_t && t)
74{
75 detail::print_tuple(s, std::forward<tuple_t>(t),
77 return s;
78}
79
81
82} // namespace seqan3
Core alphabet concept and free function/type trait wrappers.
A "pretty printer" for most SeqAn data structures and related types.
Definition: debug_stream_type.hpp:78
The <concepts> header from C++20's standard library.
Provides seqan3::debug_stream and related types.
The generic alphabet concept that covers most data types used in ranges.
Whether a type behaves like a tuple.
The main SeqAn3 namespace.
Definition: cigar_operation_table.hpp:2
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 <ranges> header from C++20's standard library.
T tuple_size_v
Provides seqan3::tuple_like.