18 #include <condition_variable> 39 std::shared_ptr<const Packet> PacketQueue::get_packet_()
41 if (running_ && !queue_.empty())
43 std::shared_ptr<const Packet> packet = queue_.top().packet();
59 : callback_(
std::move(callback)), ticket_(0), running_(true)
73 std::lock_guard<std::mutex> lock(mutex_);
89 std::lock_guard<std::mutex> lock(mutex_);
90 return queue_.empty();
107 std::unique_lock<std::mutex> lock(mutex_);
109 cv_.wait(lock, [
this]()
111 return !running_ || !queue_.empty();
114 return get_packet_();
133 const std::chrono::nanoseconds &timeout)
135 std::unique_lock<std::mutex> lock(mutex_);
137 if (timeout > std::chrono::nanoseconds::zero())
140 cv_.wait_for(lock, timeout, [
this]()
142 return !running_ || !queue_.empty();
147 return get_packet_();
166 if (packet ==
nullptr)
168 throw std::invalid_argument(
"Given packet pointer is null.");
173 std::lock_guard<std::mutex> lock(mutex_);
174 queue_.emplace(std::move(packet), priority, ticket_++);
TEST_VIRTUAL void close()
TEST_VIRTUAL std::shared_ptr< const Packet > pop()
PacketQueue(std::optional< std::function< void(void)>> callback={})
TEST_VIRTUAL void push(std::shared_ptr< const Packet > packet, int priority=0)
TEST_VIRTUAL bool empty()