31 T& operator*() {
return m_value; }
44 T* operator->() {
return &m_value; }
45 T& operator*() {
return m_value; }
59 using character_type = T;
109 std::vector<value_type> readItems;
111 if (m_q.size() < n)
return { readItems,
true };
113 for (std::uint32_t i = 0; i < n; ++i) readItems.push_back(*
read());
115 if (readItems.back().m_eoq) readItems.pop_back();
117 return { readItems,
false };
130 if (m_q.size() < n && !(!m_q.empty() && m_q.back().m_eoq))
return { {},
true };
132 std::vector<value_type> prefix;
140 return { prefix,
false };
155 if (!m_q.empty() && m_q.back().m_eoq)
158 else m_q.insert(--m_q.end(), item);
161 else m_q.push_back(item);
166 push(value_type{ ch,
false });
169 template <
typename InputIterator>
170 void push(InputIterator first, InputIterator last)
172 while (first != last)
186 m_q.push_front(item);
202 template <
typename InputIterator>
203 void prepend(InputIterator first, InputIterator last)
205 auto it = m_q.begin();
206 while (first != last) it = ++m_q.insert(it,
value_type{
static_cast<T
>(*first++),
false });
210 std::deque<value_type> m_q;
222 template <
typename T,
typename OutputIterator>
227 auto item = q.
read();
228 if (item.m_wait || item->m_eoq)
return;
237 template <
typename InputIterator>
240 using value_type =
typename std::iterator_traits<InputIterator>::value_type;