21 namespace seqan3::detail
26 template <
typename score_type>
39 template <
typename matrix_t>
41 SEQAN3_CONCEPT matrix = requires(remove_cvref_t<matrix_t> m)
48 typename remove_cvref_t<matrix_t>::value_type;
52 typename remove_cvref_t<matrix_t>::reference;
56 typename remove_cvref_t<matrix_t>::size_type;
61 { m.cols() } ->
typename remove_cvref_t<matrix_t>::size_type;
66 { m.rows() } ->
typename remove_cvref_t<matrix_t>::size_type;
71 { m.at(matrix_coordinate{}) } ->
typename remove_cvref_t<matrix_t>::reference;
89 template <matrix matrix1_t, matrix matrix2_t>
93 inline bool operator==(matrix1_t
const & lhs, matrix2_t
const & rhs) noexcept
95 if (lhs.rows() != rhs.rows())
98 if (lhs.cols() != rhs.cols())
101 for (
size_t row = 0u; row < lhs.rows(); ++row)
102 for (
size_t col = 0u; col < lhs.cols(); ++col)
103 if (matrix_coordinate co{row_index_type{row}, column_index_type{col}}; lhs.at(co) != rhs.at(co))
115 template <matrix matrix1_t, matrix matrix2_t>
119 inline bool operator!=(matrix1_t
const & lhs, matrix2_t
const & rhs) noexcept
121 return !(lhs == rhs);