blob: 1ddddac7b4fdddd205e6f1280370bae3d51c98df (
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
|
#ifndef ARENA_H_
#define ARENA_H_
#include <stdlib.h>
#include <stddef.h>
#include <stdint.h>
#include <assert.h>
#include <string.h>
typedef struct region region;
struct region {
region *next;
size_t cap;
size_t len;
uintptr_t data[];
};
typedef struct {
region *beg;
region *end;
} arena;
void *arena_alloc(arena *a, size_t size);
void arena_free(arena *a);
void grow_da(void *slice, size_t size, arena *arena);
#define new(a, t, c) (t *)arena_alloc(a, sizeof(t)*c)
#define ARENA_REGION_DEFAULT_CAPACITY (8*1024);
// from nullprogram
#define push(slice, arena) \
((slice)->len >= (slice)->cap \
? grow_da(slice, sizeof(*(slice)->data), arena), \
(slice)->data + (slice)->len++ \
: (slice)->data + (slice)->len++)
#endif //ARENA_H_
|