Changes in / [79b018f3:81a05ca]
- Location:
- doc/papers/concurrency/c++-cor
- Files:
-
- 2 edited
-
C++Cor-ts.cpp (modified) (2 diffs)
-
fmt.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/concurrency/c++-cor/C++Cor-ts.cpp
r79b018f3 r81a05ca 18 18 //================================================== 19 19 20 20 21 co_yield i; 21 22 … … 27 28 28 29 co_await __promise.yield_value(i); 29 30 //==================================================31 32 ... coroutine() {33 __coroutine_context* __context = new __coroutine_context{};34 __return = __context->_promise.get_return_object();35 co_await __context->_promise.initial_suspend();36 37 ...38 39 __final_suspend_label:40 co_await __context->promise.final_suspend();41 delete __context;42 } -
doc/papers/concurrency/c++-cor/fmt.cpp
r79b018f3 r81a05ca 4 4 struct fmt_cor { 5 5 struct promise_type { 6 char _value; 7 int g, b; 6 char * _value = nullptr; 8 7 9 8 fmt_cor get_return_object() { … … 12 11 13 12 auto initial_suspend() { return suspend_never(); } 14 auto final_suspend() { return suspend_always(); } 13 auto final_suspend() { 14 return suspend_always(); 15 } 15 16 16 17 void return_void() {} 17 void unhandled_exception() {}18 };19 18 20 struct get { 21 promise_type * _promise = nullptr; 22 23 bool await_ready() noexcept { 24 return false; 19 auto yield_value(char & value) { 20 _value = &value; 21 return suspend_always(); 25 22 } 26 23 27 void await_suspend(std::experimental::coroutine_handle<promise_type> _coroutine) noexcept { 28 _promise = &_coroutine.promise(); 29 } 30 char await_resume() noexcept { 31 assert(_promise); 32 return _promise->_value; 33 } 24 void unhandled_exception() {} 34 25 }; 35 26 … … 61 52 62 53 void send(char a) { 63 _coroutine.promise()._value = a; 54 assert(_coroutine.promise()._value); 55 *_coroutine.promise()._value = a; 64 56 _coroutine.resume(); 65 57 } … … 67 59 68 60 fmt_cor Fmt() { 69 int g; // = co_await fmt_cor::g();70 int b; // = co_await fmt_cor::b();61 char c; 62 int g, b; 71 63 for(;;) { 72 64 for(g = 0; g < 5; g++) { 73 65 for(b = 0; b < 4; b++) { 74 std::cout << co_await fmt_cor::get(); 66 co_yield c; 67 std::cout << c; 75 68 } 76 69 std::cout << " ";
Note:
See TracChangeset
for help on using the changeset viewer.