Compare commits

..

No commits in common. "cbc14f9c6199259a48f1fa41bd3dd1fa2992333b" and "11b7d95fcad712134ff695bb0eabb03b9261f810" have entirely different histories.

3 changed files with 8 additions and 46 deletions

View file

@ -30,8 +30,7 @@ Arena *arena_init(Arena *parent, size_t capacity) {
.begin = region, .begin = region,
.end = region, .end = region,
.child = NULL, .child = NULL,
.sibling = NULL, .sibling = NULL};
.deinit_task_top = NULL};
// if parent has no children this arena is now it's child // if parent has no children this arena is now it's child
if (parent->child == NULL) { if (parent->child == NULL) {
@ -51,8 +50,7 @@ Arena *arena_init(Arena *parent, size_t capacity) {
.begin = region, .begin = region,
.end = region, .end = region,
.child = NULL, .child = NULL,
.sibling = NULL, .sibling = NULL};
.deinit_task_top = NULL};
return arena; return arena;
} }
@ -67,13 +65,6 @@ void arena_deinit(Arena *arena) {
arena_deinit(current_child); arena_deinit(current_child);
} }
// Run deinit tasks before freeing data
while (arena->deinit_task_top != NULL) {
assert(arena->deinit_task_top->func_ptr != NULL);
arena->deinit_task_top->func_ptr(arena->deinit_task_top->func_param);
arena->deinit_task_top = arena->deinit_task_top->next;
}
// actually free the data // actually free the data
assert(arena->begin != NULL && arena->end != NULL); assert(arena->begin != NULL && arena->end != NULL);
Region *region = arena->begin; Region *region = arena->begin;
@ -126,11 +117,7 @@ void *arena_alloc(Arena *arena, size_t size) {
return result; return result;
} }
void arena_deinit_task_push(Arena *arena, ArenaDeinitTask task) { // void *arena_clear(Arena *arena) {
ArenaDeinitTask *job = arena_alloc(arena, sizeof(ArenaDeinitTask)); // arena->size = 0;
*job = task; // return arena->data;
// }
ArenaDeinitTask *next_job = arena->deinit_task_top;
arena->deinit_task_top = job;
job->next = next_job;
}

View file

@ -10,13 +10,6 @@ struct Region_s {
unsigned char data[]; unsigned char data[];
}; };
typedef struct ArenaDeinitTask_s ArenaDeinitTask;
struct ArenaDeinitTask_s {
void *func_param;
void (*func_ptr)(void *);
ArenaDeinitTask *next;
};
typedef struct Arena_s Arena; typedef struct Arena_s Arena;
struct Arena_s { struct Arena_s {
Arena *parent; Arena *parent;
@ -24,13 +17,10 @@ struct Arena_s {
Arena *sibling; Arena *sibling;
Region *begin; Region *begin;
Region *end; Region *end;
ArenaDeinitTask *deinit_task_top;
}; };
Arena *arena_init(Arena *parent, size_t capacity); Arena *arena_init(Arena *parent, size_t capacity);
void arena_deinit(Arena *arena); void arena_deinit(Arena *arena);
void arena_deinit_task_push(Arena *arena, ArenaDeinitTask task);
void *arena_alloc(Arena *arena, size_t size); void *arena_alloc(Arena *arena, size_t size);
// void *arena_clear(Arena *arena); // void *arena_clear(Arena *arena);

View file

@ -1,6 +1,5 @@
#include <GL/glew.h> #include <GL/glew.h>
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "SDL3/SDL_events.h" #include "SDL3/SDL_events.h"
@ -11,9 +10,7 @@
#include "arena_allocator.h" #include "arena_allocator.h"
void test_task(void *data) { /*
printf("\ttest task has been run: %s\n", (char *)data);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
// arena allocation test // arena allocation test
printf("Allocation test\n"); printf("Allocation test\n");
@ -36,17 +33,6 @@ int main(int argc, char *argv[]) {
Arena *greatsiblinggreatgrandchild_arena = Arena *greatsiblinggreatgrandchild_arena =
arena_init(greatgrandchildsiblingsibling_arena, 0); arena_init(greatgrandchildsiblingsibling_arena, 0);
printf("deinit task creation tests\n");
ArenaDeinitTask task = {NULL};
task.func_ptr = *test_task;
task.func_param = "parameter";
arena_deinit_task_push(global_arena, task);
task.func_param = "2nd parameter added";
arena_deinit_task_push(global_arena, task);
printf("deinit tests\n"); printf("deinit tests\n");
arena_deinit(greatgrandchild_arena); arena_deinit(greatgrandchild_arena);
@ -54,8 +40,8 @@ int main(int argc, char *argv[]) {
printf("tests complete\n"); printf("tests complete\n");
} }
*/
/*
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
wn_window window = {0}; wn_window window = {0};
if (!wn_window_init(&window)) { if (!wn_window_init(&window)) {
@ -170,4 +156,3 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
*/