]> www.git.momoyon.org Git - commonlib.git/commitdiff
WIP: String_Builder
authorahmedsamyh <ahmedsamyh10@gmail.com>
Sat, 25 Jan 2025 14:42:31 +0000 (19:42 +0500)
committerahmedsamyh <ahmedsamyh10@gmail.com>
Sat, 25 Jan 2025 14:42:31 +0000 (19:42 +0500)
commonlib.h

index f397c734d8d5d6ce0f3bf4637d6035da1fcd2153..d975879a7f3680b7ffec40ecacf788ea56239dd9 100644 (file)
@@ -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)\r
 #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)\r
 \r
+//\r
+// String Builder\r
+//\r
+\r
+typedef struct {\r
+    char* data;\r
+    size_t size;\r
+    size_t capacity;\r
+} String_builder;\r
+\r
+void sb_append(String_builder* sb, char* data);\r
+\r
 //\r
 // String view\r
 //\r
@@ -355,6 +367,22 @@ void c_Arena_free(c_Arena* a) {
     free(a->buff);\r
 }\r
 \r
+//\r
+// String Builder\r
+//\r
+\r
+void sb_append(String_builder* sb, char* data) {\r
+    size_t data_size = strlen(data);\r
+    if (sb->size + data_size > sb->capacity) {\r
+        sb->capacity *= 2;\r
+        sb->data = realloc(sb->data, sb->capacity);\r
+    }\r
+\r
+    // void *memcpy(void dest[restrict .n], const void src[restrict .n],\r
+    memcpy((uintptr_t)sb->data + (uintptr_t)sb->data, data, data_size);\r
+    sb->size += data_size;\r
+}\r
+\r
 //\r
 // String view\r
 //\r