1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#ifndef prbs_h
#define prbs_h
#include "types.h"
#include "arena.h"
#include <stdarg.h>
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
|