blob: 4bceccca2fcaedd9bd07c8c4a03207adc9aa222d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
Arena *arena_alloc(U64 cap)
{
Arena *arena = 0;
/* TODO(pryazha): Use OS related memory allocator (like VirtualAlloc on Windows) */
arena = malloc(sizeof(Arena));
Assert(arena);
if (!cap)
cap = DEFAULT_ALLOC_SIZE;
arena->mem = malloc(cap);
Assert(arena->mem);
arena->cap = cap;
arena->used = 0;
return arena;
}
void arena_release(Arena *arena)
{
free(arena->mem);
arena->mem = 0;
arena->cap = 0;
arena->used = 0;
free(arena);
}
void *arena_push(Arena *arena, U64 size)
{
Assert(arena->used+size <= arena->cap);
void *r = arena->mem+arena->used;
arena->used += size;
return r;
}
void arena_pop(Arena *arena, U64 amount)
{
Assert(arena);
U64 clamped = ClampTop(amount, arena->used);
arena->used = arena->used-clamped;
}
|