diff options
| author | spl3g <spleefer6@yandex.ru> | 2025-03-19 18:08:58 +0300 |
|---|---|---|
| committer | spl3g <spleefer6@yandex.ru> | 2025-03-19 18:09:16 +0300 |
| commit | 269014e7843fabf395fca10c3364e50825f0fe20 (patch) | |
| tree | 0f1c3d7e76314f619e53bab13bcb360054b1da0e /lib/arena_strings.h | |
| parent | 35ac34c2f18ab84e0551b61f6e7421a559f58919 (diff) | |
Add arena string builder
Diffstat (limited to 'lib/arena_strings.h')
| -rw-r--r-- | lib/arena_strings.h | 19 |
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_ |
