SeqAn3
3.4.0
The Modern C++ library for sequence analysis.
Toggle main menu visibility
Loading...
Searching...
No Matches
alignment/pairwise/detail/concept.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 <ranges>
13
#include <
tuple
>
14
15
#include <
seqan3/alphabet/concept.hpp
>
16
#include <
seqan3/utility/tuple/concept.hpp
>
17
18
namespace
seqan3::detail
19
{
20
34
template
<
typename
t>
35
concept
sequence_pair =
requires
() {
36
requires
tuple_like<t>;
37
requires
std::tuple_size_v<t>
== 2;
38
requires
std::ranges::forward_range<std::tuple_element_t<0, t>>;
39
requires
std::ranges::forward_range<std::tuple_element_t<1, t>>;
40
requires
semialphabet<std::ranges::range_value_t<std::tuple_element_t<0, t>>>;
41
requires
semialphabet<std::ranges::range_value_t<std::tuple_element_t<1, t>>>;
42
};
44
57
template
<
typename
t>
58
concept
sequence_pair_range = std::ranges::forward_range<t> && sequence_pair<std::ranges::range_value_t<t>>;
60
79
template
<
typename
t>
80
concept
indexed_sequence_pair_range = std::ranges::forward_range<t> &&
requires
(std::ranges::range_value_t<t> value) {
81
requires
tuple_like<
decltype
(value)>;
82
requires
std::tuple_size_v
<
decltype
(value)> == 2;
83
requires
sequence_pair<std::tuple_element_t<0,
decltype
(value)>>;
84
requires
std::copy_constructible<std::tuple_element_t<1,
decltype
(value)>>;
85
};
87
102
template
<
typename
t>
103
concept
align_pairwise_single_input =
104
(sequence_pair<std::remove_reference_t<t>> &&
std::is_lvalue_reference_v<t>
)
105
|| (std::ranges::viewable_range<std::tuple_element_t<0, std::remove_reference_t<t>>>
106
&& std::ranges::viewable_range<std::tuple_element_t<1, std::remove_reference_t<t>>>);
108
127
template
<
typename
t>
128
concept
align_pairwise_range_input =
129
std::ranges::forward_range<t> && sequence_pair<std::ranges::range_value_t<t>>
130
&& ((std::ranges::viewable_range<t> &&
std::is_lvalue_reference_v<std::ranges::range_reference_t<t>
>)
131
|| align_pairwise_single_input<std::remove_reference_t<std::ranges::range_reference_t<t>>>);
133
}
// namespace seqan3::detail
concept.hpp
Core alphabet concept and free function/type trait wrappers.
std::is_lvalue_reference_v
T is_lvalue_reference_v
tuple
std::tuple_size_v
T tuple_size_v
concept.hpp
Provides seqan3::tuple_like.
Hide me
Version:
seqan3
alignment
pairwise
detail
concept.hpp
Generated on
for SeqAn3 by
1.17.0