summaryrefslogtreecommitdiff
path: root/libs/pwyazh/memory.h
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 */