From ed585278ff9af9f332d75b81deb9f7af19b638eb Mon Sep 17 00:00:00 2001 From: kayomn Date: Mon, 10 Jul 2023 22:25:21 +0100 Subject: [PATCH] Tidy up allocator type erasing bind function --- source/coral/io.zig | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/source/coral/io.zig b/source/coral/io.zig index 8ff87bd..2f53b8d 100644 --- a/source/coral/io.zig +++ b/source/coral/io.zig @@ -24,29 +24,30 @@ pub const Allocator = struct { pub fn bind(comptime State: type, state: *State, comptime actions: Actions(State)) Allocator { const is_zero_aligned = @alignOf(State) == 0; + const ErasedActions = struct { + fn deallocate(context: *anyopaque, allocation: []Byte) void { + if (is_zero_aligned) { + return actions.deallocator(@ptrCast(context), allocation); + } + + return actions.deallocate(@ptrCast(@alignCast(context)), allocation); + } + + fn reallocate(context: *anyopaque, return_address: usize, existing_allocation: ?[]Byte, size: usize) AllocationError![]Byte { + if (is_zero_aligned) { + return actions.reallocator(@ptrCast(context), return_address, existing_allocation, size); + } + + return actions.reallocate(@ptrCast(@alignCast(context)), return_address, existing_allocation, size); + } + }; + return .{ .context = if (is_zero_aligned) state else @ptrCast(state), .actions = &.{ - .deallocate = struct { - fn deallocate(context: *anyopaque, allocation: []Byte) void { - if (is_zero_aligned) { - return actions.deallocator(@ptrCast(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 { - if (is_zero_aligned) { - return actions.reallocator(@ptrCast(context), return_address, existing_allocation, size); - } - - return actions.reallocate(@ptrCast(@alignCast(context)), return_address, existing_allocation, size); - } - }.reallocate, + .deallocate = ErasedActions.deallocate, + .reallocate = ErasedActions.reallocate, } }; }