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

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