1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include "MessageQueue.h"
#include <boost/optional/optional.hpp>
MessageQueue::MessageQueue(std::mutex& monitor) :
m_monitor{monitor}
{}
bool MessageQueue::Empty() const {
std::scoped_lock lock(m_monitor);
return m_queue.empty();
}
std::size_t MessageQueue::Size() const {
std::scoped_lock lock(m_monitor);
return m_queue.size();
}
void MessageQueue::Clear() {
std::scoped_lock lock(m_monitor);
decltype(m_queue) empty_queue;
m_queue.swap(empty_queue); // clear queue
}
void MessageQueue::PushBack(Message message) {
std::scoped_lock lock(m_monitor);
m_queue.push(std::move(message));
}
boost::optional<Message> MessageQueue::PopFront() {
std::scoped_lock lock(m_monitor);
if (m_queue.empty())
return boost::none;
Message message = std::move(m_queue.front());
m_queue.pop();
return message;
}
|