override for arena cap getter

This commit is contained in:
ryanfleury
2021-09-24 20:47:23 -06:00
parent 6ba42a67e6
commit 4657327976
2 changed files with 12 additions and 1 deletions
+11 -1
View File
@@ -364,6 +364,7 @@ MD_StaticAssert(sizeof(MD_ArenaDefault) <= MD_IMPL_ArenaHeaderSize, arena_def_si
#define MD_IMPL_ArenaAlloc MD_ArenaDefaultAlloc #define MD_IMPL_ArenaAlloc MD_ArenaDefaultAlloc
#define MD_IMPL_ArenaRelease MD_ArenaDefaultRelease #define MD_IMPL_ArenaRelease MD_ArenaDefaultRelease
#define MD_IMPL_ArenaGetPos MD_ArenaDefaultGetPos #define MD_IMPL_ArenaGetPos MD_ArenaDefaultGetPos
#define MD_IMPL_ArenaGetCap MD_ArenaDefaultGetCap
#define MD_IMPL_ArenaPush MD_ArenaDefaultPush #define MD_IMPL_ArenaPush MD_ArenaDefaultPush
#define MD_IMPL_ArenaPopTo MD_ArenaDefaultPopTo #define MD_IMPL_ArenaPopTo MD_ArenaDefaultPopTo
#define MD_IMPL_ArenaSetAutoAlign MD_ArenaDefaultSetAutoAlign #define MD_IMPL_ArenaSetAutoAlign MD_ArenaDefaultSetAutoAlign
@@ -417,6 +418,12 @@ MD_ArenaDefaultGetPos(MD_ArenaDefault *arena)
return(result); return(result);
} }
static MD_u64
MD_ArenaDefaultGetCap(MD_ArenaDefault *arena)
{
return arena->cap;
}
static void* static void*
MD_ArenaDefaultPush(MD_ArenaDefault *arena, MD_u64 size) 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) #if !defined(MD_IMPL_ArenaGetPos)
# error Missing implementation for MD_IMPL_ArenaGetPos # error Missing implementation for MD_IMPL_ArenaGetPos
#endif #endif
#if !defined(MD_IMPL_ArenaGetCap)
# error Missing implementation for MD_IMPL_ArenaGetCap
#endif
#if !defined(MD_IMPL_ArenaPush) #if !defined(MD_IMPL_ArenaPush)
# error Missing implementation for MD_IMPL_ArenaPush # error Missing implementation for MD_IMPL_ArenaPush
#endif #endif
@@ -661,7 +671,7 @@ MD_ArenaPushAlign(MD_Arena *arena, MD_u64 boundary){
MD_u64 pos = MD_IMPL_ArenaGetPos(arena); MD_u64 pos = MD_IMPL_ArenaGetPos(arena);
MD_u64 align_m1 = boundary - 1; MD_u64 align_m1 = boundary - 1;
MD_u64 new_pos_aligned = (pos + align_m1)&(~align_m1); 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){ if (new_pos_clamped > pos){
MD_u64 amt = new_pos_clamped - pos; MD_u64 amt = new_pos_clamped - pos;
MD_MemoryZero(MD_IMPL_ArenaPush(arena, amt), amt); MD_MemoryZero(MD_IMPL_ArenaPush(arena, amt), amt);
+1
View File
@@ -33,6 +33,7 @@
** #define MD_IMPL_ArenaAlloc () -> MD_IMPL_Arena* ** #define MD_IMPL_ArenaAlloc () -> MD_IMPL_Arena*
** #define MD_IMPL_ArenaRelease (MD_IMPL_Arena*) -> void ** #define MD_IMPL_ArenaRelease (MD_IMPL_Arena*) -> void
** #define MD_IMPL_ArenaGetPos (MD_IMPL_Arena*) -> MD_u64 ** #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_ArenaPush (MD_IMPL_Arena*, MD_u64) -> void*
** #define MD_IMPL_ArenaPopTo (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 ** #define MD_IMPL_ArenaSetAutoAlign (MD_IMPL_Arena*, MD_u64) -> void