![]() |
Helixis 1.0
Task Programming API
|
Go to the source code of this file.
Data Structures | |
struct | __empty_stack |
Defines | |
#define | HLX_WAITING (0) |
#define | HLX_YIELDED (1) |
#define | HLX_EXITED (2) |
#define | HLX_ENDED (3) |
#define | HLX_MEMORY_EXHAUSTED (4) |
#define | HLX_SET(s) s = __LINE__; case __LINE__: |
#define | HLX_TASK_INIT() *ctx = 0; |
#define | HLX_TASK_BEGIN() { char HLX_YIELD_FLAG = 1; switch(*ctx) { case 0: |
#define | HLX_TASK_END() } HLX_YIELD_FLAG = 0; HLX_TASK_INIT(); return HLX_ENDED; } |
#define | HLX_TASK_EXIT() |
#define | HLX_TASK_RESTART() |
#define | HLX_TASK_WAIT_UNTIL(condition) |
#define | HLX_TASK_YIELD() |
#define | HLX_TASK_YIELD_UNTIL(cond) |
#define | HLX_TASK_WAIT_WHILE(cond) HLX_TASK_WAIT_UNTIL(!(cond)) |
#define | HLX_STACK(VARS) |
#define | HLX_L(VAR) (((struct __local* )*__stack)->VAR) |
#define | HLX_TASK(TASKNAME, PARAMETER) int TASKNAME(hlx_ctx* ctx, hlx_group_id self_group_id, void* *__stack, PARAMETER) |
#define | HLX_SIMPLE_TASK(TASKNAME) HLX_TASK(TASKNAME, void* __unused_var__) |
#define | HLX_TASK_ADD(TASK, DATA) hlx_core_add_task_callback(TASK, DATA, self_group_id, 0) |
#define | HLX_TASK_ADD_IN_GROUP(TASK, DATA, GROUP) hlx_core_add_task_in_group_callback(TASK, DATA, GROUP, self_group_id, 0) |
#define | HLX_TASK_ADD_CALLBACK(TASK, DATA, CALLBACK) hlx_core_add_task_callback(TASK, DATA, self_group_id, CALLBACK) |
#define | HLX_TASK_ADD_IN_GROUP_CALLBACK(TASK, DATA, GROUP, CALLBACK) hlx_core_add_task_in_group_callback(TASK, DATA, GROUP, self_group_id, CALLBACK) |
Typedefs | |
typedef unsigned short | hlx_ctx |
typedef int(* | hlx_task_func )(hlx_ctx *, hlx_group_id, void **, void *) |
typedef void(* | hlx_task_callback )(void *, hlx_group_id, int) |
#define HLX_ENDED (3) |
Definition at line 98 of file task.h.
Referenced by hlx_scheduler_schedule_group(), and hlx_scheduler_schedule_group_threaded().
#define HLX_EXITED (2) |
Definition at line 97 of file task.h.
Referenced by hlx_scheduler_schedule_group(), and hlx_scheduler_schedule_group_threaded().
#define HLX_MEMORY_EXHAUSTED (4) |
Definition at line 99 of file task.h.
Referenced by hlx_scheduler_schedule_group(), and hlx_scheduler_schedule_group_threaded().
#define HLX_SIMPLE_TASK | ( | TASKNAME | ) | HLX_TASK(TASKNAME, void* __unused_var__) |
#define HLX_STACK | ( | VARS | ) |
struct __local { VARS unsigned short __size; };\ if (*__stack == 0 && sizeof(struct __local) > sizeof(struct __empty_stack)) \ { \ *__stack = hlx_api_entries()->malloc_entry(sizeof(struct __local)); \ if (!*__stack) return (-1); \ HLX_L(__size) = sizeof(struct __local); \ }
#define HLX_TASK | ( | TASKNAME, | |
PARAMETER | |||
) | int TASKNAME(hlx_ctx* ctx, hlx_group_id self_group_id, void* *__stack, PARAMETER) |
#define HLX_TASK_ADD | ( | TASK, | |
DATA | |||
) | hlx_core_add_task_callback(TASK, DATA, self_group_id, 0) |
#define HLX_TASK_ADD_CALLBACK | ( | TASK, | |
DATA, | |||
CALLBACK | |||
) | hlx_core_add_task_callback(TASK, DATA, self_group_id, CALLBACK) |
#define HLX_TASK_ADD_IN_GROUP | ( | TASK, | |
DATA, | |||
GROUP | |||
) | hlx_core_add_task_in_group_callback(TASK, DATA, GROUP, self_group_id, 0) |
#define HLX_TASK_ADD_IN_GROUP_CALLBACK | ( | TASK, | |
DATA, | |||
GROUP, | |||
CALLBACK | |||
) | hlx_core_add_task_in_group_callback(TASK, DATA, GROUP, self_group_id, CALLBACK) |
#define HLX_TASK_BEGIN | ( | ) | { char HLX_YIELD_FLAG = 1; switch(*ctx) { case 0: |
#define HLX_TASK_END | ( | ) | } HLX_YIELD_FLAG = 0; HLX_TASK_INIT(); return HLX_ENDED; } |
#define HLX_TASK_EXIT | ( | ) |
do { \ HLX_TASK_INIT(); \ return HLX_EXITED; \ } while(0)
#define HLX_TASK_RESTART | ( | ) |
do { \ HLX_TASK_INIT(); \ return HLX_WAITING; \ } while(0)
#define HLX_TASK_WAIT_UNTIL | ( | condition | ) |
do { \ HLX_SET(*ctx); \ if(!(condition)) { \ return HLX_WAITING; \ } \ } while(0)
#define HLX_TASK_WAIT_WHILE | ( | cond | ) | HLX_TASK_WAIT_UNTIL(!(cond)) |
#define HLX_TASK_YIELD | ( | ) |
do { \ HLX_YIELD_FLAG = 0; \ HLX_SET(*ctx); \ if(HLX_YIELD_FLAG == 0) { \ return HLX_YIELDED; \ } \ } while(0)
#define HLX_TASK_YIELD_UNTIL | ( | cond | ) |
do { \ HLX_YIELD_FLAG = 0; \ HLX_SET(*ctx); \ if((HLX_YIELD_FLAG == 0) || !(cond)) { \ return HLX_YIELDED; \ } \ } while(0)
typedef void(* hlx_task_callback)(void *, hlx_group_id, int) |
typedef int(* hlx_task_func)(hlx_ctx *, hlx_group_id, void **, void *) |