]> AND Private Git Repository - loba.git/blob - messages.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Use a lock-free synchronized queue for the message queue.
[loba.git] / messages.h
1 #ifndef MESSAGES_H
2 #define MESSAGES_H
3
4 #include <queue>
5 #include <string>
6 #include <msg/msg.h>
7 #include "synchro.h"
8 #include "sync_queue.h"
9
10 class message {
11 public:
12     enum message_type { INFO, CREDIT, LOAD, CTRL_CLOSE, DATA_CLOSE };
13
14     message(message_type t, double a): type(t), amount(a) { }
15
16     message_type get_type() const       { return type;   }
17     double get_amount() const           { return amount; }
18     double get_size() const;
19
20     std::string to_string();
21
22 private:
23     message_type type;
24     double amount;
25 };
26
27 class message_queue {
28 public:
29     // Push a message on queue
30     void push(m_task_t task);
31
32     // Try to pop a message.  Returns true on success.
33     // Parameter "timeout" may be 0 for non-blocking operation, -1 for
34     // infinite waiting, or any positive timeout.
35     bool pop(message*& msg, m_host_t& from, double timeout);
36
37     bool empty() const                  { return queue.empty(); }
38     size_t size() const                 { return queue.size();  }
39
40 private:
41     mutex_t mutex;
42     condition_t cond;
43     sync_queue<m_task_t> queue;
44 };
45
46 #endif // !MESSAGES_H
47
48 // Local variables:
49 // mode: c++
50 // End: