From 95478c906f7b916992e157302a80dd35e6800a12 Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Wed, 23 Jan 2019 12:26:33 +0100 Subject: [PATCH] Make Loop and LoopData only hold move-only functions --- src/Loop.h | 12 ++++++------ src/LoopData.h | 6 ++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Loop.h b/src/Loop.h index bf3330b..71d55d8 100644 --- a/src/Loop.h +++ b/src/Loop.h @@ -110,25 +110,25 @@ public: } /* Set postCb callback */ - void setPostHandler(std::function handler) { + void setPostHandler(fu2::unique_function &&handler) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); - loopData->postHandler = handler; + loopData->postHandler = std::move(handler); } - void setPreHandler(std::function handler) { + void setPreHandler(fu2::unique_function &&handler) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); - loopData->preHandler = handler; + loopData->preHandler = std::move(handler); } /* Defer this callback on Loop's thread of execution */ - void defer(std::function cb) { + void defer(fu2::unique_function &&cb) { LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this); //if (std::thread::get_id() == ) // todo: add fast path for same thread id loopData->deferMutex.lock(); - loopData->deferQueues[loopData->currentDeferQueue].emplace_back(cb); + loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb)); loopData->deferMutex.unlock(); us_wakeup_loop((us_loop *) this); diff --git a/src/LoopData.h b/src/LoopData.h index f7555ab..d704958 100644 --- a/src/LoopData.h +++ b/src/LoopData.h @@ -25,6 +25,8 @@ #include "PerMessageDeflate.h" +#include "f2/function2.hpp" + namespace uWS { struct Loop; @@ -34,9 +36,9 @@ struct alignas(16) LoopData { private: std::mutex deferMutex; int currentDeferQueue = 0; - std::vector> deferQueues[2]; + std::vector> deferQueues[2]; - std::function postHandler, preHandler; + fu2::unique_function postHandler, preHandler; public: ~LoopData() {