summaryrefslogtreecommitdiffstats
path: root/mmss/mmss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mmss/mmss.cpp')
-rw-r--r--mmss/mmss.cpp44
1 files changed, 8 insertions, 36 deletions
diff --git a/mmss/mmss.cpp b/mmss/mmss.cpp
index bbdb0ca..8b94c20 100644
--- a/mmss/mmss.cpp
+++ b/mmss/mmss.cpp
@@ -39,20 +39,6 @@ static void init_nodes(std::list<std::shared_ptr<node_t>> &nodes) {
}
-static inline int timeout_min(int a, int b) {
- if (a < 0)
- return b;
- else if (b < 0)
- return a;
- else
- return std::min(a, b);
-}
-
-
-static int get_queue_timeout(const context_t *mmss) {
- return timeout_min(mmss->packet_queue.timeout(), mmss->scheduled_queue.timeout());
-}
-
void main(int argc, char *argv[]) {
if (argc != 2) {
std::fprintf(stderr, "usage: %s protocol_module\n", argv[0]);
@@ -74,9 +60,9 @@ void main(int argc, char *argv[]) {
net0->mtu = 1500;
net1->mtu = 1500;
- std::shared_ptr<node_t> node1 = node_t::create(&mmss, "node1", 1, proto);
- std::shared_ptr<node_t> node2 = node_t::create(&mmss, "node2", 2, proto);
- std::shared_ptr<node_t> node3 = node_t::create(&mmss, "node3", 3, proto);
+ std::shared_ptr<node_t> node1 = std::make_shared<node_t>(&mmss, "node1", 1, proto);
+ std::shared_ptr<node_t> node2 = std::make_shared<node_t>(&mmss, "node2", 2, proto);
+ std::shared_ptr<node_t> node3 = std::make_shared<node_t>(&mmss, "node3", 3, proto);
std::list<std::shared_ptr<node_t>> nodes;
@@ -93,10 +79,10 @@ void main(int argc, char *argv[]) {
add_iface(node3, net1, "mmss1", &addr4);
while (true) {
- if (mmss.now() > 1000000000)
+ if (mmss.now() > 10000000)
break;
- int timeout = get_queue_timeout(&mmss);
+ int timeout = mmss.event_queue.timeout();
if (timeout < 0) {
fprintf(stderr, "nothing queued, deadlock occured.\n");
@@ -104,29 +90,15 @@ void main(int argc, char *argv[]) {
}
if (timeout > 0) {
- assert(!mmss.packet_queue.get());
- assert(!mmss.scheduled_queue.get());
+ assert(!mmss.event_queue.get());
mmss.time += timeout;
- timeout = get_queue_timeout(&mmss);
+ timeout = mmss.event_queue.timeout();
}
assert(timeout == 0);
- while (timeout == 0) {
- std::shared_ptr<packet_t> packet = mmss.packet_queue.get();
- std::shared_ptr<scheduled_t> scheduled = mmss.scheduled_queue.get();
-
- assert(packet || scheduled);
-
- if (packet)
- dispatch(packet);
-
- if (scheduled)
- run_scheduled(scheduled);
-
- timeout = get_queue_timeout(&mmss);
- }
+ mmss.event_queue.get()->handle(&mmss);
}
}