feat(core): WIP deinit arena allocator
This commit is contained in:
32
src/core/allocator.zig
Normal file
32
src/core/allocator.zig
Normal file
@@ -0,0 +1,32 @@
|
||||
const std = @import("std");
|
||||
|
||||
const Allocator = std.mem.Allocator;
|
||||
|
||||
pub const Callback = struct {
|
||||
context: *anyopaque,
|
||||
invokeFn: *const fn (ctx: *anyopaque) void,
|
||||
|
||||
pub fn call(self: *const @This()) void {
|
||||
self.invokeFn(self.context);
|
||||
}
|
||||
|
||||
pub fn create(obj: anytype) Callback {
|
||||
return Callback {
|
||||
.context = @ptrCast(@alignCast(obj)),
|
||||
.invokeFn = @TypeOf(obj.*).deinit,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
pub const DeinitArena = struct {
|
||||
arena: std.heap.ArenaAllocator,
|
||||
deiniters: std.ArrayList(Callback),
|
||||
|
||||
pub fn deinit(self: *DeinitArena) void {
|
||||
for (self.deiniters.items) |deiniter| {
|
||||
deiniter.deinit(deiniter.context);
|
||||
}
|
||||
|
||||
self.arena.deinit();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user