From 22cd700370d5d548a0cbd347bf1dc9cb9baad8e2 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 23 Aug 2025 00:01:51 +0900 Subject: feat: allocate array dynamically in parsing --- src/common.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/common.c') diff --git a/src/common.c b/src/common.c index 1b89f8c..3553419 100644 --- a/src/common.c +++ b/src/common.c @@ -37,3 +37,30 @@ void strbuilder_append_char(StrBuilder* b, int c) { strbuilder_reserve(b, b->len + 1 + 1); b->buf[b->len++] = c; } + +struct StrArray { + size_t len; + size_t capacity; + const char** data; +}; +typedef struct StrArray StrArray; + +void strings_init(StrArray* strings) { + strings->len = 0; + strings->capacity = 32; + strings->data = calloc(strings->capacity, sizeof(const char*)); +} + +void strings_reserve(StrArray* strings, size_t size) { + if (size <= strings->capacity) + return; + strings->capacity *= 2; + strings->data = realloc(strings->data, strings->capacity * sizeof(const char*)); + memset(strings->data + strings->len, 0, (strings->capacity - strings->len) * sizeof(const char*)); +} + +int strings_push(StrArray* strings, const char* str) { + strings_reserve(strings, strings->len + 1); + strings->data[strings->len] = str; + return ++strings->len; +} -- cgit v1.2.3-70-g09d2