From cb5d5a9397928b0c1c844f35e5cae14a52955526 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 27 Jul 2013 00:33:10 +0200 Subject: More small optimizations --- mmss/gmrf.cpp | 4 ++-- mmss/iface.cpp | 2 +- mmss/log.cpp | 4 ++-- mmss/mmss.cpp | 5 ++++- mmss/queue.hpp | 6 +++--- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/mmss/gmrf.cpp b/mmss/gmrf.cpp index d6eecbc..c71f681 100644 --- a/mmss/gmrf.cpp +++ b/mmss/gmrf.cpp @@ -88,11 +88,11 @@ void gmrf_schedule(gmrf_t *gmrf, gmrf_scheduled_func f, void *arg, unsigned dela std::shared_ptr scheduled = std::make_shared(); - scheduled->node = node; + scheduled->node = std::move(node); scheduled->f = f; scheduled->arg = arg; - gmrf->mmss->scheduled_queue.put(scheduled, gmrf->mmss->now+delay); + gmrf->mmss->scheduled_queue.put(std::move(scheduled), gmrf->mmss->now+delay); } gmrf_time_t gmrf_now(gmrf_t *gmrf) { diff --git a/mmss/iface.cpp b/mmss/iface.cpp index c011255..e4ddec7 100644 --- a/mmss/iface.cpp +++ b/mmss/iface.cpp @@ -70,7 +70,7 @@ void enqueue(context_t *mmss, const std::shared_ptr &source, const std: packet->data.reset(new uint8_t[len]); std::memcpy(packet->data.get(), data, len); - mmss->packet_queue.put(packet, mmss->now+1); + mmss->packet_queue.put(std::move(packet), mmss->now+1); } } diff --git a/mmss/log.cpp b/mmss/log.cpp index b66cf6f..4e57f12 100644 --- a/mmss/log.cpp +++ b/mmss/log.cpp @@ -37,10 +37,10 @@ void logf(context_t *mmss, int priority, const char *format, ...) { std::va_list ap; va_start(ap, format); - vsnprintf(buf+pos, sizeof(buf)-pos, format, ap); + std::vsnprintf(buf+pos, sizeof(buf)-pos, format, ap); va_end(ap); - fprintf(stderr, "%s\n", buf); + std::fprintf(stderr, "%s\n", buf); } } diff --git a/mmss/mmss.cpp b/mmss/mmss.cpp index 548425f..c3a4bc2 100644 --- a/mmss/mmss.cpp +++ b/mmss/mmss.cpp @@ -69,7 +69,7 @@ void main(int argc, char *argv[]) { context_t mmss; config_t conf = {}; - read_config(&mmss, &conf, "babel_test.mmss"); + //read_config(&mmss, &conf, "babel_test.mmss"); std::shared_ptr net0 = std::make_shared(); std::shared_ptr net1 = std::make_shared(); @@ -96,6 +96,9 @@ void main(int argc, char *argv[]) { add_iface(node3, net1, "mmss1", &addr4); while (true) { + if (mmss.now > 1000000000) + break; + int timeout = get_queue_timeout(&mmss); if (timeout < 0) { diff --git a/mmss/queue.hpp b/mmss/queue.hpp index 1b1d2af..8efaa97 100644 --- a/mmss/queue.hpp +++ b/mmss/queue.hpp @@ -39,7 +39,7 @@ template class timeout_queue_t { std::shared_ptr data; uint64_t timeout; - element_t(const std::shared_ptr &data0, uint64_t timeout0) : data(data0), timeout(timeout0) {} + element_t(std::shared_ptr &&data0, uint64_t timeout0) : data(std::move(data0)), timeout(timeout0) {} }; context_t *mmss; @@ -49,13 +49,13 @@ template class timeout_queue_t { public: timeout_queue_t(context_t *mmss0) : mmss(mmss0) {} - void put(const std::shared_ptr &data, uint64_t timeout) { + void put(std::shared_ptr &&data, uint64_t timeout) { auto it = queue.begin(), end = queue.end(); while (it != end && it->timeout < timeout) ++it; - queue.insert(it, element_t(data, timeout)); + queue.emplace(it, std::move(data), timeout); } std::shared_ptr get() { -- cgit v1.2.3