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 › deallocate Private Function deallocate Doc Source Private Function std.hash_map.HashMapUnmanaged.deallocate
fn deallocate (self : *Self , allocator : Allocator ) void Params File hash_map.zig: 1494
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519 fn deallocate (self : *Self , allocator : Allocator ) void {
if (self .metadata == null ) return ;
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 = comptime @max (header_align , key_align , val_align );
const cap : usize = self .capacity ();
const meta_size = @sizeOf (Header ) + cap * @sizeOf (Metadata );
comptime assert (@alignOf (Metadata ) == 1 );
const keys_start = std .mem .alignForward (usize , meta_size , key_align );
const keys_end = keys_start + cap * @sizeOf (K );
const vals_start = std .mem .alignForward (usize , keys_end , val_align );
const vals_end = vals_start + cap * @sizeOf (V );
const total_size = std .mem .alignForward (usize , vals_end , max_align );
const slice = @as ([*]align (max_align ) u8 , @ptrCast (@alignCast (self .header ())))[0 ..total_size ];
allocator .free (slice );
self .metadata = null ;
self .available = 0 ;
}