21 namespace seqan3::detail
38 SEQAN3_CONCEPT sequence_pair = requires ()
41 requires std::tuple_size_v<t> == 2;
42 requires std::ranges::forward_range<std::tuple_element_t<0, t>>;
43 requires std::ranges::forward_range<std::tuple_element_t<1, t>>;
62 SEQAN3_CONCEPT sequence_pair_range = std::ranges::forward_range<t> && sequence_pair<std::ranges::range_value_t<t>>;
84 SEQAN3_CONCEPT indexed_sequence_pair_range = std::ranges::forward_range<t> &&
85 requires (std::ranges::range_value_t<t> value)
89 requires sequence_pair<std::tuple_element_t<0, decltype(value)>>;
90 requires std::copy_constructible<std::tuple_element_t<1, decltype(value)>>;
107 template <
typename t>
109 SEQAN3_CONCEPT align_pairwise_single_input =
110 sequence_pair<std::remove_reference_t<t>> &&
111 std::is_lvalue_reference_v<t> ||
112 (std::ranges::viewable_range<std::tuple_element_t<0, std::remove_reference_t<t>>> &&
113 std::ranges::viewable_range<std::tuple_element_t<1, std::remove_reference_t<t>>>);
133 template <
typename t>
135 SEQAN3_CONCEPT align_pairwise_range_input =
136 std::ranges::forward_range<t> &&
137 sequence_pair<std::ranges::range_value_t<t>> &&
138 ((std::ranges::viewable_range<t> && std::is_lvalue_reference_v<std::ranges::range_reference_t<t>>) ||