18namespace seqan3::detail
37template <
typename file_type>
41 "You cannot iterate over const files, because the iterator changes the file.");
50 using value_type =
typename file_type::value_type;
52 using reference =
typename file_type::reference;
54 using const_reference =
typename file_type::reference;
56 using size_type =
typename file_type::size_type;
58 using difference_type =
typename file_type::difference_type;
60 using pointer =
typename file_type::value_type *;
69 constexpr in_file_iterator() =
default;
71 constexpr in_file_iterator(in_file_iterator
const &) =
default;
73 constexpr in_file_iterator & operator=(in_file_iterator
const &) =
default;
75 constexpr in_file_iterator(in_file_iterator &&) =
default;
77 constexpr in_file_iterator & operator=(in_file_iterator &&) =
default;
79 ~in_file_iterator() =
default;
82 constexpr in_file_iterator(file_type & _host) noexcept : host{&_host}
90 in_file_iterator & operator++()
92 assert(host !=
nullptr);
93 host->read_next_record();
100 assert(host !=
nullptr);
105 reference operator*() noexcept
107 assert(host !=
nullptr);
108 return host->record_buffer;
112 reference operator*() const noexcept
114 assert(host !=
nullptr);
115 return host->record_buffer;
127 assert(host !=
nullptr);
134 assert(host !=
nullptr);
135 return !host->at_end;
159 assert(host !=
nullptr);
160 return host->position_buffer;
166 assert(host !=
nullptr);
167 host->secondary_stream->seekg(pos);
168 if (host->secondary_stream->fail())
172 host->at_end =
false;
173 host->read_next_record();