Tidy up allocator type erasing bind function

This commit is contained in:
kayomn 2023-07-10 22:25:21 +01:00
parent c1f174a513
commit ed585278ff
1 changed files with 20 additions and 19 deletions

View File

@ -24,11 +24,7 @@ pub const Allocator = struct {
pub fn bind(comptime State: type, state: *State, comptime actions: Actions(State)) Allocator { pub fn bind(comptime State: type, state: *State, comptime actions: Actions(State)) Allocator {
const is_zero_aligned = @alignOf(State) == 0; const is_zero_aligned = @alignOf(State) == 0;
return .{ const ErasedActions = struct {
.context = if (is_zero_aligned) state else @ptrCast(state),
.actions = &.{
.deallocate = struct {
fn deallocate(context: *anyopaque, allocation: []Byte) void { fn deallocate(context: *anyopaque, allocation: []Byte) void {
if (is_zero_aligned) { if (is_zero_aligned) {
return actions.deallocator(@ptrCast(context), allocation); return actions.deallocator(@ptrCast(context), allocation);
@ -36,9 +32,7 @@ pub const Allocator = struct {
return actions.deallocate(@ptrCast(@alignCast(context)), allocation); return actions.deallocate(@ptrCast(@alignCast(context)), allocation);
} }
}.deallocate,
.reallocate = struct {
fn reallocate(context: *anyopaque, return_address: usize, existing_allocation: ?[]Byte, size: usize) AllocationError![]Byte { fn reallocate(context: *anyopaque, return_address: usize, existing_allocation: ?[]Byte, size: usize) AllocationError![]Byte {
if (is_zero_aligned) { if (is_zero_aligned) {
return actions.reallocator(@ptrCast(context), return_address, existing_allocation, size); return actions.reallocator(@ptrCast(context), return_address, existing_allocation, size);
@ -46,7 +40,14 @@ pub const Allocator = struct {
return actions.reallocate(@ptrCast(@alignCast(context)), return_address, existing_allocation, size); return actions.reallocate(@ptrCast(@alignCast(context)), return_address, existing_allocation, size);
} }
}.reallocate, };
return .{
.context = if (is_zero_aligned) state else @ptrCast(state),
.actions = &.{
.deallocate = ErasedActions.deallocate,
.reallocate = ErasedActions.reallocate,
} }
}; };
} }