summaryrefslogtreecommitdiff
path: root/prbs.h
blob: 4547d7c72652f3acc1e354df26effbef637c072d (plain)
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