More small optimizations
This commit is contained in:
parent
f97d1e1569
commit
cb5d5a9397
5 changed files with 12 additions and 9 deletions
|
@ -88,11 +88,11 @@ void gmrf_schedule(gmrf_t *gmrf, gmrf_scheduled_func f, void *arg, unsigned dela
|
||||||
|
|
||||||
std::shared_ptr<MMSS::scheduled_t> scheduled = std::make_shared<MMSS::scheduled_t>();
|
std::shared_ptr<MMSS::scheduled_t> scheduled = std::make_shared<MMSS::scheduled_t>();
|
||||||
|
|
||||||
scheduled->node = node;
|
scheduled->node = std::move(node);
|
||||||
scheduled->f = f;
|
scheduled->f = f;
|
||||||
scheduled->arg = arg;
|
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) {
|
gmrf_time_t gmrf_now(gmrf_t *gmrf) {
|
||||||
|
|
|
@ -70,7 +70,7 @@ void enqueue(context_t *mmss, const std::shared_ptr<iface_t> &source, const std:
|
||||||
packet->data.reset(new uint8_t[len]);
|
packet->data.reset(new uint8_t[len]);
|
||||||
std::memcpy(packet->data.get(), data, 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,10 +37,10 @@ void logf(context_t *mmss, int priority, const char *format, ...) {
|
||||||
|
|
||||||
std::va_list ap;
|
std::va_list ap;
|
||||||
va_start(ap, format);
|
va_start(ap, format);
|
||||||
vsnprintf(buf+pos, sizeof(buf)-pos, format, ap);
|
std::vsnprintf(buf+pos, sizeof(buf)-pos, format, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
fprintf(stderr, "%s\n", buf);
|
std::fprintf(stderr, "%s\n", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ void main(int argc, char *argv[]) {
|
||||||
context_t mmss;
|
context_t mmss;
|
||||||
config_t conf = {};
|
config_t conf = {};
|
||||||
|
|
||||||
read_config(&mmss, &conf, "babel_test.mmss");
|
//read_config(&mmss, &conf, "babel_test.mmss");
|
||||||
|
|
||||||
std::shared_ptr<network_t> net0 = std::make_shared<network_t>();
|
std::shared_ptr<network_t> net0 = std::make_shared<network_t>();
|
||||||
std::shared_ptr<network_t> net1 = std::make_shared<network_t>();
|
std::shared_ptr<network_t> net1 = std::make_shared<network_t>();
|
||||||
|
@ -96,6 +96,9 @@ void main(int argc, char *argv[]) {
|
||||||
add_iface(node3, net1, "mmss1", &addr4);
|
add_iface(node3, net1, "mmss1", &addr4);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
if (mmss.now > 1000000000)
|
||||||
|
break;
|
||||||
|
|
||||||
int timeout = get_queue_timeout(&mmss);
|
int timeout = get_queue_timeout(&mmss);
|
||||||
|
|
||||||
if (timeout < 0) {
|
if (timeout < 0) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ template<typename T> class timeout_queue_t {
|
||||||
std::shared_ptr<T> data;
|
std::shared_ptr<T> data;
|
||||||
uint64_t timeout;
|
uint64_t timeout;
|
||||||
|
|
||||||
element_t(const std::shared_ptr<T> &data0, uint64_t timeout0) : data(data0), timeout(timeout0) {}
|
element_t(std::shared_ptr<T> &&data0, uint64_t timeout0) : data(std::move(data0)), timeout(timeout0) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
context_t *mmss;
|
context_t *mmss;
|
||||||
|
@ -49,13 +49,13 @@ template<typename T> class timeout_queue_t {
|
||||||
public:
|
public:
|
||||||
timeout_queue_t(context_t *mmss0) : mmss(mmss0) {}
|
timeout_queue_t(context_t *mmss0) : mmss(mmss0) {}
|
||||||
|
|
||||||
void put(const std::shared_ptr<T> &data, uint64_t timeout) {
|
void put(std::shared_ptr<T> &&data, uint64_t timeout) {
|
||||||
auto it = queue.begin(), end = queue.end();
|
auto it = queue.begin(), end = queue.end();
|
||||||
|
|
||||||
while (it != end && it->timeout < timeout)
|
while (it != end && it->timeout < timeout)
|
||||||
++it;
|
++it;
|
||||||
|
|
||||||
queue.insert(it, element_t(data, timeout));
|
queue.emplace(it, std::move(data), timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<T> get() {
|
std::shared_ptr<T> get() {
|
||||||
|
|
Reference in a new issue