#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;
}