#ifndef prbs_h #define prbs_h #include "types.h" #include "arena.h" #include i32 cstrings_equal(const char *s1, const char *s2); struct string { u8 *ptr; u64 len; }; struct string_node { struct string str; struct string_node *next; struct string_node *prev; }; struct string_list { i32 cnt; u64 len; struct string_node *first; struct string_node *last; }; #define string_from_cliteral(str) (sturct string){(u8 *)(str), sizeof(str) - 1} #define expand_string(str) (i32)((str).len), ((str).ptr) char *string_to_cstring(struct arena *arena, struct string str); i32 strings_equal(struct string str1, struct string str2); u8 *find_char(struct string str, i32 c); u8 *find_last_char(struct string str, i32 c); struct string string_from_range(u8 *start, u8 *end); struct string get_dirname(struct string str); struct string push_fstringv(struct arena *arena, const char *format, va_list args); struct string push_fstring(struct arena *arena, const char *format, ...); void print_string(struct string str); void push_string_to_list(struct arena *arena, struct string_list *list, i32 front, struct string str); void push_fstring_to_list(struct arena *arena, struct string_list *list, i32 front, const char *format, ...); struct string join_string_list(struct arena *arena, struct string_list *list); void print_string_list(struct string_list *list); #endif