setup arena idea

This commit is contained in:
Allen Webster
2021-07-20 19:59:15 -07:00
parent 0eee7e5a6c
commit 6a00e92c8f
2 changed files with 81 additions and 0 deletions
+45
View File
@@ -257,6 +257,41 @@ typedef int64_t MD_b64;
typedef float MD_f32;
typedef double MD_f64;
//~ Abstract Arena
typedef union MD_IntPtr MD_IntPtr;
union MD_IntPtr
{
MD_u64 u64;
void *ptr;
};
typedef enum MD_ArenaOperation
{
MD_ArenaOperation_GetPos,
MD_ArenaOperation_Push,
MD_ArenaOperation_PopTo,
MD_ArenaOperation_PushAlign,
MD_ArenaOperation_SetAutoAlign,
} MD_ArenaOperation;
typedef MD_IntPtr MD_ArenaFunc(struct MD_Arena *arena, MD_ArenaOperation op, MD_u64 v);
typedef struct MD_Arena MD_Arena;
struct MD_Arena
{
MD_ArenaFunc *func;
};
//~ Arena Helpers
typedef struct MD_ArenaTemp MD_ArenaTemp;
struct MD_ArenaTemp
{
MD_Arena *arena;
MD_u64 pos;
};
//~ Basic Unicode string types.
typedef struct MD_String8 MD_String8;
@@ -668,6 +703,16 @@ MD_FUNCTION void* MD_AllocZero(MD_u64 size);
// allocation approach changes).
#define MD_PushArrayZero(T,c) (T*)MD_AllocZero(sizeof(T)*(c))
//~ Arena Functions
MD_FUNCTION void* MD_ArenaPush(MD_Arena *arena, MD_u64 v);
MD_FUNCTION MD_ArenaTemp MD_ArenaBeginTemp(MD_Arena *arena);
MD_FUNCTION void MD_ArenaEndTemp(MD_ArenaTemp temp);
MD_FUNCTION void MD_ArenaSetAlign(MD_Arena *arena, MD_u64 v);
MD_FUNCTION void MD_ArenaPushAlign(MD_Arena *arena, MD_u64 v);
#define MD_PushArrayAr(a,T,c) (T*)(MD_ArenaPush((a), sizeof(T)*(c)))
//~ Characters
MD_FUNCTION MD_b32 MD_CharIsAlpha(MD_u8 c);