aboutsummaryrefslogtreecommitdiff
path: root/lib/arena_strings.h
diff options
context:
space:
mode:
authorspl3g <spleefer6@yandex.ru>2025-03-19 18:08:58 +0300
committerspl3g <spleefer6@yandex.ru>2025-03-19 18:09:16 +0300
commit269014e7843fabf395fca10c3364e50825f0fe20 (patch)
tree0f1c3d7e76314f619e53bab13bcb360054b1da0e /lib/arena_strings.h
parent35ac34c2f18ab84e0551b61f6e7421a559f58919 (diff)
Add arena string builder
Diffstat (limited to 'lib/arena_strings.h')
-rw-r--r--lib/arena_strings.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/arena_strings.h b/lib/arena_strings.h
index 85ffda3..b25435d 100644
--- a/lib/arena_strings.h
+++ b/lib/arena_strings.h
@@ -10,8 +10,27 @@ typedef struct {
size_t cap;
} const_string_da;
+typedef struct {
+ char* data;
+ size_t len;
+ size_t cap;
+} string_builder;
+
const_string arena_cs_append(arena *a, const_string dst, const_string src);
const_string arena_cs_init(arena *a, int len);
const_string arena_cs_concat(arena *a, const_string_da strings, const_string sep);
+#define arena_sb_append_buf(a, sb, buf, len) arena_da_append_many((a), (sb), (buf), (len))
+
+#define arena_sb_append_cstr(a, sb, cstr) \
+ do { \
+ const char * str = (cstr); \
+ size_t len = strlen((cstr)); \
+ arena_da_append_many((a), (sb), (str), len); \
+ } while (0)
+
+#define arena_sb_append_null(a, sb) arena_da_append_many((a), (sb), "", 1)
+
+#define arena_sb_to_cs(sb) cs_from_parts((sb).data, (sb).len)
+
#endif // ARENA_STRINGS_H_