Changes in / [79b018f3:81a05ca]


Ignore:
Location:
doc/papers/concurrency/c++-cor
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/concurrency/c++-cor/C++Cor-ts.cpp

    r79b018f3 r81a05ca  
    1818//==================================================
    1919
     20
    2021co_yield i;
    2122
     
    2728
    2829co_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  
    44struct fmt_cor {
    55        struct promise_type {
    6                 char _value;
    7                 int g, b;
     6                char * _value = nullptr;
    87
    98                fmt_cor get_return_object() {
     
    1211
    1312                auto initial_suspend() { return suspend_never(); }
    14                 auto final_suspend()   { return suspend_always(); }
     13                auto final_suspend()   {
     14                        return suspend_always();
     15                }
    1516
    1617                void return_void() {}
    17                 void unhandled_exception() {}
    18         };
    1918
    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();
    2522                }
    2623
    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() {}
    3425        };
    3526
     
    6152
    6253        void send(char a) {
    63                 _coroutine.promise()._value = a;
     54                assert(_coroutine.promise()._value);
     55                *_coroutine.promise()._value = a;
    6456                _coroutine.resume();
    6557        }
     
    6759
    6860fmt_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;
    7163        for(;;) {
    7264                for(g = 0; g < 5; g++) {
    7365                        for(b = 0; b < 4; b++) {
    74                                 std::cout << co_await fmt_cor::get();
     66                                co_yield c;
     67                                std::cout << c;
    7568                        }
    7669                        std::cout << "  ";
Note: See TracChangeset for help on using the changeset viewer.