aboutsummaryrefslogtreecommitdiff
path: root/lib/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/thread.h')
-rw-r--r--lib/thread.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/thread.h b/lib/thread.h
index d983734..3304892 100644
--- a/lib/thread.h
+++ b/lib/thread.h
@@ -2,6 +2,9 @@
#pragma once
+#include <functional>
+#include <memory>
+
namespace nMatcha {
struct Executor;
@@ -26,4 +29,24 @@ namespace nMatcha {
friend struct Executor;
const Executor* mExecutor;
};
+
+ struct Yielder {
+ virtual void yield() = 0;
+ };
+
+ struct FnThread : public Thread, public Yielder {
+ using UserFn = std::function<void(Yielder&)>;
+ static std::unique_ptr<Thread> make(UserFn f);
+
+ private:
+ virtual void threadFn() override;
+ virtual void yield() override;
+
+ UserFn mUserFn;
+
+ enum class CreatorToken {};
+
+ public:
+ FnThread(CreatorToken, UserFn f) : mUserFn(f) {}
+ };
} // namespace nMatcha