33 lines1.0 KB
1#ifndef FUTURE_H
2#define FUTURE_H
3#include <stdbool.h>
4#include "coroutine.h"
5
6typedef struct Future Future;
7
8
9typedef struct Future_vfptrs_t {
10 void (*dtor)(Future *);
11 void (*await)(Future *);
12 void (*set_result)(Future *, bool, void *);
13} Future_vfptrs_t;
14
15extern void _Future_Await(Future *fut);
16extern void _Future_SetResult(Future *fut, bool canceled, void *res);
17
18// Notified when a Future is done (has a result or is canceled)
19typedef void (*Future_Watcher)(void *me, Future *fut);
20
21extern void Future_ctor(Future *fut);
22extern Future *Future_New(void);
23extern void Future_dtor(Future *fut);
24extern void Future_Delete(Future *fut);
25extern void Future_SetResult(Future *fut, bool canceled, void *value);
26extern Coroutine_Err Future_GetResult(Future *fut, void **res);
27extern void Future_AddWatcher(Future *fut, Future_Watcher watcher, void *me);
28extern void Future_RemoveWatcher(Future *fut, Future_Watcher watcher, void *me);
29extern Coroutine_Err Future_Await(Future *fut, void **res);
30
31#include "future.def.h"
32#endif
33