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

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