43  std::queue<E>       m_output_queue;
 
   44  std::size_t         m_current_num_bytes;
 
   52  output_queue() noexcept : m_output_queue(), m_current_num_bytes(0u) { }
 
   55  std::optional<E> get_next_element() {
 
   56    if (m_output_queue.empty()) {
 
   57      return std::optional<E> { };
 
   59    E elem = m_output_queue.front();
 
   61    m_current_num_bytes -= elem.size();
 
   62    return std::optional<E> {elem};
 
   65  void add_element(
const E& element) {
 
   66    m_output_queue.push(element);
 
   67    m_current_num_bytes += element.size(); 
 
   74  void clear() 
noexcept {
 
   75    std::queue<E>().swap(m_output_queue);
 
   76    m_current_num_bytes = 0u;