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 › batchSourceCancel
batchSourceCancel
Dispatch.batchSourceCancel
fn batchSourceCancel (context : ?*anyopaque ) callconv (.c ) void
File
Code
fn batchSourceCancel (context : ?*anyopaque ) callconv (.c ) void {
const storage : *Io .Operation .Storage = @ptrCast (@alignCast (context ));
const pending = &storage .pending ;
const operation_userdata : *BatchOperationUserdata = .fromErased (&pending .userdata );
const batch = operation_userdata .batch ;
const source = operation_userdata .source ;
const index : Io .Operation .OptionalIndex = .fromIndex (storage - batch .storage .ptr );
switch (pending .node .prev ) {
.none => batch .pending .head = pending .node .next ,
else => |prev_index | batch .storage [prev_index .toIndex ()].pending .node .next = pending .node .next ,
}
switch (pending .node .next ) {
.none => batch .pending .tail = pending .node .prev ,
else => |next_index | batch .storage [next_index .toIndex ()].pending .node .prev = pending .node .prev ,
}
const tail_index = batch .unused .tail ;
switch (tail_index ) {
.none => batch .unused .head = index ,
else => batch .storage [tail_index .toIndex ()].unused .next = index ,
}
storage .* = .{ .unused = .{ .prev = tail_index , .next = .none } };
batch .unused .tail = index ;
source .as_object ().release ();
if (batch .pending .head != .none ) return ;
const queue : c .dispatch .queue_t = @ptrCast (batch .userdata );
const waiter : *BatchWaiter = @ptrCast (@alignCast (queue .as_object ().get_context ()));
queue .as_object ().release ();
waiter .wake ();
}