31 template <
typename word_t,
bool is_semi_global,
bool use_max_errors>
32 class edit_distance_trace_matrix_full
38 typename align_config_t,
40 friend class edit_distance_unbanded;
45 edit_distance_trace_matrix_full() =
default;
46 edit_distance_trace_matrix_full(edit_distance_trace_matrix_full
const &) =
default;
47 edit_distance_trace_matrix_full(edit_distance_trace_matrix_full &&) =
default;
48 edit_distance_trace_matrix_full & operator=(edit_distance_trace_matrix_full
const &) =
default;
49 edit_distance_trace_matrix_full & operator=(edit_distance_trace_matrix_full &&) =
default;
50 ~edit_distance_trace_matrix_full() =
default;
56 edit_distance_trace_matrix_full(
size_t const rows_size)
57 : rows_size{rows_size}, columns{}
63 using word_type = word_t;
66 static constexpr
auto word_size = sizeof_bits<word_type>;
69 using entry_type = detail::trace_directions;
79 void reserve(
size_t const new_capacity)
81 columns.reserve(new_capacity);
86 entry_type at(
size_t const row,
size_t const col)
const noexcept
91 column_type
const & column = columns[col];
93 if constexpr(use_max_errors)
94 if (!(row < column.max_rows))
99 if constexpr(is_semi_global)
105 return detail::trace_directions::left;
108 size_t const idx = (row - 1u) / word_size;
109 size_t const offset = (row - 1u) % word_size;
123 size_t rows() const noexcept
129 size_t cols() const noexcept
131 return columns.
size();
136 struct max_errors_state
144 struct trace_matrix_state
156 enable_state_t<true, trace_matrix_state>,
157 enable_state_t<use_max_errors, max_errors_state>
167 requires !use_max_errors
170 column_type column{};
171 column.left = std::move(left);
172 column.diagonal = std::move(diagonal);
173 column.up = std::move(up);
175 columns.push_back(std::move(column));
185 size_t const max_rows)
187 requires use_max_errors
190 column_type column{};
191 column.left = std::move(left);
192 column.diagonal = std::move(diagonal);
193 column.up = std::move(up);
194 column.max_rows = max_rows;
196 columns.push_back(std::move(column));
Forwards for seqan3::edit_distance_unbanded related types.
No flag is set.
Definition: debug_stream.hpp:39
Provides the declaration of seqan3::detail::trace_directions.
Specifies the requirements of a Range type that is either a std::ranges::View or an lvalue-reference...
Definition: aligned_sequence_concept.hpp:35
Provides utility functions for bit twiddling.