Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › Io/ › Dispatch.zig › BatchWaiter
BatchWaiter
Dispatch.BatchWaiter
const BatchWaiter = struct
File
Code
const BatchWaiter = struct {
sleeper : Sleeper ,
queue : c .dispatch .queue_t ,
timer : ?c .dispatch .source_t = null ,
const already_signaled : c .dispatch .source_t = @ptrFromInt (1 );
fn signal (context : ?*anyopaque ) callconv (.c ) void {
const waiter : *BatchWaiter = @ptrCast (@alignCast (context ));
if (waiter .timer ) |timer | {
if (timer != already_signaled ) timer .cancel ();
} else {
waiter .timer = already_signaled ;
waiter .queue .async (waiter , &@"suspend" );
}
}
fn @"suspend" (context : ?*anyopaque ) callconv (.c ) void {
const waiter : *BatchWaiter = @ptrCast (@alignCast (context ));
if (waiter .timer ) |timer | if (timer != already_signaled ) timer .as_object ().release ();
waiter .queue .as_object ().@"suspend" ();
waiter .wake ();
}
fn wake (waiter : *BatchWaiter ) void {
var sleeper = waiter .sleeper ;
waiter .* = undefined ;
Sleeper .wake (&sleeper );
}
}