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