summaryrefslogtreecommitdiff
path: root/source/base/base_string.h
blob: c4b9f9454b464f0d9046faa8a893e18d775012e5 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifndef BASE_STRING_H
#define BASE_STRING_H

#define PushString(arena, count) (string8){ .data = (PushArrayZero(arena, u8, (count))), .size = (count) }
#define StringCast(data, size) (string8){(u8 *)(data), (u64)(size) }
#define StringPCast(data, size) (string8 *){(u8 *)(data), (u64)(size) }

#define StringFmt "%.*s"
#define ULongFmt  "%lu"
#define ULLongFmt "%llu"

typedef struct string8 string8;
struct string8
{
    u8  *data;
    u64  size;
};

typedef struct string16 string16;
struct string16
{
    u16  *data;
    u64  size;
};

typedef struct string32 string32;
struct string32
{
    u32  *data;
    u64  size;
};

//- string linked list implementation
typedef struct string8_node string8_node;
struct string8_node 
{
    string8 *next;
    string8 string;
};

typedef struct string8_list string8_list;
struct string8_list
{
    string8 *first;
    string8 *last;
    u64 count;
};

typedef struct string16_list string16_list;
struct string16_list
{
    string16 *next;
    string16 string;
};

typedef struct string32_list string32_list;
struct string32_list
{
    string32 *first;
    string32 *last;
    u64 count;
};

internal b8
string8_cmp(string8 a, string8 b)
{
    if (a.size != b.size) return 0;
    return (b8)(memcmp(a.data, b.data, a.size) == 0);
}

internal void
string8_appendc(string8 *buf, u8 c)
{
    buf->data[buf->size] = c;
    buf->size += 1;
}

#endif /* BASE_STRING_H */