20#include <seqan3/utility/simd/concept.hpp>
22namespace seqan3::detail
38template <
typename score_t>
39class alignment_score_matrix_one_column :
40 protected alignment_score_matrix_one_column_base<score_t>,
41 public alignment_matrix_column_major_range_base<alignment_score_matrix_one_column<score_t>>
45 "The score type must be either an arithmetic type or a simd vector type.");
47 using matrix_base_t = alignment_score_matrix_one_column_base<score_t>;
49 using range_base_t = alignment_matrix_column_major_range_base<alignment_score_matrix_one_column<score_t>>;
55 using typename matrix_base_t::element_type;
56 using typename range_base_t::alignment_column_type;
60 using matrix_base_t::num_cols;
67 using value_type = alignment_score_matrix_proxy<score_t>;
69 using reference = value_type;
71 using iterator =
typename range_base_t::iterator;
73 using sentinel =
typename range_base_t::sentinel;
74 using typename matrix_base_t::size_type;
75 using typename matrix_base_t::underlying_type;
82 constexpr alignment_score_matrix_one_column() =
default;
84 constexpr alignment_score_matrix_one_column(alignment_score_matrix_one_column
const &) =
default;
86 constexpr alignment_score_matrix_one_column(alignment_score_matrix_one_column &&) =
default;
88 constexpr alignment_score_matrix_one_column & operator=(alignment_score_matrix_one_column
const &) =
default;
90 constexpr alignment_score_matrix_one_column & operator=(alignment_score_matrix_one_column &&) =
default;
92 ~alignment_score_matrix_one_column() =
default;
107 template <std::ranges::forward_range first_sequence_t, std::ranges::forward_range second_sequence_t>
108 constexpr alignment_score_matrix_one_column(first_sequence_t && first,
109 second_sequence_t && second,
110 score_t
const initial_value = score_t{})
112 matrix_base_t::num_cols =
static_cast<size_type
>(std::ranges::distance(first) + 1);
113 matrix_base_t::num_rows =
static_cast<size_type
>(std::ranges::distance(second) + 1);
114 matrix_base_t::pool.resize(matrix_base_t::num_rows + 1, element_type{initial_value, initial_value});
120 constexpr alignment_column_type initialise_column(size_type
const SEQAN3_DOXYGEN_ONLY(column_index))
noexcept
122 return alignment_column_type{
124 column_data_view_type{
std::addressof(matrix_base_t::pool[0]), matrix_base_t::num_rows}};
128 template <std::random_access_iterator iter_t>
129 constexpr value_type make_proxy(iter_t host_iter)
noexcept
131 return {std::get<0>(*host_iter),
132 std::get<0>(matrix_base_t::cache),
133 std::get<1>(*host_iter),
134 std::get<1>(*host_iter),
135 std::get<2>(matrix_base_t::cache)};
139 template <std::random_access_iterator iter_t>
140 constexpr void on_column_iterator_creation(iter_t host_iter)
noexcept
143 std::get<1>(matrix_base_t::cache) = std::get<0>(*host_iter);
147 template <std::random_access_iterator iter_t>
148 constexpr void before_column_iterator_increment(iter_t SEQAN3_DOXYGEN_ONLY(host_iter))
noexcept
151 std::get<0>(matrix_base_t::cache) = std::move(std::get<1>(matrix_base_t::cache));
155 template <std::random_access_iterator iter_t>
156 constexpr void after_column_iterator_increment(iter_t host_iter)
noexcept
159 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.