1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#ifndef INCLUDED_AWAITER_
#define INCLUDED_AWAITER_
#include <coroutine>
template <typename Handler>
struct Next
{
std::coroutine_handle<> d_handle;
Next(Handler &handler, char ch)
:
d_handle(handler.handle())
{}
Next(Handler &handler)
:
d_handle(handler.handle())
{}
};
//class
class Awaiter
{
using Handle = std::coroutine_handle<>;
Handle d_handle;
public:
Awaiter() = default;
Awaiter(Handle handle);
Handle await_suspend(Handle const &handle);
static bool await_ready();
static void await_resume();
};
inline Awaiter::Awaiter(Handle handle)
:
d_handle(handle)
{}
inline Awaiter::Handle Awaiter::await_suspend(Handle const &handle)
{
return d_handle;
}
inline bool Awaiter::await_ready()
{
return false;
}
inline void Awaiter::await_resume()
{}
//=
#endif
|