From 465732797615fabae9ed784fd1efcf0838a74240 Mon Sep 17 00:00:00 2001 From: ryanfleury Date: Fri, 24 Sep 2021 20:47:23 -0600 Subject: [PATCH] override for arena cap getter --- source/md.c | 12 +++++++++++- source/md.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/source/md.c b/source/md.c index 8dd2c76..82b9c7e 100644 --- a/source/md.c +++ b/source/md.c @@ -364,6 +364,7 @@ MD_StaticAssert(sizeof(MD_ArenaDefault) <= MD_IMPL_ArenaHeaderSize, arena_def_si #define MD_IMPL_ArenaAlloc MD_ArenaDefaultAlloc #define MD_IMPL_ArenaRelease MD_ArenaDefaultRelease #define MD_IMPL_ArenaGetPos MD_ArenaDefaultGetPos +#define MD_IMPL_ArenaGetCap MD_ArenaDefaultGetCap #define MD_IMPL_ArenaPush MD_ArenaDefaultPush #define MD_IMPL_ArenaPopTo MD_ArenaDefaultPopTo #define MD_IMPL_ArenaSetAutoAlign MD_ArenaDefaultSetAutoAlign @@ -417,6 +418,12 @@ MD_ArenaDefaultGetPos(MD_ArenaDefault *arena) return(result); } +static MD_u64 +MD_ArenaDefaultGetCap(MD_ArenaDefault *arena) +{ + return arena->cap; +} + static void* MD_ArenaDefaultPush(MD_ArenaDefault *arena, MD_u64 size) { @@ -532,6 +539,9 @@ MD_ArenaDefaultSetAutoAlign(MD_ArenaDefault *arena, MD_u64 align) #if !defined(MD_IMPL_ArenaGetPos) # error Missing implementation for MD_IMPL_ArenaGetPos #endif +#if !defined(MD_IMPL_ArenaGetCap) +# error Missing implementation for MD_IMPL_ArenaGetCap +#endif #if !defined(MD_IMPL_ArenaPush) # error Missing implementation for MD_IMPL_ArenaPush #endif @@ -661,7 +671,7 @@ MD_ArenaPushAlign(MD_Arena *arena, MD_u64 boundary){ MD_u64 pos = MD_IMPL_ArenaGetPos(arena); MD_u64 align_m1 = boundary - 1; MD_u64 new_pos_aligned = (pos + align_m1)&(~align_m1); - MD_u64 new_pos_clamped = MD_ClampTop(new_pos_aligned, arena->cap); + MD_u64 new_pos_clamped = MD_ClampTop(new_pos_aligned, MD_IMPL_ArenaGetCap(arena)); if (new_pos_clamped > pos){ MD_u64 amt = new_pos_clamped - pos; MD_MemoryZero(MD_IMPL_ArenaPush(arena, amt), amt); diff --git a/source/md.h b/source/md.h index 7199fb1..87c0817 100644 --- a/source/md.h +++ b/source/md.h @@ -33,6 +33,7 @@ ** #define MD_IMPL_ArenaAlloc () -> MD_IMPL_Arena* ** #define MD_IMPL_ArenaRelease (MD_IMPL_Arena*) -> void ** #define MD_IMPL_ArenaGetPos (MD_IMPL_Arena*) -> MD_u64 +** #define MD_IMPL_ArenaGetCap (MD_IMPL_Arena*) -> MD_u64 ** #define MD_IMPL_ArenaPush (MD_IMPL_Arena*, MD_u64) -> void* ** #define MD_IMPL_ArenaPopTo (MD_IMPL_Arena*, MD_u64) -> void ** #define MD_IMPL_ArenaSetAutoAlign (MD_IMPL_Arena*, MD_u64) -> void