mirror of
https://github.com/Ed94/metadesk.git
synced 2026-07-23 07:57:51 +00:00
override for arena cap getter
This commit is contained in:
+11
-1
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user