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
|
#ifndef INCLUDED_AWAITABLE_
#define INCLUDED_AWAITABLE_
#include <iostream>
#include "../awaiter/awaiter.h"
template <typename Handler>
struct Awaitable
{
std::coroutine_handle<> d_handle;
Awaitable(Handler &handler, char const *from, char ch);
Awaitable(Handler &handler, char const *from, int chNr);
Awaitable(Handler &handler, char const *from);
Awaiter operator co_await();
};
template <typename Handler>
inline Awaitable<Handler>::Awaitable(Handler &handler, char const *from,
char ch)
:
d_handle(handler.handle())
{
std::cout << "at `" << ch << "' from " << from << " to " <<
handler.name() << '\n';
}
template <typename Handler>
inline Awaitable<Handler>::Awaitable(Handler &handler, char const *from,
int chNr)
:
d_handle(handler.handle())
{
std::cout << "at #" << chNr << " from " << from << " to " <<
handler.name() << '\n';
}
template <typename Handler>
inline Awaitable<Handler>::Awaitable(Handler &handler, char const *from)
:
d_handle(handler.handle())
{
std::cout << "at EOF at " << from << ": Done\n";
}
template <typename Handler>
inline Awaiter Awaitable<Handler>::operator co_await()
{
return Awaiter{ d_handle };
}
#endif
|