.
This commit is contained in:
parent
dc16bb8ece
commit
7aa9c8ee3d
2 changed files with 8 additions and 11 deletions
16
src/arena.c
16
src/arena.c
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
typedef enum { arena__alloc, arena__reset, arena__save, arena__restore, arena__release } arena__action;
|
typedef enum { arena__alloc, arena__reset, arena__save, arena__restore, arena__release } arena__action;
|
||||||
|
|
||||||
typedef void* (^Arena)(arena__action, usize, usize, void*, const char*, sreg);
|
typedef void* (^Arena)(arena__action, ureg, ureg, void*, const char*, sreg);
|
||||||
|
|
||||||
#define arena_new(A, T) cast(T*, A(arena__alloc, sizeof(T), alignof(T), 0, __FILE__, __LINE__))
|
#define arena_new(A, T) cast(T*, A(arena__alloc, sizeof(T), alignof(T), 0, __FILE__, __LINE__))
|
||||||
#define arena_make(A, C, T) cast(T*, A(arena__alloc, sizeof(T) * (C), alignof(T), 0, __FILE__, __LINE__))
|
#define arena_make(A, C, T) cast(T*, A(arena__alloc, sizeof(T) * (C), alignof(T), 0, __FILE__, __LINE__))
|
||||||
|
|
@ -14,13 +14,13 @@ typedef void* (^Arena)(arena__action, usize, usize, void*, const char*, sreg);
|
||||||
#define arena_restore(A, SP) A(arena__restore, 0, 0, (SP), __FILE__, __LINE__)
|
#define arena_restore(A, SP) A(arena__restore, 0, 0, (SP), __FILE__, __LINE__)
|
||||||
|
|
||||||
// just a nice macro to make these easier to write
|
// just a nice macro to make these easier to write
|
||||||
#define func(a1, a2, a3, a4, a5, a6) ^void* (arena__action a1, usize a2, usize a3, void* a4, const char* a5, sreg a6)
|
#define func(a1, a2, a3, a4, a5, a6) ^void* (arena__action a1, ureg a2, ureg a3, void* a4, const char* a5, sreg a6)
|
||||||
|
|
||||||
static Arena
|
static Arena
|
||||||
Static(u8* data, usize count) {
|
Static(u8* data, ureg count) {
|
||||||
memset(data, 0, count);
|
memset(data, 0, count);
|
||||||
|
|
||||||
capture usize offset = 0;
|
capture ureg offset = 0;
|
||||||
return closure(func(action, size, align, savepoint, _2, _3) {
|
return closure(func(action, size, align, savepoint, _2, _3) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
default: {
|
default: {
|
||||||
|
|
@ -42,12 +42,12 @@ Static(u8* data, usize count) {
|
||||||
|
|
||||||
case arena__save: {
|
case arena__save: {
|
||||||
assert(savepoint != NULL && "Static: savepoint was null");
|
assert(savepoint != NULL && "Static: savepoint was null");
|
||||||
*cast(usize*, savepoint) = offset;
|
*cast(ureg*, savepoint) = offset;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case arena__restore: {
|
case arena__restore: {
|
||||||
assert(savepoint != NULL && "Static: savepoint was null");
|
assert(savepoint != NULL && "Static: savepoint was null");
|
||||||
offset = *cast(usize*, savepoint);
|
offset = *cast(ureg*, savepoint);
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,7 +56,7 @@ Static(u8* data, usize count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Arena
|
static Arena
|
||||||
Linear(usize max_memory) {
|
Linear(ureg max_memory) {
|
||||||
void* ptr = malloc(max_memory);
|
void* ptr = malloc(max_memory);
|
||||||
Arena backing = Static(ptr, max_memory);
|
Arena backing = Static(ptr, max_memory);
|
||||||
return closure(func(action, size, align, savepoint, file, line) {
|
return closure(func(action, size, align, savepoint, file, line) {
|
||||||
|
|
@ -88,7 +88,7 @@ Logger(Arena arena) {
|
||||||
|
|
||||||
static Arena
|
static Arena
|
||||||
Region(Arena arena) {
|
Region(Arena arena) {
|
||||||
capture usize savepoint = 0;
|
capture ureg savepoint = 0;
|
||||||
arena_save(arena, &savepoint);
|
arena_save(arena, &savepoint);
|
||||||
|
|
||||||
return closure(func(action, size, align, _, file, line) {
|
return closure(func(action, size, align, _, file, line) {
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,6 @@ typedef intptr_t sptr;
|
||||||
typedef uptr ureg;
|
typedef uptr ureg;
|
||||||
typedef sptr sreg;
|
typedef sptr sreg;
|
||||||
|
|
||||||
typedef size_t usize;
|
|
||||||
typedef ptrdiff_t ssize;
|
|
||||||
|
|
||||||
|
|
||||||
// Thanks AZMR
|
// Thanks AZMR
|
||||||
#define cast(to_type, expr) ((to_type)(expr))
|
#define cast(to_type, expr) ((to_type)(expr))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue