diff options
Diffstat (limited to 'lib/heap.h')
-rw-r--r-- | lib/heap.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/heap.h b/lib/heap.h new file mode 100644 index 0000000..b84baf0 --- /dev/null +++ b/lib/heap.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2023 Aryadev Chavali + + * You may distribute and modify this code under the terms of the + * GPLv2 license. You should have received a copy of the GPLv2 + * license with this file. If not, please write to: + * aryadev@aryadevchavali.com. + + * Created: 2023-11-01 + * Author: Aryadev Chavali + * Description: Arena allocator + */ + +#ifndef HEAP_H +#define HEAP_H + +#include "./base.h" + +#include <stdlib.h> + +#define PAGE_DEFAULT_SIZE 64 + +typedef struct Page +{ + struct Page *next; + size_t used, available; + byte data[]; +} page_t; + +page_t *page_create(size_t, page_t *); +size_t page_space_left(page_t *); +void page_delete(page_t *); + +typedef struct +{ + page_t *beg, *end; + size_t pages; +} heap_t; + +void heap_create(heap_t *); +byte *heap_allocate(heap_t *, size_t); +void heap_stop(heap_t *); + +#endif |