SeqAn3
3.4.0
The Modern C++ library for sequence analysis.
Toggle main menu visibility
Loading...
Searching...
No Matches
range.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2006-2025 Knut Reinert & Freie Universität Berlin
2
// SPDX-FileCopyrightText: 2016-2025 Knut Reinert & MPI für molekulare Genetik
3
// SPDX-License-Identifier: BSD-3-Clause
4
9
10
#pragma once
11
12
#include <
functional
>
13
#include <ranges>
14
15
#include <
seqan3/alphabet/adaptation/char.hpp
>
16
#include <
seqan3/alphabet/adaptation/uint.hpp
>
17
#include <
seqan3/alphabet/range/sequence.hpp
>
18
#include <
seqan3/core/debug_stream/debug_stream_type.hpp
>
19
#include <
seqan3/core/range/type_traits.hpp
>
20
21
namespace
seqan3
22
{
23
33
template
<
typename
rng_t>
34
concept
nonrecursive_range
=
35
!std::same_as<std::remove_cvref_t<std::ranges::range_reference_t<rng_t>>, std::remove_cvref_t<rng_t>>;
36
51
template
<
typename
rng_t>
52
requires
std::ranges::input_range<rng_t> &&
nonrecursive_range<rng_t>
53
struct
input_range_printer
<rng_t>
54
{
63
template
<
typename
stream_t,
typename
arg_t>
64
constexpr
void
operator()
(stream_t & stream, arg_t && arg)
const
65
{
66
stream <<
'['
;
67
auto
first = std::ranges::begin(arg);
68
auto
last = std::ranges::end(arg);
69
if
(first != last)
70
{
71
stream << *first;
72
++first;
73
}
74
while
(first != last)
75
{
76
stream <<
','
;
77
stream << *first;
78
++first;
79
}
80
stream <<
']'
;
81
}
82
};
83
92
template
<sequence sequence_t>
93
struct
sequence_printer
<sequence_t>
94
{
103
template
<
typename
stream_t,
typename
arg_t>
104
constexpr
void
operator()
(stream_t & stream, arg_t && arg)
const
105
{
106
for
(
auto
&& chr : arg)
107
stream << chr;
108
}
109
};
110
120
template
<
typename
char
_sequence_t>
121
requires
std::ranges::input_range<char_sequence_t>
122
&& (detail::is_char_adaptation_v<std::remove_cvref_t<std::ranges::range_reference_t<char_sequence_t>>>)
123
struct
char_sequence_printer<char_sequence_t>
124
{
132
template
<
typename
stream_t,
typename
arg_t>
133
constexpr
void
operator()
(stream_t & stream, arg_t && arg)
const
134
{
135
// null-terminated string
136
if
constexpr
(
std::is_pointer_v<std::decay_t<char_sequence_t>
>)
137
return
std::invoke
(
std_printer<char_sequence_t>
{}, stream,
std::forward<arg_t>
(arg));
138
139
for
(
auto
&& chr : arg)
140
stream << chr;
141
}
142
};
143
152
template
<
typename
int
eger_sequence_t>
153
requires
std::ranges::input_range<integer_sequence_t>
154
&& std::integral<std::remove_cvref_t<std::ranges::range_reference_t<integer_sequence_t>>>
155
struct
integer_sequence_printer
<integer_sequence_t> :
public
input_range_printer
<integer_sequence_t>
156
{};
157
158
}
// namespace seqan3
char.hpp
Provides alphabet adaptations for standard char types.
seqan3::nonrecursive_range
Definition
range.hpp:34
type_traits.hpp
Provides various transformation traits used by the range module.
debug_stream_type.hpp
Provides seqan3::debug_stream and related types.
std::forward
T forward(T... args)
functional
std::invoke
T invoke(T... args)
std::is_pointer_v
T is_pointer_v
seqan3
The main SeqAn3 namespace.
Definition
aligned_sequence_concept.hpp:26
sequence.hpp
Additional non-standard concepts for ranges.
seqan3::char_sequence_printer< char_sequence_t >::operator()
constexpr void operator()(stream_t &stream, arg_t &&arg) const
Prints the character sequence to the given stream.
Definition
range.hpp:133
seqan3::char_sequence_printer
Definition
default_printer.hpp:49
seqan3::input_range_printer< rng_t >::operator()
constexpr void operator()(stream_t &stream, arg_t &&arg) const
Prints the elements of a sequence to an output stream.
Definition
range.hpp:64
seqan3::input_range_printer
Definition
default_printer.hpp:36
seqan3::integer_sequence_printer
Definition
default_printer.hpp:37
seqan3::sequence_printer< sequence_t >::operator()
constexpr void operator()(stream_t &stream, arg_t &&arg) const
Prints the elements of a sequence to an output stream.
Definition
range.hpp:104
seqan3::sequence_printer
Definition
default_printer.hpp:42
seqan3::std_printer
Definition
default_printer.hpp:47
uint.hpp
Provides alphabet adaptations for standard uint types.
Hide me
Version:
seqan3
core
debug_stream
range.hpp
Generated on
for SeqAn3 by
1.17.0