From 6d60c710747cbee755b9f50d88ee7c71096a289f Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Fri, 2 Jan 2026 19:34:24 -0500 Subject: try to concatenate strings in-place when possible --- arena.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'arena.h') diff --git a/arena.h b/arena.h index 1be5cd7..5235204 100644 --- a/arena.h +++ b/arena.h @@ -24,6 +24,7 @@ void arena_free(Arena *a); void arena_reset(Arena *a); void *arena_alloc(Arena *a, size_t n, size_t align); void *arena_realloc(Arena *a, void *old, size_t oldsz, size_t newsz, size_t align); +void *arena_concat(Arena *m, void *a, size_t asz, void *b, size_t bsz, size_t align); #define new(a, t)\ memset(arena_alloc(a, sizeof(t), _Alignof(__typeof__(t))), 0, sizeof(t)) @@ -89,5 +90,15 @@ void *arena_realloc(Arena *a, void *old, size_t oldsz, size_t newsz, size_t alig } } +void *arena_concat(Arena *m, void *a, size_t asz, void *b, size_t bsz, size_t align) { + if (!asz) + return b; + if (!bsz || (char*)a + asz == b) + return a; + void *p = arena_realloc(m, a, asz, asz + bsz, align); + memcpy((char*)p + asz, b, bsz); + return p; +} + #endif #endif -- cgit v1.2.3