24 namespace seqan3::detail
26 template <
typename word_t,
typename score_t,
bool is_semi_global,
bool use_max_errors>
27 class edit_distance_score_matrix_full;
29 template <
typename word_t,
bool is_semi_global,
bool use_max_errors>
30 class edit_distance_trace_matrix_full;
33 template <
typename state_t,
typename ...>
38 template <
bool enabled,
typename state_t>
45 template <
bool B,
template <
typename ...>
typename T,
template <
typename ...>
typename F>
49 template <
typename ...args_t>
57 template <std::ranges::viewable_range database_t,
58 std::ranges::viewable_range query_t,
59 typename align_config_t,
60 typename is_semi_global_t,
61 typename word_t = uint_fast64_t>
62 struct default_edit_distance_trait_type
67 using alignment_traits_type = alignment_configuration_traits<align_config_type>;
69 using word_type = word_t;
70 static_assert(std::is_unsigned_v<word_type>,
"the word type of edit_distance_unbanded must be unsigned.");
71 static_assert(alignment_traits_type::has_output_configuration,
"We assume the result type was configured.");
73 using score_type =
typename alignment_traits_type::original_score_type;
80 static constexpr uint8_t word_size = sizeof_bits<word_type>;
81 static_assert(sizeof_bits<word_type> <= 64u,
"we assume at most uint64_t as word_type");
84 using database_iterator = std::ranges::iterator_t<database_type>;
88 using alignment_result_type =
typename alignment_traits_type::alignment_result_type;
90 using result_value_type =
typename alignment_result_value_type_accessor<alignment_result_type>::type;
94 static constexpr
bool use_max_errors = align_config_type::template exists<align_cfg::min_score>();
96 static constexpr
bool is_semi_global = is_semi_global_t::value;
98 static constexpr
bool is_global = !is_semi_global;
100 static constexpr
bool compute_score =
true;
102 static constexpr
bool compute_sequence_alignment = alignment_traits_type::compute_sequence_alignment;
104 static constexpr
bool compute_begin_positions = alignment_traits_type::compute_begin_positions ||
105 compute_sequence_alignment;
107 static constexpr
bool compute_end_positions = alignment_traits_type::compute_end_positions ||
108 compute_begin_positions;
110 static constexpr
bool compute_score_matrix =
false;
112 static constexpr
bool compute_trace_matrix = compute_begin_positions || compute_sequence_alignment;
114 static constexpr
bool compute_matrix = compute_score_matrix || compute_trace_matrix;
117 using trace_matrix_type = edit_distance_trace_matrix_full<word_type, is_semi_global, use_max_errors>;
119 using score_matrix_type = edit_distance_score_matrix_full<word_type, score_type, is_semi_global, use_max_errors>;
123 template <
bool enable_policy,
124 template <
typename ...>
typename policy_t,
125 typename edit_traits,
127 using edit_distance_base =
128 invoke_deferred_crtp_base<deferred_crtp_base<selector<enable_policy, policy_t, empty_state>::template select,
133 template <std::ranges::viewable_range database_t,
134 std::ranges::viewable_range query_t,
135 typename align_config_t,
137 class edit_distance_unbanded;