This commit is contained in:
2025-12-09 16:24:14 +01:00
parent 35510de012
commit 2ee96597a4
7 changed files with 141 additions and 83 deletions

36
core.c
View File

@@ -176,6 +176,15 @@ string strSlice(string str, size_t start, size_t stop) {
};
}
string strListJoin(Arena *arena, StringList list) {
string result = PushString(arena, 0);
for (EachEl(list, string, item)) {
PushString(arena, item->length);
memcpy(result.str + result.length, item->str, item->length);
}
return result;
}
string strSliceCStr(char *data, size_t start, size_t stop) {
return (string){
data + start,
@@ -183,7 +192,7 @@ string strSliceCStr(char *data, size_t start, size_t stop) {
};
}
bool stringContains(string str, char c) {
bool strContainsChar(string str, char c) {
for (size_t i = 0; i < str.length; i++) {
if (str.str[i] == c) {
return true;
@@ -192,9 +201,24 @@ bool stringContains(string str, char c) {
return false;
}
bool strContains(string str, string search) {
if (search.length == 0) return true;
if (search.length <= str.length) {
for (size_t i = 0; i <= str.length - search.length; i++) {
for (size_t j = 0; j < search.length; j++) {
if (str.str[i + j] != search.str[j]) {
break;
}
if (j == search.length - 1) return true;
}
}
}
return false;
}
string NUMERIC_CHARS = s("0123456789");
inline bool isNumeric(char c) {
return stringContains(NUMERIC_CHARS, c);
inline function bool isNumeric(char c) {
return strContainsChar(NUMERIC_CHARS, c);
}
StringList strSplit(Arena *arena, string splitStr, string inputStr) {
@@ -288,7 +312,7 @@ Real32Result parsePositiveReal32(string str) {
StringList getArgs(Arena *arena, int argc, char **argv) {
StringList args = PushList(arena, StringList, (size_t)argc - 1);
for (int i = 1; i < argc; i++) {
AppendList(&args, strFromCString(arena, argv[i]));
ListAppend(args, strFromCString(arena, argv[i]));
}
return args;
}
@@ -365,6 +389,10 @@ function void printlnStdout(const char *fmt, ...) {
void (*print)(const char *fmt, ...) = &printStdout;
void (*println)(const char *fmt, ...) = &printlnStdout;
void printStr(string str) {
print("%S\n", str);
}
void setStdout() {
print = &printStdout;
println = &printlnStdout;