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

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