17 #include <type_traits>
25 namespace seqan3::detail
39 enum struct advanceable_alignment_coordinate_state : uint8_t
64 template <advanceable_alignment_coordinate_state state = advanceable_alignment_coordinate_state::none>
65 class advanceable_alignment_coordinate
79 constexpr advanceable_alignment_coordinate() noexcept = default;
81 constexpr advanceable_alignment_coordinate(advanceable_alignment_coordinate const &) noexcept = default;
82 constexpr advanceable_alignment_coordinate(advanceable_alignment_coordinate &&) noexcept = default;
84 constexpr advanceable_alignment_coordinate & operator=(advanceable_alignment_coordinate const &) noexcept = default;
86 constexpr advanceable_alignment_coordinate & operator=(advanceable_alignment_coordinate &&) noexcept = default;
87 ~advanceable_alignment_coordinate() noexcept = default;
90 template <advanceable_alignment_coordinate_state other_state>
92 constexpr advanceable_alignment_coordinate(advanceable_alignment_coordinate<other_state> const & other) :
98 template <advanceable_alignment_coordinate_state other_state>
100 constexpr advanceable_alignment_coordinate(advanceable_alignment_coordinate<other_state> && other) :
101 first{
std::move(other.first)},
102 second{
std::move(other.second)}
109 constexpr advanceable_alignment_coordinate(column_index_type<size_t>
const c_idx,
110 row_index_type<size_t>
const r_idx) noexcept :
117 constexpr
friend bool operator==(advanceable_alignment_coordinate
const & lhs,
118 advanceable_alignment_coordinate
const & rhs) noexcept
123 constexpr
friend bool operator!=(advanceable_alignment_coordinate
const & lhs,
124 advanceable_alignment_coordinate
const & rhs) noexcept
129 constexpr
friend bool operator<=(advanceable_alignment_coordinate
const & lhs,
130 advanceable_alignment_coordinate
const & rhs) noexcept
135 constexpr
friend bool operator<(advanceable_alignment_coordinate
const & lhs,
136 advanceable_alignment_coordinate
const & rhs) noexcept
141 constexpr
friend bool operator>=(advanceable_alignment_coordinate
const & lhs,
142 advanceable_alignment_coordinate
const & rhs) noexcept
147 constexpr
friend bool operator>(advanceable_alignment_coordinate
const & lhs,
148 advanceable_alignment_coordinate
const & rhs) noexcept
164 constexpr advanceable_alignment_coordinate & operator++() noexcept
165 requires (state != advanceable_alignment_coordinate_state::
none)
167 if constexpr (state == advanceable_alignment_coordinate_state::column)
177 constexpr advanceable_alignment_coordinate operator++(
int ) noexcept
178 requires (state != advanceable_alignment_coordinate_state::none)
180 advanceable_alignment_coordinate tmp{*
this};
188 constexpr advanceable_alignment_coordinate & operator--() noexcept
189 requires (state != advanceable_alignment_coordinate_state::
none)
191 if constexpr (state == advanceable_alignment_coordinate_state::column)
201 constexpr advanceable_alignment_coordinate operator--(
int ) noexcept
202 requires (state != advanceable_alignment_coordinate_state::none)
204 advanceable_alignment_coordinate tmp{*
this};
213 constexpr advanceable_alignment_coordinate & operator+=(difference_type
const offset) noexcept
214 requires (state != advanceable_alignment_coordinate_state::none)
216 if constexpr (state == advanceable_alignment_coordinate_state::column)
227 constexpr advanceable_alignment_coordinate & operator-=(difference_type
const offset) noexcept
228 requires (state != advanceable_alignment_coordinate_state::none)
230 if constexpr (state == advanceable_alignment_coordinate_state::column)
241 constexpr advanceable_alignment_coordinate operator+(difference_type
const offset)
const noexcept
242 requires (state != advanceable_alignment_coordinate_state::none)
244 advanceable_alignment_coordinate tmp{*
this};
253 constexpr advanceable_alignment_coordinate operator-(difference_type
const offset)
const noexcept
254 requires (state != advanceable_alignment_coordinate_state::none)
256 advanceable_alignment_coordinate tmp{*
this};
265 constexpr difference_type operator-(advanceable_alignment_coordinate
const & other)
const noexcept
266 requires (state != advanceable_alignment_coordinate_state::none)
268 if constexpr (state == advanceable_alignment_coordinate_state::column)
269 return this->first - other.first;
271 return this->second - other.second;
281 constexpr
friend advanceable_alignment_coordinate operator+(difference_type
const offset,
282 advanceable_alignment_coordinate
const & me) noexcept
283 requires (state != advanceable_alignment_coordinate_state::none)
310 template <
typename char_t,
typename coordinate_type>
311 requires detail::is_value_specialisation_of_v<std::remove_cvref_t<coordinate_type>,
312 detail::advanceable_alignment_coordinate>
A "pretty printer" for most SeqAn data structures and related types.
Definition: debug_stream_type.hpp:78
The <concepts> header from C++20's standard library.
Provides seqan3::debug_stream and related types.
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
@ none
No flag is set.
Definition: debug_stream_type.hpp:32
@ offset
Sequence (seqan3::field::seq) relative start position (0-based), unsigned value.
Provides seqan3::detail::matrix_index, seqan3::detail::matrix_coordinate and associated strong types.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
requires detail::debug_stream_range_guard< alignment_matrix_t > &&detail::matrix< alignment_matrix_t > debug_stream_type< char_t > & operator<<(debug_stream_type< char_t > &s, alignment_matrix_t &&matrix)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: debug_matrix.hpp:496
SeqAn specific customisations in the standard namespace.
Provides basic data structure for strong types.
Provides type traits for working with templates.
Provides seqan3::debug_stream and related types.