Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/threads

    r5c81105 r78b3f52  
    1818#define __THREADS_H__
    1919
    20 #include "invoke.h"
     20#include <stdbool.h>
     21
     22extern "C" {
     23      struct coVtable {
     24            void (*main)(void*);
     25            struct coroutine* (*this_coroutine)(void*);
     26      };
     27
     28      struct coStack_t {
     29            unsigned int size;          // size of stack
     30            void *storage;                      // pointer to stack
     31            void *limit;                        // stack grows towards stack limit
     32            void *base;                         // base of stack
     33            void *context;                      // address of cfa_context_t
     34            void *top;                          // address of top of storage
     35            bool userStack;     
     36      };
     37
     38
     39      enum coroutine_state { Start, Inactive, Active, Halt };
     40
     41      struct coroutine {
     42            coStack_t stack;
     43            const char *name;                   // textual name for coroutine/task, initialized by uC++ generated code
     44            int errno_;                         // copy of global UNIX variable errno
     45            coroutine_state state;            // current execution status for coroutine
     46            bool notHalted;                     // indicate if execuation state is not halted
     47
     48            coroutine *starter;         // first coroutine to resume this one
     49            coroutine *last;                    // last coroutine to resume this one
     50      };
     51}
    2152
    2253void ?{}(coStack_t* this);
    2354
    2455void ?{}(coroutine* this);
    25 void ?{}(coroutine* this, covptr_t* object);
    2656
    2757trait coroutine_t(dtype T) {
     58      coroutine* this_coroutine(T* this);
    2859      void co_main(T* this);
    29       covptr_t* vtable(T* this);
     60      coVtable* vtable(T* this);
    3061};
     62
     63forall(dtype T | coroutine_t(T))
     64void start(T* cor);
    3165
    3266void suspend(void);
Note: See TracChangeset for help on using the changeset viewer.