SeqAn3  3.0.2
The Modern C++ library for sequence analysis.
trace_iterator.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 
16 
17 namespace seqan3::detail
18 {
19 
31 template <two_dimensional_matrix_iterator matrix_iter_t>
32 class trace_iterator : public trace_iterator_base<trace_iterator<matrix_iter_t>, matrix_iter_t>
33 {
34 private:
35  static_assert(std::same_as<std::iter_value_t<matrix_iter_t>, trace_directions>,
36  "Value type of the underlying iterator must be trace_directions.");
37 
39  using base_t = trace_iterator_base<trace_iterator<matrix_iter_t>, matrix_iter_t>;
40 
41 public:
45  constexpr trace_iterator() = default;
46  constexpr trace_iterator(trace_iterator const &) = default;
47  constexpr trace_iterator(trace_iterator &&) = default;
48  constexpr trace_iterator & operator=(trace_iterator const &) = default;
49  constexpr trace_iterator & operator=(trace_iterator &&) = default;
50  ~trace_iterator() = default;
51 
55  explicit constexpr trace_iterator(matrix_iter_t const matrix_iter) noexcept : base_t{matrix_iter}
56  {}
57 
67  template <two_dimensional_matrix_iterator other_matrix_iter_t>
69  requires std::constructible_from<matrix_iter_t, other_matrix_iter_t>
71  constexpr trace_iterator(trace_iterator<other_matrix_iter_t> const other) noexcept : base_t{other}
72  {}
74 };
75 
76 } // namespace seqan3::detail
trace_iterator_base.hpp
Provides seqan3::detail::trace_iterator_base.
std::iter_value_t