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/ › zig/ › llvm/ › Builder.zig › opaqueTypeAssumeCapacity
opaqueTypeAssumeCapacity
Builder.opaqueTypeAssumeCapacity
fn opaqueTypeAssumeCapacity (self : *Builder , name : String ) Type
File
Code
fn opaqueTypeAssumeCapacity (self : *Builder , name : String ) Type {
const Adapter = struct {
builder : *const Builder ,
pub fn hash (_ : @This (), key : String ) u32 {
return @truncate (std .hash .Wyhash .hash (
comptime std .hash .int (@backingInt (Type .Tag .named_structure )),
std .mem .asBytes (&key ),
));
}
pub fn eql (ctx : @This (), lhs_key : String , _ : void , rhs_index : usize ) bool {
const rhs_data = ctx .builder .type_items .items [rhs_index ];
return rhs_data .tag == .named_structure and
lhs_key == ctx .builder .typeExtraData (Type .NamedStructure , rhs_data .data ).id ;
}
};
var id = name ;
if (name == .empty ) {
id = self .next_unnamed_type ;
assert (id != .none );
self .next_unnamed_type = @fromBackingInt (@intCast (@backingInt (id ) + 1 ));
} else assert (!name .isAnon ());
while (true ) {
const type_gop = self .types .getOrPutAssumeCapacity (id );
if (!type_gop .found_existing ) {
const gop = self .type_map .getOrPutAssumeCapacityAdapted (id , Adapter { .builder = self });
assert (!gop .found_existing );
gop .key_ptr .* = {};
gop .value_ptr .* = {};
self .type_items .appendAssumeCapacity (.{
.tag = .named_structure ,
.data = self .addTypeExtraAssumeCapacity (Type .NamedStructure {
.id = id ,
.body = .none ,
}),
});
const result : Type = @fromBackingInt (@intCast (gop .index ));
type_gop .value_ptr .* = result ;
return result ;
}
const unique_gop = self .next_unique_type_id .getOrPutAssumeCapacity (name );
if (!unique_gop .found_existing ) unique_gop .value_ptr .* = 2 ;
id = self .fmtAssumeCapacity ("{s}.{d}" , .{ name .slice (self ).?, unique_gop .value_ptr .* });
unique_gop .value_ptr .* += 1 ;
}
}