COROIO: coroio/promises.hpp Source File
COROIO
 
All Classes Files Functions Variables Typedefs Pages
Loading...
Searching...
No Matches
promises.hpp
1#pragma once
2#include <coroutine>
3
4namespace NNet {
5
6struct TVoidPromise;
7
8struct TVoidTask : std::coroutine_handle<TVoidPromise>
9{
10 using promise_type = TVoidPromise;
11};
12
14{
15 TVoidTask get_return_object() { return { TVoidTask::from_promise(*this) }; }
16 std::suspend_never initial_suspend() { return {}; }
17 std::suspend_never final_suspend() noexcept { return {}; }
18 void return_void() {}
19 void unhandled_exception() {}
20};
21
23
24struct TVoidSuspendedTask : std::coroutine_handle<TVoidSuspendedPromise>
25{
26 using promise_type = TVoidSuspendedPromise;
27};
28
30{
31 TVoidSuspendedTask get_return_object() { return { TVoidSuspendedTask::from_promise(*this) }; }
32 std::suspend_never initial_suspend() { return {}; }
33 std::suspend_always final_suspend() noexcept { return {}; }
34 void return_void() {}
35 void unhandled_exception() {}
36};
37
61struct Self {
62 bool await_ready() {
63 return false;
64 }
65
66 bool await_suspend(std::coroutine_handle<> h) {
67 H = h;
68 return false;
69 }
70
71 auto await_resume() noexcept {
72 return H;
73 }
74
75 std::coroutine_handle<> H;
76};
78
79} // namespace NNet
A minimal example of a coroutine "awaitable" object.
Definition promises.hpp:14
Definition promises.hpp:30
Definition promises.hpp:25
Definition promises.hpp:9