From: ahmedsamyh Date: Sat, 25 Jan 2025 14:42:31 +0000 (+0500) Subject: WIP: String_Builder X-Git-Url: https://www.git.momoyon.org/?a=commitdiff_plain;h=e93c80ec3440507529d26a910cb31f3ba222d30e;p=commonlib.git WIP: String_Builder --- diff --git a/commonlib.h b/commonlib.h index f397c73..d975879 100644 --- a/commonlib.h +++ b/commonlib.h @@ -166,6 +166,18 @@ void c_Arena_free(c_Arena* a); #define c_Arena_alloc_str(a, fmt, ...) c_Arena_alloc(&(a), sizeof(char)*stbsp_snprintf((a).ptr, (int)((a).buff_size - ((uint8*)(a).ptr - (uint8*)(a).buff)), (fmt), __VA_ARGS__)+1) #define c_Arena_alloc_wstr(a, fmt, ...) c_Arena_alloc(&a, sizeof(char)*wprintf(a.ptr, a.buff_size - ((uint8*)a.ptr - (uint8*)a.buff), (fmt), __VA_ARGS__)+1) +// +// String Builder +// + +typedef struct { + char* data; + size_t size; + size_t capacity; +} String_builder; + +void sb_append(String_builder* sb, char* data); + // // String view // @@ -355,6 +367,22 @@ void c_Arena_free(c_Arena* a) { free(a->buff); } +// +// String Builder +// + +void sb_append(String_builder* sb, char* data) { + size_t data_size = strlen(data); + if (sb->size + data_size > sb->capacity) { + sb->capacity *= 2; + sb->data = realloc(sb->data, sb->capacity); + } + + // void *memcpy(void dest[restrict .n], const void src[restrict .n], + memcpy((uintptr_t)sb->data + (uintptr_t)sb->data, data, data_size); + sb->size += data_size; +} + // // String view //