lib/gpalloc/src/large/medium/header.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const class_policy = @import("class.zig");
2 const model = @import("../root.zig").model;
3
4 const Class = model.Class;
5 const Header = model.Header;
6
7 pub fn initializeHeader(base: [*]u8, class: Class) [*]u8 {
8 const header: *Header = @ptrCast(@alignCast(base));
9 header.* = .{
10 .magic = model.medium_header_magic,
11 .class_index = class.index,
12 };
13 return base + model.header_size;
14 }
15
16 pub fn headerFromUserPointer(ptr: [*]u8) *Header {
17 return @ptrCast(@alignCast(ptr - model.header_size));
18 }
19
20 pub fn classFromHeader(header: *const Header) ?Class {
21 if (header.magic != model.medium_header_magic) return null;
22 if (header.class_index >= model.medium_class_count) return null;
23 return class_policy.classForIndex(header.class_index);
24 }
25
26 pub fn baseFromUserPointer(ptr: [*]u8) [*]u8 {
27 return ptr - model.header_size;
28 }