diff options
Diffstat (limited to 'mmss/mmss.cpp')
-rw-r--r-- | mmss/mmss.cpp | 44 |
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); } } |