//////////////////////////////////////////////////////////// //~ Async types Struct(AsyncFrameLaneCtx); typedef void AsyncTickCallbackFunc(WaveLaneCtx *lane, AsyncFrameLaneCtx *async_lane_frame_ctx); Struct(AsyncTickCallback) { AsyncTickCallbackFunc *func; }; Struct(AsyncTickCallbackNode) { AsyncTickCallbackNode *next; AsyncTickCallback callback; }; Struct(AsyncFrameLaneCtx) { Arena *arena; }; Struct(AsyncWorkerCtx) { i64 last_seen_signal; u64 callbacks_count; AsyncTickCallback *callbacks; }; Struct(AsyncCtx) { Mutex mutex; u64 callback_nodes_count; AsyncTickCallbackNode *first_callback_node; AsyncTickCallbackNode *last_callback_node; AsyncWorkerCtx worker; IsolatedAtomic64 signal; }; //////////////////////////////////////////////////////////// //~ Bootstrap void BootstrapAsync(void); //////////////////////////////////////////////////////////// //~ Async ops void OnAsyncTick(AsyncTickCallbackFunc *func); void SignalAsyncTick(void); //////////////////////////////////////////////////////////// //~ Async worker void AsyncWorkerEntryPoint(WaveLaneCtx *lane);