SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
alignment/pairwise/detail/concept.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2024 Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
10#pragma once
11
12#include <ranges>
13#include <tuple>
14
17
18namespace seqan3::detail
19{
20
34template <typename t>
35concept 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>>;
42 };
44
57template <typename t>
58concept sequence_pair_range = std::ranges::forward_range<t> && sequence_pair<std::ranges::range_value_t<t>>;
60
79template <typename t>
81 std::ranges::forward_range<t> && requires (std::ranges::range_value_t<t> value) {
82 requires tuple_like<decltype(value)>;
83 requires std::tuple_size_v<decltype(value)> == 2;
84 requires sequence_pair<std::tuple_element_t<0, decltype(value)>>;
85 requires std::copy_constructible<std::tuple_element_t<1, decltype(value)>>;
86 };
88
103template <typename t>
105 (sequence_pair<std::remove_reference_t<t>> && std::is_lvalue_reference_v<t>)
106 || (std::ranges::viewable_range<std::tuple_element_t<0, std::remove_reference_t<t>>>
107 && std::ranges::viewable_range<std::tuple_element_t<1, std::remove_reference_t<t>>>);
109
128template <typename t>
130 std::ranges::forward_range<t> && sequence_pair<std::ranges::range_value_t<t>>
131 && ((std::ranges::viewable_range<t> && std::is_lvalue_reference_v<std::ranges::range_reference_t<t>>)
132 || align_pairwise_single_input<std::remove_reference_t<std::ranges::range_reference_t<t>>>);
134} // namespace seqan3::detail
Core alphabet concept and free function/type trait wrappers.
A helper concept to test for correct range input in seqan3::align_pairwise.
A helper concept to test for correct single value input in seqan3::align_pairwise.
A helper concept to check the input of the range based alignment algorithm interface.
A helper concept to check if a type is a range over seqan3::detail::sequence_pair.
A helper concept to check if a type is a sequence pair.
The basis for seqan3::alphabet, but requires only rank interface (not char).
Whether a type behaves like a tuple.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
T tuple_size_v
Provides seqan3::tuple_like.
Hide me