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 standard library.
std › hash_map › HashMapUnmanaged › allocate Private Function allocate Doc Source Private Function std.hash_map.HashMapUnmanaged.allocate
fn allocate (self : *Self , allocator : Allocator , new_capacity : Size ) Allocator .Error !void Params File hash_map.zig: 1460
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492 fn allocate (self : *Self , allocator : Allocator , new_capacity : Size ) Allocator .Error !void {
const header_align = @alignOf (Header );
const key_align = if (@sizeOf (K ) == 0 ) 1 else @alignOf (K );
const val_align = if (@sizeOf (V ) == 0 ) 1 else @alignOf (V );
const max_align : Alignment = comptime .fromByteUnits (@max (header_align , key_align , val_align ));
const new_cap : usize = new_capacity ;
const meta_size = @sizeOf (Header ) + new_cap * @sizeOf (Metadata );
comptime assert (@alignOf (Metadata ) == 1 );
const keys_start = std .mem .alignForward (usize , meta_size , key_align );
const keys_end = keys_start + new_cap * @sizeOf (K );
const vals_start = std .mem .alignForward (usize , keys_end , val_align );
const vals_end = vals_start + new_cap * @sizeOf (V );
const total_size = max_align .forward (vals_end );
const slice = try allocator .alignedAlloc (u8 , max_align , total_size );
const ptr : [*]u8 = @ptrCast (slice .ptr );
const metadata = ptr + @sizeOf (Header );
const hdr = @as (*Header , @ptrCast (@alignCast (ptr )));
if (@sizeOf ([*]V ) != 0 ) {
hdr .values = @ptrCast (@alignCast ((ptr + vals_start )));
}
if (@sizeOf ([*]K ) != 0 ) {
hdr .keys = @ptrCast (@alignCast ((ptr + keys_start )));
}
hdr .capacity = new_capacity ;
self .metadata = @ptrCast (@alignCast (metadata ));
}