diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-07-27 18:31:10 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-07-27 18:31:10 +0200 |
commit | 379b2b37010cff9343cb9cc468c5c0b17a37ff7e (patch) | |
tree | 1b4c3e3cedf45123a7a16084cfeecb5ac234bfbb /mmss/mmss.cpp | |
parent | 49652b9e2882a1c3cd5203ea91f90cdd32a090e9 (diff) | |
download | gmrf-379b2b37010cff9343cb9cc468c5c0b17a37ff7e.tar gmrf-379b2b37010cff9343cb9cc468c5c0b17a37ff7e.zip |
Create a common base class event_t for packet_t and scheduled_t
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); } } |