rasterizer

C++ software renderer

util_string.h

1.3 kB
 1#pragma once
 2
 3#include <string.h>
 4
 5#include "globals.h"
 6
 7// No allocs, all inplace, so scoped to caller.
 8// Don't use out of scope, unless using a custom allocator or you malloc outside
 9
10typedef struct {
11    char *str;
12    u64   size;
13} string;
14
15inline string string_from_cstr(char *cstr) {
16    string s = {};
17    if (cstr) {
18        s.str  = cstr;
19        s.size = (u32)strlen(cstr);
20    }
21    return s;
22}
23
24inline void string_trim(string *s) {
25    usize start = 0;
26    usize end   = s->size;
27    while (start < end &&
28           (s->str[start] == ' ' || s->str[start] == '\t' ||
29            s->str[start] == '\r' || s->str[start] == '\n')) {
30        start++;
31    }
32    while (end > start &&
33           (s->str[end - 1] == ' ' || s->str[end - 1] == '\t' ||
34            s->str[end - 1] == '\r' || s->str[end - 1] == '\n')) {
35        end--;
36    }
37    s->str += start;
38    s->size = end - start;
39}
40
41inline bool string_starts_with(const string &s, const char *prefix) {
42    usize len = strlen(prefix);
43    if (s.size < len) {
44        return false;
45    }
46    return strncmp(s.str, prefix, len) == 0;
47}
48
49inline bool string_equals(string a, string b) {
50    if (a.size != b.size) {
51        return false;
52    }
53    for (u32 i = 0; i < a.size; ++i) {
54        if (a.str[i] != b.str[i]) {
55            return false;
56        }
57    }
58    return true;
59}