summaryrefslogtreecommitdiff
path: root/source/base/base_string.h
blob: 189b38ad40ae114092614bf5fbbd9ef2bc69020d (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
#ifndef BASE_STRING_H
#define BASE_STRING_H

#include <string.h>

#define StringLit(string) \
    (string8){ .data = (u8 *)(string), .size = (sizeof(string) - 1) }

 #define PushString(arena, size) \
    (string8){ (u8 *)PushArray((arena), u8, (size)), (u64)(size) }

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

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

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 u64
string8_to_u64(u8 *buf, umm len)
{
    u64 value = 0;
    for (umm i = 0; i < len; ++i)
    {
        u8 c = buf[i];
        if (c < '0' || c > '9') break;
        value = value * 10 + (c - '0');
    }
    return value;
}

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

read_only global_variable
string8 nil_string =
{

    .data = NULL,
    .size = 0,

};

#endif /* BASE_STRING_H */