24 namespace seqan3::detail
46 template <
typename alignment_algorithm_t,
typename score_matrix_t,
typename trace_matrix_t>
47 class alignment_matrix_policy
51 friend alignment_algorithm_t;
56 constexpr alignment_matrix_policy() =
default;
57 constexpr alignment_matrix_policy(alignment_matrix_policy
const &) =
default;
58 constexpr alignment_matrix_policy(alignment_matrix_policy &&) =
default;
59 constexpr alignment_matrix_policy & operator=(alignment_matrix_policy
const &) =
default;
60 constexpr alignment_matrix_policy & operator=(alignment_matrix_policy &&) =
default;
61 ~alignment_matrix_policy() =
default;
76 template <
typename sequence1_t,
typename sequence2_t>
77 constexpr
void allocate_matrix(sequence1_t && sequence1, sequence2_t && sequence2)
79 score_matrix = score_matrix_t{sequence1, sequence2};
80 trace_matrix = trace_matrix_t{sequence1, sequence2};
82 initialise_matrix_iterator();
106 template <
typename sequence1_t,
typename sequence2_t,
typename score_t>
107 constexpr
void allocate_matrix(sequence1_t && sequence1,
108 sequence2_t && sequence2,
109 static_band
const & band,
110 alignment_algorithm_state<score_t>
const & state)
112 assert(state.gap_extension_score <= 0);
115 score_matrix = score_matrix_t{sequence1, sequence2, band, inf};
116 trace_matrix = trace_matrix_t{sequence1, sequence2, band};
118 initialise_matrix_iterator();
122 constexpr
void initialise_matrix_iterator() noexcept
124 score_matrix_iter = score_matrix.begin();
125 trace_matrix_iter = trace_matrix.begin();
140 template <
typename sequence1_t,
typename sequence2_t>
141 constexpr
auto slice_sequences(sequence1_t & sequence1,
142 sequence2_t & sequence2,
143 static_band
const & band)
const noexcept
145 size_t seq1_size = std::ranges::distance(sequence1);
146 size_t seq2_size = std::ranges::distance(sequence2);
148 auto trim_sequence1 = [&] () constexpr
150 size_t begin_pos = std::max<std::ptrdiff_t>(band.lower_bound - 1, 0);
151 size_t end_pos = std::min<std::ptrdiff_t>(band.upper_bound + seq2_size, seq1_size);
155 auto trim_sequence2 = [&] () constexpr
157 size_t begin_pos = std::abs(std::min<std::ptrdiff_t>(band.upper_bound + 1, 0));
158 size_t end_pos = std::min<std::ptrdiff_t>(seq1_size - band.lower_bound, seq2_size);
162 return std::tuple{trim_sequence1(), trim_sequence2()};
173 constexpr
auto current_alignment_column() noexcept
175 assert(!std::ranges::empty(*score_matrix_iter));
176 assert(!std::ranges::empty(*trace_matrix_iter));
178 return views::zip(*score_matrix_iter, *trace_matrix_iter);
187 constexpr
void next_alignment_column() noexcept
193 score_matrix_t score_matrix{};
194 trace_matrix_t trace_matrix{};
196 typename score_matrix_t::iterator score_matrix_iter{};
197 typename trace_matrix_t::iterator trace_matrix_iter{};