25 lines680 bytes
1#ifndef TASK_H
2#define TASK_H
3#include <stdbool.h>
4#include "future.h"
5#include "cor_platform.h"
6
7typedef struct Task Task;
8
9extern _Cor_thread_local Task *current_task;
10
11typedef bool (*Task_Entry)(void *param, void **res);
12
13void Task_ctor(Task *tsk, Task_Entry entry, void *param);
14Task *Task_New(Task_Entry entry, void *param);
15void Task_dtor(Task *tsk);
16void Task_Delete(Task *tsk);
17static inline bool Task_Await(Task *tsk, void **res);
18void Task_Cancel(Task *tsk, void *cancel_value);
19static inline bool Task_IsCanceled(Task *tsk);
20static inline Future *Task_GetAwaitedFuture(Task *tsk);
21bool Task_Run(Task_Entry start, void *value, void **res);
22
23#include "task.def.h"
24#endif
25