File: awaitable.h

package info (click to toggle)
c%2B%2B-annotations 13.02.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 13,576 kB
  • sloc: cpp: 25,297; makefile: 1,523; ansic: 165; sh: 126; perl: 90; fortran: 27
file content (54 lines) | stat: -rw-r--r-- 1,342 bytes parent folder | download | duplicates (3)
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