SeqAn3  3.0.2
The Modern C++ library for sequence analysis.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
two_dimensional_matrix_iterator_concept.hpp
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------------------------------
2 // Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin
3 // Copyright (c) 2016-2020, Knut Reinert & MPI für molekulare Genetik
4 // This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5 // shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6 // -----------------------------------------------------------------------------------------------------
7 
13 #pragma once
14 
15 #include <type_traits>
16 
18 #include <seqan3/std/concepts>
19 #include <seqan3/std/iterator>
20 
21 namespace seqan3::detail
22 {
23 
91 template <typename iter_t>
94 SEQAN3_CONCEPT two_dimensional_matrix_iterator =
95  std::random_access_iterator<iter_t> &&
96  requires(std::remove_reference_t<iter_t> it, std::remove_reference_t<iter_t> const cit, matrix_offset offset)
97  {
98  { it += offset };
99  { it + offset };
100  { offset + it };
101  { cit + offset };
102  { offset + cit };
103  { it -= offset };
104  { it - offset };
105  { cit - offset };
106  { it.coordinate() };
107  { cit.coordinate() };
108 
109  SEQAN3_RETURN_TYPE_CONSTRAINT(it += offset, std::same_as, std::remove_reference_t<iter_t> &);
112  SEQAN3_RETURN_TYPE_CONSTRAINT(it -= offset, std::same_as, std::remove_reference_t<iter_t> &);
115  SEQAN3_RETURN_TYPE_CONSTRAINT(it.coordinate(), std::same_as, matrix_coordinate);
116  SEQAN3_RETURN_TYPE_CONSTRAINT(cit.coordinate(), std::same_as, matrix_coordinate);
117  };
119 } // namespace seqan3::detail
matrix_coordinate.hpp
Provides seqan3::detail::alignment_coordinate and associated strong types.
iterator
Provides C++20 additions to the <iterator> header.
concepts
The Concepts library.
SEQAN3_RETURN_TYPE_CONSTRAINT
#define SEQAN3_RETURN_TYPE_CONSTRAINT(expression, concept_name,...)
Same as writing {expression} -> concept_name<type1[, ...]> in a concept definition.
Definition: platform.hpp:57
std::remove_reference_t