summaryrefslogtreecommitdiff
path: root/prbs.h
blob: 2384c495c398438f56b200c6e3d0d16550b99a04 (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
46
47
48
49
#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) (struct 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);
struct string string_from_cstring(struct arena *arena, const char *cstr);
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_string(struct arena *arena, struct string str);
struct string push_fstring(struct arena *arena, const char *format, ...);
void print_string(struct string str);
void print_stringnl(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