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 › SleepWaiter
SleepWaiter
Dispatch.SleepWaiter
const SleepWaiter = struct
File
Code
const SleepWaiter = struct {
sleeper : Sleeper = undefined ,
cancelable : Cancelable ,
timer : c .dispatch .source_t ,
started : bool = false ,
fn start (context : ?*anyopaque ) callconv (.c ) void {
const waiter : *SleepWaiter = @ptrCast (@alignCast (context ));
waiter .cancelable .enter (waiter .sleeper .fiber ) catch |err | switch (err ) {
error .CancelRequested => waiter .timer .cancel (),
};
waiter .timer .as_object ().activate ();
}
fn timedOut (context : ?*anyopaque ) callconv (.c ) void {
const waiter : *SleepWaiter = @ptrCast (@alignCast (context ));
waiter .cancelable .leave (waiter .sleeper .fiber ) catch |err | switch (err ) {
error .CancelRequested => return ,
};
waiter .timer .cancel ();
}
fn canceled (context : ?*anyopaque ) callconv (.c ) void {
const cancelable : *Cancelable = @ptrCast (@alignCast (context ));
const waiter : *SleepWaiter = @fieldParentPtr ("cancelable" , cancelable );
cancelable .requested (waiter .sleeper .fiber );
waiter .timer .cancel ();
}
fn wake (context : ?*anyopaque ) callconv (.c ) void {
const waiter : *SleepWaiter = @ptrCast (@alignCast (context ));
var sleeper = waiter .sleeper ;
waiter .* = undefined ;
Sleeper .wake (&sleeper );
}
}