1 #ifndef _MessageQueue_h_ 2 #define _MessageQueue_h_ 3 4 #include <boost/thread/condition.hpp> 5 #include <boost/thread/mutex.hpp> 6 #include <boost/optional/optional_fwd.hpp> 7 8 #include <list> 9 10 #include "../util/Export.h" 11 12 13 class Message; 14 15 /** A thread-safe message queue. The entire public interface is guarded with mutex locks. */ 16 class FO_COMMON_API MessageQueue 17 { 18 public: 19 MessageQueue(boost::mutex& monitor); 20 21 /** Returns true iff the queue is empty. */ 22 bool Empty() const; 23 24 /** Returns the number of messages in the queue. */ 25 std::size_t Size() const; 26 27 /** Empties the queue. */ 28 void Clear(); 29 30 /** Adds \a message to the end of the queue. */ 31 void PushBack(Message& message); 32 33 /** Return and remove the first message in the queue. */ 34 boost::optional<Message> PopFront(); 35 36 private: 37 std::list<Message> m_queue; 38 boost::mutex& m_monitor; 39 }; 40 41 42 #endif 43