diff options
Diffstat (limited to 'prb_string.c')
-rw-r--r-- | prb_string.c | 146 |
1 files changed, 92 insertions, 54 deletions
diff --git a/prb_string.c b/prb_string.c index 061731c..bb235df 100644 --- a/prb_string.c +++ b/prb_string.c @@ -1,73 +1,70 @@ Str8 str8(U8 *ptr, U64 length) { Assert(ptr); - Str8 r = { ptr, length }; + + Str8 r; + + r.ptr = ptr; + r.length = length; + return r; } -Str8 str8_range(U8 *start, U8 *end) +Str8 str8range(U8 *start, U8 *end) { - Str8 r = { start, end-start }; + Str8 r; + + r.ptr = start; + r.length = end-start; + return r; } -Str8 str8_from_cstr(char *cstr) +Str8 str8fromcstr(char *cstr) { - U8 *ptr = (U8 *)cstr; + U8 *ptr; + Str8 r; + + ptr = (U8 *)cstr; for (; *ptr; ++ptr); - Str8 r = str8_range((U8 *)cstr, ptr); + r = str8range((U8 *)cstr, ptr); + return r; } -char *str8_to_cstr(Arena *arena, Str8 s) +char *str8tocstr(Arena *arena, Str8 s) { - U64 length = s.length+1; - char *r = arena_push(arena, length*sizeof(U8)); + U64 length; + char *r; + + length = s.length+1; + r = arena_push(arena, length*sizeof(U8)); MemoryCopy(r, s.ptr, length*sizeof(U8)); *(r+s.length) = 0; - return r; -} -Str8 str8_chop_end(Str8 s, U64 count) -{ - U64 length = s.length-ClampTop(count, s.length); - Str8 r = str8(s.ptr, length); return r; } -Str8 str8_chop_start(Str8 s, U64 count) +Str8 str8chopend(Str8 s, U64 count) { - U64 clamped = ClampTop(count, s.length); - U64 length = s.length-ClampTop(count, s.length); - Str8 r = str8(s.ptr+clamped, length); - return r; -} + U64 length; + Str8 r; -Str8 str8_pushfv(Arena *arena, char *fmt, va_list args) -{ - Str8 r = {0}; - - va_list args2; - va_copy(args2, args); - - U32 buf_size = 1024; - U8 *buf = arena_push(arena, buf_size); - - S32 n = vsnprintf((char *)buf, buf_size, fmt, args); - va_end(args2); - - if (n > 0) - r = str8(buf, n); + length = s.length-ClampTop(count, s.length); + r = str8(s.ptr, length); return r; } -Str8 str8_pushf(Arena *arena, char *fmt, ...) +Str8 str8chopstart(Str8 s, U64 count) { - va_list args; - va_start(args, fmt); - Str8 r = str8_pushfv(arena, fmt, args); - va_end(args); + U64 clamped, length; + Str8 r; + + clamped = ClampTop(count, s.length); + length = s.length-ClampTop(count, s.length); + r = str8(s.ptr+clamped, length); + return r; } @@ -77,17 +74,21 @@ void str8print(Str8 s) printf("%c", (char)(*(s.ptr+i))); } -Str8List *str8_list(Arena *arena) +Str8List *str8list(Arena *arena) { - Str8List *list = arena_push(arena, sizeof(Str8List)); + Str8List *list; + list = arena_push(arena, sizeof(Str8List)); MemoryZero(list, sizeof(Str8List)); return list; } -void str8_list_push(Arena *arena, Str8List *list, Str8 str, B32 to_front) +void str8listpush(Arena *arena, Str8List *list, Str8 str, B32 to_front) { Assert(arena && list); - Str8Node *n = arena_push(arena, sizeof(Str8Node)); + + Str8Node *n; + + n = arena_push(arena, sizeof(Str8Node)); n->str = str; if (to_front) DLLPushFront(list->first, list->last, n); @@ -97,19 +98,56 @@ void str8_list_push(Arena *arena, Str8List *list, Str8 str, B32 to_front) list->node_count++; } -void str8_list_pushf(Arena *arena, Str8List *list, B32 to_front, char *fmt, ...) +void str8listprint(Str8List *list) { - va_list args; + Str8Node *n; + for (n = list->first; n; n = n->next) + str8print(n->str); +} + +Str8 str8pushfv(Arena *arena, char *fmt, va_list args) +{ + va_list args2; + Str8 r; + S32 buf_size, n; + U8 *buf; + + va_copy(args2, args); + + buf_size = 1024; + buf = arena_push(arena, buf_size); + + n = vsnprintf((char *)buf, buf_size, fmt, args); + va_end(args2); + + MemoryZero(&r, sizeof(Str8)); + + if (n > 0) + r = str8(buf, n); + + return r; +} + +Str8 str8pushf(Arena *arena, char *fmt, ...) +{ + va_list args; + Str8 r; + va_start(args, fmt); - Str8 str = str8_pushfv(arena, fmt, args); + r = str8pushfv(arena, fmt, args); va_end(args); - str8_list_push(arena, list, str, to_front); + + return r; } -void str8_list_print(Str8List *list) +void str8listpushf(Arena *arena, Str8List *list, B32 to_front, char *fmt, ...) { - for (Str8Node *n = list->first; n; n = n->next) { - str8print(n->str); - printf("%s", (n->next) ? " -> " : "\n"); - } + va_list args; + Str8 str; + + va_start(args, fmt); + str = str8pushfv(arena, fmt, args); + va_end(args); + + str8listpush(arena, list, str, to_front); } |