14namespace seqan3::detail
28template <two_dimensional_matrix_iterator matrix_iter_t>
29class trace_iterator_banded :
public trace_iterator_base<trace_iterator_banded<matrix_iter_t>, matrix_iter_t>
32 static_assert(std::same_as<std::iter_value_t<matrix_iter_t>, trace_directions>,
33 "Value type of the underlying iterator must be trace_directions.");
36 using base_t = trace_iterator_base<trace_iterator_banded<matrix_iter_t>, matrix_iter_t>;
45 constexpr trace_iterator_banded() =
default;
46 constexpr trace_iterator_banded(trace_iterator_banded
const &) =
default;
47 constexpr trace_iterator_banded(trace_iterator_banded &&) =
default;
48 constexpr trace_iterator_banded & operator=(trace_iterator_banded
const &) =
default;
49 constexpr trace_iterator_banded & operator=(trace_iterator_banded &&) =
default;
50 ~trace_iterator_banded() =
default;
57 template <
typename index_t>
58 constexpr trace_iterator_banded(matrix_iter_t
const matrix_iter,
59 column_index_type<index_t>
const & pivot_column) noexcept :
61 pivot_column{
static_cast<size_t>(pivot_column.get())}
73 template <two_dimensional_matrix_iterator other_matrix_iter_t>
74 requires std::constructible_from<matrix_iter_t, other_matrix_iter_t>
75 constexpr trace_iterator_banded(trace_iterator_banded<other_matrix_iter_t>
const other) noexcept : base_t{other}
80 [[nodiscard]]
constexpr matrix_coordinate coordinate() const noexcept
82 auto coord = base_t::coordinate();
83 coord.row +=
static_cast<int32_t
>(coord.col - pivot_column);
89 constexpr void go_left(matrix_iter_t & iter)
const noexcept
93 iter -= matrix_offset{row_index_type{-1}, column_index_type{1}};
97 constexpr void go_diagonal(matrix_iter_t & iter)
const noexcept
101 iter -= matrix_offset{row_index_type{0}, column_index_type{1}};
104 size_t pivot_column{};
Provides seqan3::detail::trace_iterator_base.