66 template <
typename seq1_t,
typename seq2_t,
typename configuration_t>
67 struct determine_result_type
70 static constexpr
auto _determine()
72 using seq1_value_type = value_type_t<std::remove_reference_t<seq1_t>>;
73 using seq2_value_type = value_type_t<std::remove_reference_t<seq2_t>>;
74 using score_type = int32_t;
76 if constexpr (has_align_cfg_v<align_cfg::id::output, configuration_t>)
78 if constexpr (get<align_cfg::id::output>(configuration_t{}) ==
79 align_result_key::end)
82 alignment_coordinate>>{};
83 else if constexpr (get<align_cfg::id::output>(configuration_t{}) ==
84 align_result_key::begin)
88 alignment_coordinate>>{};
89 else if constexpr (get<align_cfg::id::output>(configuration_t{}) ==
90 align_result_key::trace)
95 std::pair<std::vector<gapped<seq1_value_type>>,
96 std::vector<gapped<seq2_value_type>>>>>{};
103 return align_result<type_list<uint32_t, score_type>>{};
108 using type = decltype(_determine());
117 template <tuple_like_concept seq_tuple_t,
typename configuration_t>
118 struct alignment_selector
121 configuration_t config;
124 using result_type =
typename determine_result_type<std::tuple_element_t<0, std::remove_reference_t<seq_tuple_t>>,
125 std::tuple_element_t<1, std::remove_reference_t<seq_tuple_t>>,
126 configuration_t>::type;
136 template <tuple_like_concept _seq_tuple_t>
137 auto select(_seq_tuple_t && seq)
140 std::function<result_type(result_type &)> func =
141 pairwise_alignment_edit_distance_unbanded{std::get<0>(std::forward<_seq_tuple_t>(seq)) |
view::persist,
142 std::get<1>(std::forward<_seq_tuple_t>(seq)) |
view::persist,
Meta-header for the alignment configuration module .
Provides seqan3::type_list and auxiliary metafunctions.
Provides seqan3::tuple_like_concept.
Contains the declaration of seqan3::detail::alignment_trace_matrix.
auto constexpr persist
A view adaptor that wraps rvalue references of non-views.
Definition: persist.hpp:315
Definition: aligned_sequence_concept.hpp:288
Provides seqan3::align_result.
Provides seqan3::view::persist.
meta::list< types... > type_list
Type that contains multiple types, an alias for meta::list.
Definition: type_list.hpp:54
Contains a pairwise alignment algorithm for edit distance but without band.
Provides various metafunctions used by the range module.