27 namespace seqan3::detail
42 template <
typename sequence_pairs_t>
44 requires sequence_pair_range<std::remove_reference_t<sequence_pairs_t>>
46 struct chunked_indexed_sequence_pairs
49 using type = decltype(views::zip(std::declval<sequence_pairs_t>(), std::views::iota(0)) | views::chunk(1));
58 template <
typename config_t>
60 requires is_type_specialisation_of_v<config_t, configuration>
62 struct alignment_configuration_traits
65 static constexpr
bool is_vectorised = config_t::template
exists<
remove_cvref_t<decltype(align_cfg::vectorise)>>();
67 static constexpr
bool is_parallel = config_t::template exists<align_cfg::parallel>();
69 static constexpr
bool is_global = config_t::template exists<align_cfg::mode<detail::global_alignment_type>>();
71 static constexpr
bool is_aligned_ends = config_t::template exists<align_cfg::aligned_ends>();
73 static constexpr
bool is_local = config_t::template exists<align_cfg::mode<detail::local_alignment_type>>();
75 static constexpr
bool is_banded = config_t::template exists<align_cfg::band>();
77 static constexpr
bool is_debug = config_t::template exists<detail::debug_mode>();
80 using alignment_mode_t = decltype(get<align_cfg::mode>(std::declval<config_t>()).value);
82 using scoring_scheme_t = decltype(get<align_cfg::scoring>(std::declval<config_t>()).value);
84 using scoring_scheme_alphabet_t =
typename scoring_scheme_t::alphabet_type;
88 using original_score_t =
typename result_t::score_type;
95 static constexpr
size_t alignments_per_vector = [] () constexpr
97 if constexpr (is_vectorised)
98 return simd_traits<score_t>::length;
103 static constexpr int8_t result_type_rank = static_cast<int8_t>(decltype(std::declval<result_t>().value)::rank);
105 static constexpr original_score_t padding_symbol =
106 static_cast<original_score_t>(1u << (sizeof_bits<original_score_t> - 1));