diff options
| author | spl3g <spleefer6@yandex.ru> | 2025-03-22 21:41:16 +0300 |
|---|---|---|
| committer | spl3g <spleefer6@yandex.ru> | 2025-03-22 21:41:16 +0300 |
| commit | 62454373db4cd2add82ded0cf7b21f7d69ade597 (patch) | |
| tree | 1627133fe4567e9a3abb707af5e7289353410d5f /lib/arena.h | |
| parent | ef5f52fb739c9f0d71c579f08363ef0dfd5c227d (diff) | |
Reorganize the lib
Diffstat (limited to 'lib/arena.h')
| -rw-r--r-- | lib/arena.h | 65 |
1 files changed, 0 insertions, 65 deletions
diff --git a/lib/arena.h b/lib/arena.h deleted file mode 100644 index 1f53355..0000000 --- a/lib/arena.h +++ /dev/null @@ -1,65 +0,0 @@ -// Most of the code is from https://github.com/tsoding/arena - -#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; - size_t region_cap; -} arena; - -arena arena_init_cap(size_t cap); -void *arena_alloc(arena *a, size_t size); -void arena_free(arena *a); -void *arena_realloc(arena *a, void *oldptr, size_t oldsz, size_t newsz); - -#define new(a, t, c) (t *)arena_alloc(a, sizeof(t)*c) - -#define ARENA_REGION_DEFAULT_CAPACITY (8*1024) -#define ARENA_DA_INIT_CAP (2) - -#define arena_da_reserve(a, da, expected_size) \ - do { \ - if ((expected_size) >= (da)->cap) { \ - size_t new_cap = (da)->cap == 0 ? ARENA_DA_INIT_CAP : (da)->cap*2; \ - while (new_cap < expected_size) { \ - new_cap *= 2; \ - } \ - (da)->data = arena_realloc( \ - (a), (da)->data, \ - (da)->cap*sizeof(*(da)->data), \ - new_cap*sizeof(*(da)->data)); \ - (da)->cap = new_cap; \ - } \ - } while (0) - -#define arena_da_append(a, da, item) \ - do { \ - arena_da_reserve((a), (da), (da)->len + 1); \ - (da)->data[(da)->len++] = (item); \ - } while (0) - -#define arena_da_append_many(a, da, items, items_len) \ - do { \ - arena_da_reserve((a), (da), (da)->len+len); \ - memcpy((da)->data+(da)->len, (items), sizeof(*(da)->data)*items_len); \ - (da)->len += len; \ - } while (0) - -#endif //ARENA_H_ |
