21namespace seqan3::detail
35template <
typename char_t,
typename traits_t = std::
char_traits<
char_t>>
36class fast_istreambuf_iterator
40 stream_buffer_exposer<char_t, traits_t> * stream_buf =
nullptr;
46 using difference_type = ptrdiff_t;
47 using value_type = char_t;
48 using reference = char_t;
56 fast_istreambuf_iterator() noexcept = default;
57 fast_istreambuf_iterator(fast_istreambuf_iterator const &) noexcept = default;
58 fast_istreambuf_iterator(fast_istreambuf_iterator &&) noexcept = default;
59 fast_istreambuf_iterator & operator=(fast_istreambuf_iterator const &) noexcept = default;
60 fast_istreambuf_iterator & operator=(fast_istreambuf_iterator &&) noexcept = default;
61 ~fast_istreambuf_iterator() noexcept = default;
64 explicit fast_istreambuf_iterator(
std::basic_streambuf<char_t, traits_t> & ibuf) :
65 stream_buf{
reinterpret_cast<stream_buffer_exposer<char_t, traits_t> *
>(&ibuf)}
67 assert(stream_buf !=
nullptr);
68 stream_buf->underflow();
76 fast_istreambuf_iterator & operator++()
78 assert(stream_buf !=
nullptr);
79 if ((stream_buf->gptr() + 1) == stream_buf->egptr())
94 reference operator*()
const
96 assert(stream_buf !=
nullptr);
97 return *stream_buf->gptr();
105 friend bool operator==(fast_istreambuf_iterator
const & lhs, std::default_sentinel_t
const &)
noexcept
107 assert(lhs.stream_buf !=
nullptr);
109 return (lhs.stream_buf->gptr() == lhs.stream_buf->egptr());
113 friend bool operator!=(fast_istreambuf_iterator
const & lhs, std::default_sentinel_t
const &)
noexcept
115 return !(lhs == std::default_sentinel);
119 friend bool operator==(std::default_sentinel_t
const &, fast_istreambuf_iterator
const & rhs)
noexcept
121 return rhs == std::default_sentinel;
125 friend bool operator!=(std::default_sentinel_t
const &, fast_istreambuf_iterator
const & rhs)
noexcept
127 return !(rhs == std::default_sentinel);
SeqAn specific customisations in the standard namespace.
Provides seqan3::detail::stream_buffer_exposer.