39 lines
1.0 KiB
C
39 lines
1.0 KiB
C
|
// NOTE(allen): memory
|
||
|
|
||
|
typedef struct M_Arena M_Arena;
|
||
|
struct M_Arena
|
||
|
{
|
||
|
void *base;
|
||
|
u64 max;
|
||
|
u64 alloc_position;
|
||
|
u64 commit_position;
|
||
|
u64 auto_align;
|
||
|
};
|
||
|
|
||
|
typedef struct M_Temp M_Temp;
|
||
|
struct M_Temp
|
||
|
{
|
||
|
M_Arena *arena;
|
||
|
u64 pos;
|
||
|
};
|
||
|
|
||
|
////////////////////////////////
|
||
|
|
||
|
#define PushArray(arena,T,c) ( (T*)(M_ArenaPush((arena),sizeof(T)*(c))) )
|
||
|
#define PushArrayZero(arena,T,c) ( (T*)(M_ArenaPushZero((arena),sizeof(T)*(c))) )
|
||
|
|
||
|
internal M_Arena M_ArenaInitializeWithAlign(u64 auto_align);
|
||
|
internal M_Arena M_ArenaInitialize(void);
|
||
|
internal void M_ArenaRelease(M_Arena *arena);
|
||
|
|
||
|
internal void* M_ArenaPush(M_Arena *arena, u64 size);
|
||
|
internal void* M_ArenaPushZero(M_Arena *arena, u64 size);
|
||
|
internal void M_ArenaSetPosBack(M_Arena *arena, u64 pos);
|
||
|
internal void M_ArenaSetPosBackByPtr(M_Arena *arena, void *ptr);
|
||
|
internal void M_ArenaPop(M_Arena *arena, u64 size);
|
||
|
internal void M_ArenaClear(M_Arena *arena);
|
||
|
|
||
|
internal M_Temp M_BeginTemp(M_Arena *arena);
|
||
|
internal void M_EndTemp(M_Temp temp);
|
||
|
|