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_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);
+1
View File
@@ -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