17namespace seqan3::detail
36template <
typename file_type>
39 static_assert(!std::is_const_v<file_type>,
40 "You cannot iterate over const files, because the iterator changes the file.");
49 using value_type =
typename file_type::value_type;
51 using reference =
typename file_type::reference;
53 using const_reference =
typename file_type::reference;
55 using size_type =
typename file_type::size_type;
57 using difference_type =
typename file_type::difference_type;
59 using pointer =
typename file_type::value_type *;
68 constexpr in_file_iterator() =
default;
70 constexpr in_file_iterator(in_file_iterator
const &) =
default;
72 constexpr in_file_iterator & operator=(in_file_iterator
const &) =
default;
74 constexpr in_file_iterator(in_file_iterator &&) =
default;
76 constexpr in_file_iterator & operator=(in_file_iterator &&) =
default;
78 ~in_file_iterator() =
default;
81 constexpr in_file_iterator(file_type & _host) noexcept : host{&_host}
89 in_file_iterator & operator++()
91 assert(host !=
nullptr);
92 host->read_next_record();
99 assert(host !=
nullptr);
104 reference operator*() noexcept
106 assert(host !=
nullptr);
107 return host->record_buffer;
111 reference operator*() const noexcept
113 assert(host !=
nullptr);
114 return host->record_buffer;
124 constexpr bool operator==(std::default_sentinel_t
const &)
const noexcept
126 assert(host !=
nullptr);
131 constexpr bool operator!=(std::default_sentinel_t
const &)
const noexcept
133 assert(host !=
nullptr);
134 return !host->at_end;
138 constexpr friend bool operator==(std::default_sentinel_t
const &, in_file_iterator
const & it)
noexcept
140 return (it == std::default_sentinel);
144 constexpr friend bool operator!=(std::default_sentinel_t
const &, in_file_iterator
const & it)
noexcept
146 return (it != std::default_sentinel);
158 assert(host !=
nullptr);
159 return host->position_buffer;
165 assert(host !=
nullptr);
166 host->secondary_stream->seekg(pos);
167 if (host->secondary_stream->fail())
171 host->at_end =
false;
172 host->read_next_record();