11#include "../core/AnyData.h"
12#include "../core/function.hpp"
20 virtual ~CoroutineTask();
22 struct promise_type :
public AnyData {
23 friend CoroutineAwait;
28 CoroutineTask get_return_object();
29 std::suspend_never initial_suspend()
noexcept;
30 std::suspend_always final_suspend()
noexcept;
31 void unhandled_exception() {}
48using CoroutineHandle = std::coroutine_handle<CoroutineTask::promise_type>;
51struct CoroutineAwait {
53 CoroutineAwait(T _f) : f_(
new FunctionArgs<const CoroutineHandle>::Function<T>(_f)) {}
54 CoroutineAwait() =
default;
55 CoroutineAwait(
const CoroutineAwait &) =
delete;
56 CoroutineAwait &operator=(
const CoroutineAwait &) =
delete;
57 virtual ~CoroutineAwait();
58 virtual void await_suspend(CoroutineHandle)
const noexcept;
59 virtual bool await_ready()
const noexcept;
60 virtual CoroutineHandle await_resume()
const noexcept;
63 mutable CoroutineHandle h_;
64 AbstractFunction<const CoroutineHandle> *f_ =
nullptr;
The CoroutineAwait struct.
Definition Coroutine.h:51
The CoroutineTask::promise_type struct.
Definition Coroutine.h:22
void resume_queued()
Execute coroutine_handle::resume on the thread where the promise_type is created.
Definition Coroutine.cpp:87
bool finished()
Return true if task finished.
Definition Coroutine.cpp:55
void wait()
Runs nested Thread::exec() and wait for task finished.
Definition Coroutine.cpp:45