25namespace seqan3::detail
41template <
typename score_t>
42class alignment_score_matrix_one_column :
43 protected alignment_score_matrix_one_column_base<score_t>,
44 public alignment_matrix_column_major_range_base<alignment_score_matrix_one_column<score_t>>
48 "The score type must be either an arithmetic type or a simd vector type.");
50 using matrix_base_t = alignment_score_matrix_one_column_base<score_t>;
52 using range_base_t = alignment_matrix_column_major_range_base<alignment_score_matrix_one_column<score_t>>;
58 using typename matrix_base_t::element_type;
59 using typename range_base_t::alignment_column_type;
63 using matrix_base_t::num_cols;
70 using value_type = alignment_score_matrix_proxy<score_t>;
72 using reference = value_type;
74 using iterator =
typename range_base_t::iterator;
76 using sentinel =
typename range_base_t::sentinel;
77 using typename matrix_base_t::size_type;
78 using typename matrix_base_t::underlying_type;
85 constexpr alignment_score_matrix_one_column() =
default;
87 constexpr alignment_score_matrix_one_column(alignment_score_matrix_one_column
const &) =
default;
89 constexpr alignment_score_matrix_one_column(alignment_score_matrix_one_column &&) =
default;
91 constexpr alignment_score_matrix_one_column & operator=(alignment_score_matrix_one_column
const &) =
default;
93 constexpr alignment_score_matrix_one_column & operator=(alignment_score_matrix_one_column &&) =
default;
95 ~alignment_score_matrix_one_column() =
default;
110 template <std::ranges::forward_range first_sequence_t, std::ranges::forward_range second_sequence_t>
111 constexpr alignment_score_matrix_one_column(first_sequence_t && first,
112 second_sequence_t && second,
113 score_t
const initial_value = score_t{})
115 matrix_base_t::num_cols =
static_cast<size_type
>(std::ranges::distance(first) + 1);
116 matrix_base_t::num_rows =
static_cast<size_type
>(std::ranges::distance(second) + 1);
117 matrix_base_t::pool.resize(matrix_base_t::num_rows + 1, element_type{initial_value, initial_value});
123 constexpr alignment_column_type initialise_column(size_type
const SEQAN3_DOXYGEN_ONLY(column_index))
noexcept
125 return alignment_column_type{
127 column_data_view_type{
std::addressof(matrix_base_t::pool[0]), matrix_base_t::num_rows}};
131 template <std::random_access_iterator iter_t>
132 constexpr value_type make_proxy(iter_t host_iter)
noexcept
134 return {std::get<0>(*host_iter),
135 std::get<0>(matrix_base_t::cache),
136 std::get<1>(*host_iter),
137 std::get<1>(*host_iter),
138 std::get<2>(matrix_base_t::cache)};
142 template <std::random_access_iterator iter_t>
143 constexpr void on_column_iterator_creation(iter_t host_iter)
noexcept
146 std::get<1>(matrix_base_t::cache) = std::get<0>(*host_iter);
150 template <std::random_access_iterator iter_t>
151 constexpr void before_column_iterator_increment(iter_t SEQAN3_DOXYGEN_ONLY(host_iter))
noexcept
154 std::get<0>(matrix_base_t::cache) = std::move(std::get<1>(matrix_base_t::cache));
158 template <std::random_access_iterator iter_t>
159 constexpr void after_column_iterator_increment(iter_t host_iter)
noexcept
162 std::get<1>(matrix_base_t::cache) = std::move(std::get<0>(*host_iter));
Provides seqan3::detail::alignment_matrix_column_major_range_base.
Provides seqan3::detail::alignment_score_matrix_one_column_base.
Provides seqan3::detail::alignment_score_matrix_proxy.
A type that satisfies std::is_arithmetic_v<t>.
Provides concepts that do not have equivalents in C++20.
Provides seqan3::simd::simd_concept.