power_play/src/watch/watch_core.h
2025-08-05 10:26:13 -05:00

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 _; });