62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
////////////////////////////////
|
|
//~ Callback types
|
|
|
|
#define W_CallbackFuncDef(func_name, arg_name) void func_name(String arg_name)
|
|
typedef W_CallbackFuncDef(W_CallbackFunc, name);
|
|
|
|
////////////////////////////////
|
|
//~ Event types
|
|
|
|
Struct(W_Event)
|
|
{
|
|
String name;
|
|
W_Event *next;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ Shared state
|
|
|
|
#define W_DispatcherDelaySeconds 0.050
|
|
#define W_DispatcherDedupBins 128
|
|
|
|
Struct(W_SharedState)
|
|
{
|
|
P_Watch *watch;
|
|
Atomic32 W_Shutdown;
|
|
Counter watch_jobs_counter;
|
|
|
|
Mutex watch_dispatcher_mutex;
|
|
Arena *watch_events_arena;
|
|
W_Event *first_watch_event;
|
|
W_Event *last_watch_event;
|
|
Cv watch_dispatcher_cv;
|
|
|
|
Mutex watch_callbacks_mutex;
|
|
W_CallbackFunc *watch_callbacks[64];
|
|
u64 num_watch_callbacks;
|
|
};
|
|
|
|
extern W_SharedState W_shared_state;
|
|
|
|
////////////////////////////////
|
|
//~ Startup
|
|
|
|
void W_Startup(void);
|
|
P_ExitFuncDef(W_Shutdown);
|
|
|
|
////////////////////////////////
|
|
//~ Watch operations
|
|
|
|
void W_RegisterCallback(W_CallbackFunc *callback);
|
|
|
|
////////////////////////////////
|
|
//~ Callback job
|
|
|
|
JobDecl(W_RunCallbacksJob, { String name; W_CallbackFunc **callbacks; });
|
|
|
|
////////////////////////////////
|
|
//~ Long running jobs
|
|
|
|
JobDecl(W_MonitorJob, { i32 _; });
|
|
JobDecl(W_DispatcherJob, { i32 _; });
|