Make Loop and LoopData only hold move-only functions
This commit is contained in:
+6
-6
@@ -110,25 +110,25 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set postCb callback */
|
/* Set postCb callback */
|
||||||
void setPostHandler(std::function<void(Loop *)> handler) {
|
void setPostHandler(fu2::unique_function<void(Loop *)> &&handler) {
|
||||||
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
|
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
|
||||||
|
|
||||||
loopData->postHandler = handler;
|
loopData->postHandler = std::move(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setPreHandler(std::function<void(Loop *)> handler) {
|
void setPreHandler(fu2::unique_function<void(Loop *)> &&handler) {
|
||||||
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
|
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 */
|
/* Defer this callback on Loop's thread of execution */
|
||||||
void defer(std::function<void()> cb) {
|
void defer(fu2::unique_function<void()> &&cb) {
|
||||||
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
|
LoopData *loopData = (LoopData *) us_loop_ext((us_loop *) this);
|
||||||
|
|
||||||
//if (std::thread::get_id() == ) // todo: add fast path for same thread id
|
//if (std::thread::get_id() == ) // todo: add fast path for same thread id
|
||||||
loopData->deferMutex.lock();
|
loopData->deferMutex.lock();
|
||||||
loopData->deferQueues[loopData->currentDeferQueue].emplace_back(cb);
|
loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb));
|
||||||
loopData->deferMutex.unlock();
|
loopData->deferMutex.unlock();
|
||||||
|
|
||||||
us_wakeup_loop((us_loop *) this);
|
us_wakeup_loop((us_loop *) this);
|
||||||
|
|||||||
+4
-2
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
#include "PerMessageDeflate.h"
|
#include "PerMessageDeflate.h"
|
||||||
|
|
||||||
|
#include "f2/function2.hpp"
|
||||||
|
|
||||||
namespace uWS {
|
namespace uWS {
|
||||||
|
|
||||||
struct Loop;
|
struct Loop;
|
||||||
@@ -34,9 +36,9 @@ struct alignas(16) LoopData {
|
|||||||
private:
|
private:
|
||||||
std::mutex deferMutex;
|
std::mutex deferMutex;
|
||||||
int currentDeferQueue = 0;
|
int currentDeferQueue = 0;
|
||||||
std::vector<std::function<void()>> deferQueues[2];
|
std::vector<fu2::unique_function<void()>> deferQueues[2];
|
||||||
|
|
||||||
std::function<void(Loop *)> postHandler, preHandler;
|
fu2::unique_function<void(Loop *)> postHandler, preHandler;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~LoopData() {
|
~LoopData() {
|
||||||
|
|||||||
Reference in New Issue
Block a user