util_string.h

C++ software renderer

src/util_string.h

1.31 KB
#pragma once

#include <string.h>

#include "globals.h"

// No allocs, all inplace, so scoped to caller.
// Don't use out of scope, unless using a custom allocator or you malloc outside

typedef struct {
    char *str;
    u64   size;
} string;

inline string string_from_cstr(char *cstr) {
    string s = {};
    if (cstr) {
        s.str  = cstr;
        s.size = (u32)strlen(cstr);
    }
    return s;
}

inline void string_trim(string *s) {
    usize start = 0;
    usize end   = s->size;
    while (start < end &&
           (s->str[start] == ' ' || s->str[start] == '\t' ||
            s->str[start] == '\r' || s->str[start] == '\n')) {
        start++;
    }
    while (end > start &&
           (s->str[end - 1] == ' ' || s->str[end - 1] == '\t' ||
            s->str[end - 1] == '\r' || s->str[end - 1] == '\n')) {
        end--;
    }
    s->str += start;
    s->size = end - start;
}

inline bool string_starts_with(const string &s, const char *prefix) {
    usize len = strlen(prefix);
    if (s.size < len) {
        return false;
    }
    return strncmp(s.str, prefix, len) == 0;
}

inline bool string_equals(string a, string b) {
    if (a.size != b.size) {
        return false;
    }
    for (u32 i = 0; i < a.size; ++i) {
        if (a.str[i] != b.str[i]) {
            return false;
        }
    }
    return true;
}