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 › os › uefi › pool_allocator › UefiPoolAllocator Private Namespace UefiPoolAllocator Doc Source Private Namespace std.os.uefi.pool_allocator.UefiPoolAllocator
const UefiPoolAllocator = struct Functions fn getHeader (ptr : [*]u8 ) *[*]align (8 ) u8 fn alloc (_ : *anyopaque , len : usize , alignment : mem .Alignment , ret_addr : usize ) ?[*]u8 fn resize (_ : *anyopaque , buf : []u8 , alignment : mem .Alignment , new_len : usize , ret_addr : usize ) bool fn remap (_ : *anyopaque , buf : []u8 , alignment : mem .Alignment , new_len : usize , ret_addr : usize ) ?[*]u8 fn free (_ : *anyopaque , buf : []u8 , alignment : mem .Alignment , ret_addr : usize ) void File os/uefi/pool_allocator.zig: 10
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 const UefiPoolAllocator = struct {
fn getHeader (ptr : [*]u8 ) *[*]align (8 ) u8 {
return @as (*[*]align (8 ) u8 , @ptrFromInt (@intFromPtr (ptr ) - @sizeOf (usize )));
}
fn alloc (
_ : *anyopaque ,
len : usize ,
alignment : mem .Alignment ,
ret_addr : usize ,
) ?[*]u8 {
_ = ret_addr ;
assert (len > 0 );
const ptr_align = alignment .toByteUnits ();
const metadata_len = mem .alignForward (usize , @sizeOf (usize ), ptr_align );
const full_len = metadata_len + len ;
const unaligned_slice = uefi .system_table .boot_services .?.allocatePool (
uefi .efi_pool_memory_type ,
full_len ,
) catch return null ;
const unaligned_addr = @intFromPtr (unaligned_slice .ptr );
const aligned_addr = mem .alignForward (usize , unaligned_addr + @sizeOf (usize ), ptr_align );
const aligned_ptr = unaligned_slice .ptr + (aligned_addr - unaligned_addr );
getHeader (aligned_ptr ).* = unaligned_slice .ptr ;
return aligned_ptr ;
}
fn resize (
_ : *anyopaque ,
buf : []u8 ,
alignment : mem .Alignment ,
new_len : usize ,
ret_addr : usize ,
) bool {
_ = ret_addr ;
_ = alignment ;
if (new_len > buf .len ) return false ;
return true ;
}
fn remap (
_ : *anyopaque ,
buf : []u8 ,
alignment : mem .Alignment ,
new_len : usize ,
ret_addr : usize ,
) ?[*]u8 {
_ = alignment ;
_ = ret_addr ;
if (new_len > buf .len ) return null ;
return buf .ptr ;
}
fn free (
_ : *anyopaque ,
buf : []u8 ,
alignment : mem .Alignment ,
ret_addr : usize ,
) void {
_ = alignment ;
_ = ret_addr ;
uefi .system_table .boot_services .?.freePool (getHeader (buf .ptr ).*) catch unreachable ;
}
}