Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/coroutine.hfa

    r8a97248 r3318dff  
    1919#include "invoke.h"
    2020#include "../exception.hfa"
     21
     22//-----------------------------------------------------------------------------
     23// Type used to store and queue nonlocal exceptions on coroutines
     24struct nonlocal_exception {
     25    exception_t * the_exception;
     26    nonlocal_exception * next;
     27};
     28static inline void ?{} ( nonlocal_exception & this, exception_t * ex ) with(this) {
     29    the_exception = ex;
     30    next = 0p;
     31}
     32
     33static inline nonlocal_exception *& get_next( nonlocal_exception & this ) __attribute__((const)) {
     34    return this.next;
     35}
    2136
    2237//-----------------------------------------------------------------------------
     
    203218}
    204219
     220// non local ehm and coroutine utility routines
     221bool poll( coroutine$ * cor );
     222bool poll();
     223coroutine$ * resumer();
     224
     225forall(T & | is_coroutine(T)) {
     226    void enable_ehm( T & cor );
     227    void disable_ehm( T & cor );
     228    bool poll( T & cor );
     229    bool checked_poll( T & cor );
     230    coroutine$ * resumer( T & cor );
     231}
     232
     233// trait for exceptions able to be resumed at another coroutine
     234forall(exceptT *, T & | is_coroutine(T))
     235trait ehm_resume_at { void $throwResume(exceptT &); };
     236
     237// general resumeAt
     238forall(exceptT *, T & | ehm_resume_at( exceptT, T ))
     239void resumeAt( T & receiver, exceptT & ex );
     240
     241// resumeAt for underlying coroutine$ type
     242forall(exceptT * | { void $throwResume(exceptT &); })
     243void resumeAt( coroutine$ * receiver, exceptT & ex );
     244
    205245// Local Variables: //
    206246// mode: c //
Note: See TracChangeset for help on using the changeset viewer.