18 #include <type_traits> 20 #include <meta/meta.hpp> 132 template <
typename exec_policy_t,
typename sequence_t,
typename alignment_config_t>
134 requires is_execution_policy_v<exec_policy_t> &&
135 detail::AlignPairwiseSingleInput<std::remove_reference_t<sequence_t>> &&
137 detail::is_type_specialisation_of_v<alignment_config_t, configuration>
141 alignment_config_t
const & config)
144 "Alignment configuration error: Expects exactly two sequences for pairwise alignments.");
148 "Alignment configuration error: The tuple elements must model std::ranges::ViewableRange.");
156 template <
typename sequence_t,
typename alignment_config_t>
158 requires detail::AlignPairwiseSingleInput<std::remove_reference_t<sequence_t>> &&
160 detail::is_type_specialisation_of_v<alignment_config_t, configuration>
165 "Alignment configuration error: Expects exactly two sequences for pairwise alignments.");
169 "Alignment configuration error: The tuple elements must model std::ranges::ViewableRange.");
175 template <
typename sequence_t,
typename alignment_config_t>
176 requires detail::AlignPairwiseRangeInputConcept<sequence_t> &&
177 detail::is_type_specialisation_of_v<alignment_config_t, configuration>
178 constexpr
auto align_pairwise(sequence_t &&
seq, alignment_config_t
const & config)
183 template <
typename exec_policy_t,
typename sequence_t,
typename alignment_config_t>
184 requires is_execution_policy_v<exec_policy_t> &&
185 detail::AlignPairwiseRangeInputConcept<sequence_t> &&
186 detail::is_type_specialisation_of_v<alignment_config_t, configuration>
189 alignment_config_t
const & config)
191 using first_seq_t = std::tuple_element_t<0, value_type_t<sequence_t>>;
192 using second_seq_t = std::tuple_element_t<1, value_type_t<sequence_t>>;
195 "Alignment configuration error: The sequence must model RandomAccessRange and SizedRange.");
197 "Alignment configuration error: The sequence must model RandomAccessRange and SizedRange.");
202 auto kernel = detail::alignment_configurator::configure<decltype(seq_view)>(config);
204 detail::alignment_executor_two_way executor{std::move(seq_view), kernel, exec};
206 return alignment_range{std::move(executor)};
Meta-header for the pairwise execution submodule .
Specifies the requirements of a Range type that is either a std::ranges::View or an lvalue-reference...
constexpr sequenced_policy seq
Global execution policy object for sequenced execution policy.
Definition: execution.hpp:54
Meta-header for the alignment configuration module .
constexpr auto align_pairwise(exec_policy_t const &exec, sequence_t &&seq, alignment_config_t const &config)
Computes the pairwise alignment for a pair of sequences or a range over sequence pairs.
Definition: align_pairwise.hpp:139
Provides execution policies.
Specifies requirements of a Range type for which begin returns a type that models std::RandomAccessIt...
The main SeqAn3 namespace.
The concept std::CopyConstructible is satisfied if T is an lvalue reference type, or if it is a MoveC...
constexpr auto single
Given a value, produces a view that contains exactly one element.
Definition: ranges:756
Specifies the requirements of a Range type that knows its size in constant time with the size functio...
Provides seqan3::alignment_result.
Adaptations of concepts from the Ranges TS.
Provides seqan3::detail::alignment_selector.
auto constexpr persist
A view adaptor that wraps rvalue references of non-views.
Definition: persist.hpp:251
Provides various type traits on generic types.
Meta-Header for components of the algorithm submodule.
Provides seqan3::view::persist.