20 namespace seqan3::detail
39 template <
typename file_type>
40 class in_file_iterator
42 static_assert(!std::is_const_v<file_type>,
43 "You cannot iterate over const files, because the iterator changes the file.");
50 using value_type =
typename file_type::value_type;
53 using reference =
typename file_type::reference;
55 using const_reference =
typename file_type::reference;
57 using size_type =
typename file_type::size_type;
59 using difference_type =
typename file_type::difference_type;
61 using pointer =
typename file_type::value_type *;
69 constexpr in_file_iterator() =
default;
72 constexpr in_file_iterator(in_file_iterator
const &) =
default;
74 constexpr in_file_iterator & operator=(in_file_iterator
const &) =
default;
76 constexpr in_file_iterator (in_file_iterator &&) =
default;
78 constexpr in_file_iterator & operator=(in_file_iterator &&) =
default;
80 ~in_file_iterator() =
default;
83 constexpr in_file_iterator(file_type & _host) noexcept :
91 in_file_iterator & operator++()
94 assert(host !=
nullptr);
95 host->read_next_record();
102 assert(host !=
nullptr);
107 reference operator*() noexcept
109 assert(host !=
nullptr);
110 return host->record_buffer;
114 reference operator*() const noexcept
116 assert(host !=
nullptr);
117 return host->record_buffer;
126 constexpr
bool operator==(std::default_sentinel_t
const &)
const noexcept
129 assert(host !=
nullptr);
134 constexpr
bool operator!=(std::default_sentinel_t
const &)
const noexcept
136 assert(host !=
nullptr);
137 return !host->at_end;
141 constexpr
friend bool operator==(std::default_sentinel_t
const &,
142 in_file_iterator
const & it) noexcept
144 return (it == std::default_sentinel);
148 constexpr
friend bool operator!=(std::default_sentinel_t
const &,
149 in_file_iterator
const & it) noexcept
151 return (it != std::default_sentinel);