From 1d4447bcd888dd0bd20cf4b6dd7f9192145debf0 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Mon, 29 Jun 2026 22:59:28 -0400 Subject: Refactor data structures --- src/utils.c | 66 ++++--------------------------------------------------------- 1 file changed, 4 insertions(+), 62 deletions(-) (limited to 'src/utils.c') diff --git a/src/utils.c b/src/utils.c index 53a9ebf..75d59a6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -11,10 +11,10 @@ enum vsnprintf_mode { #define SCRATCH_LEN 256 #define WRITE(c) { buf[idx++] = c; if (idx >= len - 1) goto done; } #define WRITE_SCRATCH(c) { scratch[sidx++] = c; if (sidx >= SCRATCH_LEN) goto error; } -int pit_string_vsnprintf(char *buf, size_t len, char *format, va_list ap) { +int pit_libc_string_vsnprintf(char *buf, size_t len, char *format, va_list ap) { // vsnprintf size_t idx = 0; - size_t flen = pit_string_strlen(format); + size_t flen = pit_libc_string_strlen(format); size_t fidx = 0; enum vsnprintf_mode mode = VSNPRINTF_MODE_NORMAL; size_t sidx = 0; @@ -92,68 +92,10 @@ done: error: return -1; } -int pit_string_snprintf(char *buf, size_t len, char *format, ...) { +int pit_libc_string_snprintf(char *buf, size_t len, char *format, ...) { va_list ap; va_start(ap, format); - int ret = pit_string_vsnprintf(buf, len, format, ap); + int ret = pit_libc_string_vsnprintf(buf, len, format, ap); va_end(ap); return ret; } - -pit_arena *pit_arena_new(u8 *buf, i64 buf_len, i64 elem_size) { - uintptr_t base = (uintptr_t) buf; - uintptr_t aligned = pit_align_up(base, sizeof(void *)); - pit_arena *a = (pit_arena *) aligned; - uintptr_t data = aligned + sizeof(pit_arena); - i64 offset = (i64) data - (i64) base; - i64 remaining = (i64) pit_align_down((uintptr_t) (buf_len - offset), sizeof(void *)); - if (!a || remaining <= 0) return NULL; - a->elem_size = elem_size; - a->capacity = remaining / elem_size; - a->next = 0; - a->back = remaining; - return a; -} -void pit_arena_reset(pit_arena *a) { - a->next = 0; - pit_mul(&a->back, a->elem_size, a->capacity); -} -static i64 pit_arena_byte_idx(pit_arena *a, i64 idx) { - i64 byte_idx = 0; pit_mul(&byte_idx, a->elem_size, idx); - return byte_idx; -} -i64 pit_arena_alloc_idx(pit_arena *a) { - i64 ret = a->next; - i64 byte_idx = pit_arena_byte_idx(a, ret); - if (byte_idx + a->elem_size >= a->back) { return -1; } - a->next += 1; - return ret; -} -i64 pit_arena_alloc_bulk_idx(pit_arena *a, i64 num) { - i64 ret = a->next; - i64 byte_idx = pit_arena_byte_idx(a, ret); - i64 byte_len = 0; pit_mul(&byte_len, a->elem_size, num); - if (byte_idx + byte_len > a->back) { return -1; } - a->next += num; - return ret; -} -void *pit_arena_get(pit_arena *a, i64 idx) { - i64 byte_idx = pit_arena_byte_idx(a, idx); - if (byte_idx < 0 || byte_idx + a->elem_size >= a->back) { return NULL; } - return &a->data[byte_idx]; -} -void *pit_arena_alloc(pit_arena *a) { - i64 idx = pit_arena_alloc_idx(a); - return pit_arena_get(a, idx); -} -void *pit_arena_alloc_bulk(pit_arena *a, i64 num) { - i64 idx = pit_arena_alloc_bulk_idx(a, num); - return pit_arena_get(a, idx); -} -void *pit_arena_alloc_back(pit_arena *a, i64 sz) { - i64 next_byte = pit_arena_byte_idx(a, a->next); - i64 back_byte = (i64) pit_align_down((uintptr_t) (a->back - sz), sizeof(void *)); - if (back_byte < next_byte) return NULL; - a->back = back_byte; - return &a->data[a->back]; -} -- cgit v1.2.3