blob: 6f741b7a82703f1bc9e99b5181c989475b6a3dba (
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
|
#ifndef MEMORY_H
#define MEMORY_H
#include <stdlib.h>
Arena *
arena_alloc(U64 capacity)
{
Arena *result = 0;
result = malloc(sizeof(Arena));
Assert(result);
result->memory = malloc(capacity);
Assert(result->memory);
result->capacity = capacity;
result->used = 0;
return(result);
}
void
arena_release(Arena *arena)
{
free(arena->memory);
arena->memory = 0;
arena->capacity = 0;
arena->used = 0;
free(arena);
}
void *
arena_push_size(Arena *arena, U64 size)
{
Assert(arena->used+size <= arena->capacity);
void *result = arena->memory+arena->used;
arena->used += size;
return(result);
}
#define ArenaPushStruct(arena, element) arena_push_size(arena, sizeof(*(element))
#define ArenaPushArray(arena, array) arena_push_size(arena, sizeof(array))
#endif /* MEMORY_H */
|