35 lines
922 B
C
35 lines
922 B
C
#include "base/base_strings.h"
|
|
#include "base/base_arena.h"
|
|
|
|
Str8 str8_pushf(Arena *arena, const char *fmt, ...) {
|
|
va_list args, args2;
|
|
va_start(args, fmt);
|
|
va_copy(args2, args);
|
|
S32 len = vsnprintf(NULL, 0, fmt, args);
|
|
va_end(args);
|
|
|
|
char *buf = push_array(arena, char, len + 1);
|
|
vsnprintf(buf, len + 1, fmt, args2);
|
|
va_end(args2);
|
|
|
|
Str8 r = {buf, (U64)len};
|
|
return r;
|
|
}
|
|
|
|
Str8 str8_push_copy(Arena *arena, Str8 s) {
|
|
if (s.size == 0 || !s.str) { Str8 r = {NULL, 0}; return r; }
|
|
char *buf = push_array_no_zero(arena, char, s.size + 1);
|
|
MemoryCopy(buf, s.str, s.size);
|
|
buf[s.size] = 0;
|
|
Str8 r = {buf, s.size};
|
|
return r;
|
|
}
|
|
|
|
void str8_list_push(Arena *arena, Str8List *list, Str8 s) {
|
|
Str8Node *node = push_array(arena, Str8Node, 1);
|
|
node->string = s;
|
|
SLLQueuePush(list->first, list->last, node);
|
|
list->count++;
|
|
list->total_size += s.size;
|
|
}
|