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

Private GIT Repository
Quit immediately on 2nd Ctrl-C.
[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     double get_size() const;
18
19     std::string to_string();
20
21 private:
22     message_type type;
23     double amount;
24 };
25
26 class message_queue {
27 public:
28     // Push a message on queue
29     void push(m_task_t task);
30
31     // Try to pop a message.  Returns true on success.
32     // Parameter "timeout" may be 0 for non-blocking operation, -1 for
33     // infinite waiting, or any positive timeout.
34     bool pop(message*& msg, m_host_t& from, double timeout);
35
36     bool empty() const                  { return queue.empty(); }
37     size_t size() const                 { return queue.size();  }
38
39 private:
40     mutex_t mutex;
41     condition_t cond;
42     std::queue<m_task_t> queue;
43 };
44
45 #endif // !MESSAGES_H
46
47 // Local variables:
48 // mode: c++
49 // End: