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/ › os/ › uefi/ › tables/ › boot_services.zig › protocolInterfaces
protocolInterfaces
boot_services.protocolInterfaces
fn protocolInterfaces (
handle_arg : anytype ,
interfaces : anytype ,
) ProtocolInterfaces (@TypeOf (handle_arg ), @TypeOf (interfaces ))
File
Code
fn protocolInterfaces (
handle_arg : anytype ,
interfaces : anytype ,
) ProtocolInterfaces (@TypeOf (handle_arg ), @TypeOf (interfaces )) {
var result : ProtocolInterfaces (
@TypeOf (handle_arg ),
@TypeOf (interfaces ),
) = undefined ;
result [0 ] = handle_arg ;
result [result .len - 1 ] = null ;
comptime var idx : usize = 1 ;
inline for (interfaces ) |interface | {
const InterfacePtr = @TypeOf (interface );
const Interface = switch (@typeInfo (InterfacePtr )) {
.pointer => |pointer | pointer .child ,
else => @compileError ("expected tuple of '*const Protocol', got " ++ @typeName (InterfacePtr )),
};
if (!@hasDecl (Interface , "guid" ))
@compileError ("protocol interface '" ++ @typeName (Interface ) ++
"' does not declare a 'const guid: uefi.Guid'." );
switch (@typeInfo (Interface )) {
.@"struct" => |struct_info | if (struct_info .layout != .@"extern" )
@compileLog ("protocol interface '" ++ @typeName (Interface ) ++
"' is not extern - this is likely a mistake" ),
else => @compileError ("protocol interface must be a struct, got " ++ @typeName (Interface )),
}
result [idx ] = &Interface .guid ;
result [idx + 1 ] = @ptrCast (interface );
idx += 2 ;
}
return result ;
}