Chops Net IP
Loading...
Searching...
No Matches
output_queue.hpp
Go to the documentation of this file.
1
24#ifndef OUTPUT_QUEUE_HPP_INCLUDED
25#define OUTPUT_QUEUE_HPP_INCLUDED
26
27#include <queue>
28#include <cstddef> // std::size_t
29#include <optional>
30
32
33namespace chops {
34namespace net {
35namespace detail {
36
37// template parameter E is instantiated as either a shared_buffer or a shared_buffer and
38// endpoint, depending on IO handler; a size() method is expected for E
39template <typename E>
41private:
42
43 std::queue<E> m_output_queue;
44 std::size_t m_current_num_bytes;
45
46 // std::size_t m_queue_size;
47 // std::size_t m_total_bufs_sent;
48 // std::size_t m_total_bytes_sent;
49
50public:
51
52 output_queue() noexcept : m_output_queue(), m_current_num_bytes(0u) { }
53
54 // io handlers call this method to get next buffer of data, can be empty
55 std::optional<E> get_next_element() {
56 if (m_output_queue.empty()) {
57 return std::optional<E> { };
58 }
59 E elem = m_output_queue.front();
60 m_output_queue.pop();
61 m_current_num_bytes -= elem.size();
62 return std::optional<E> {elem};
63 }
64
65 void add_element(const E& element) {
66 m_output_queue.push(element);
67 m_current_num_bytes += element.size(); // note - possible integer overflow
68 }
69
70 chops::net::output_queue_stats get_queue_stats() const noexcept {
71 return chops::net::output_queue_stats { m_output_queue.size(), m_current_num_bytes };
72 }
73
74 void clear() noexcept {
75 std::queue<E>().swap(m_output_queue);
76 m_current_num_bytes = 0u;
77 }
78
79};
80
81} // end detail namespace
82} // end net namespace
83} // end chops namespace
84
85#endif
86
Definition output_queue.hpp:40
Structures containing statistics gathered on internal queues.
output_queue_stats provides information on the internal output queue.
Definition queue_stats.hpp:29