From 8efdd3d26969db25ec113e94c5d2bb66373efaa0 Mon Sep 17 00:00:00 2001 From: Martin Michalec Date: Sun, 22 Feb 2026 02:56:50 +0300 Subject: add implementation --- src/string-builder.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/string-builder.c (limited to 'src') diff --git a/src/string-builder.c b/src/string-builder.c new file mode 100644 index 0000000..0c53367 --- /dev/null +++ b/src/string-builder.c @@ -0,0 +1,41 @@ +#include "string-builder.h" +#include +#include + +void +string_builder__append_ntimes (STRING_BUILDER sb, char c, size_t n) +{ + DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, n); + memset (sb->items + sb->count, c, n); + sb->count += n; +} + +void +string_builder__append_cstrs (STRING_BUILDER sb, ...) +{ + va_list args; + + va_start (args, sb); + const char *arg = va_arg (args, const char *); + while (arg) { + STRING_BUILDER__APPEND_CSTR(*sb, arg); + arg = va_arg (args, const char *); + } va_end (args); +} + +void +string_builder__printf (STRING_BUILDER sb, const char *format, ...) +{ + va_list args; + + va_start (args, format); + int size = vsnprintf (NULL, 0, format, args); + va_end (args); + ASSERT (size >= 0); + + DYNAMIC_ARRAY__ENSURE_CAPACITY (*sb, size + 1); + va_start (args, format); + vsnprintf (&sb->items[sb->count], size + 1, format, args); + va_end (args); + sb->count += size; +} -- cgit v1.3