diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-08-23 00:01:51 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-08-23 00:30:50 +0900 |
| commit | 22cd700370d5d548a0cbd347bf1dc9cb9baad8e2 (patch) | |
| tree | 2f5e501461bcec978b0d9c34aa1a313e4f750e4a /src/common.c | |
| parent | 9c202a496e75903fe37e5c19cb97c98eba6e35f2 (diff) | |
| download | ducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.tar.gz ducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.tar.zst ducc-22cd700370d5d548a0cbd347bf1dc9cb9baad8e2.zip | |
feat: allocate array dynamically in parsing
Diffstat (limited to 'src/common.c')
| -rw-r--r-- | src/common.c | 27 |
1 files changed, 27 insertions, 0 deletions
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; +} |
