:Set command

This commit is contained in:
Krzosa Karol
2025-12-31 11:50:21 +01:00
parent 0921054b6e
commit b40873d54c
5 changed files with 172 additions and 17 deletions

View File

@@ -378,7 +378,7 @@ API bool Chop(String *string, String ending) {
return false;
}
API String SkipNumberEx(String *string) {
API String SkipIntEx(String *string) {
String col = {string->data, 0};
for (int64_t i = 0; i < string->len; i += 1) {
if (IsDigit(string->data[i])) {
@@ -391,8 +391,8 @@ API String SkipNumberEx(String *string) {
return col;
}
API Int SkipNumber(String *string) {
String col = SkipNumberEx(string);
API Int SkipInt(String *string) {
String col = SkipIntEx(string);
if (col.len == 0) return -1;
Int result = strtoll(col.data, NULL, 10);
return result;

View File

@@ -384,8 +384,12 @@ API Int GetSize(Array<String16> array) {
return result;
}
API String16 SkipNumberEx(String16 *string) {
API String16 SkipIntEx(String16 *string) {
String16 col = {string->data, 0};
if (At(*string, 0) == '-') {
col.len += 1;
*string = Skip(*string, 1);
}
for (int64_t i = 0; i < string->len; i += 1) {
if (IsDigit(string->data[i])) {
col.len += 1;
@@ -397,15 +401,41 @@ API String16 SkipNumberEx(String16 *string) {
return col;
}
API Int SkipNumber(String16 *string) {
String16 col = SkipNumberEx(string);
if (col.len == 0) return -1;
API Int SkipInt(String16 *string) {
String16 col = SkipIntEx(string);
if (col.len == 0) return 0;
Scratch scratch;
String num_string = ToString(scratch, col);
Int result = strtoll(num_string.data, NULL, 10);
return result;
}
API String16 SkipFloatEx(String16 *string) {
String16 col = {string->data, 0};
if (At(*string, 0) == '-') {
col.len += 1;
*string = Skip(*string, 1);
}
for (int64_t i = 0; i < string->len; i += 1) {
if (IsDigit(string->data[i]) || string->data[i] == u'.') {
col.len += 1;
} else {
break;
}
}
*string = Skip(*string, col.len);
return col;
}
API Float SkipFloat(String16 *string) {
String16 col = SkipFloatEx(string);
if (col.len == 0) return 0;
Scratch scratch;
String num_string = ToString(scratch, col);
Float result = strtod(num_string.data, NULL);
return result;
}
API String16 SkipUntil(String16 *string, String16 str) {
String16 begin = *string;
begin.len = 0;
@@ -419,14 +449,31 @@ API String16 SkipUntil(String16 *string, String16 str) {
API String16 SkipWhitespace(String16 *string) {
String16 begin = {string->data, 0};
for (Int i = 0; i < string->len; i += 1) {
if (!IsWhitespace(string->data[i])) break;
for (;string->len;) {
if (!IsWhitespace(At(*string, 0))) {
break;
}
*string = Skip(*string, 1);
begin.len += 1;
}
return begin;
}
String16 SkipIdent(String16 *string) {
String16 begin = {string->data, 0};
if (IsIdent(At(*string, 0))) {
for (;string->len;) {
char16_t c = At(*string, 0);
if (!IsIdent(c) && !IsDigit(c)) {
break;
}
*string = Skip(*string, 1);
begin.len += 1;
}
}
return begin;
}
API bool Chop(String16 *string, String16 ending) {
if (EndsWith(*string, ending)) {
*string = Chop(*string, ending.len);

View File

@@ -81,8 +81,8 @@ API String16 CutPrefix(String16 *string, int64_t len);
API String16 CutPostfix(String16 *string, int64_t len);
// @todo: think about this API, for parsing, maybe redesign or something
API String16 SkipNumberEx(String16 *string);
API Int SkipNumber(String16 *string);
API String16 SkipIntEx(String16 *string);
API Int SkipInt(String16 *string);
API String16 SkipUntil(String16 *string, String16 str);
API String16 SkipWhitespace(String16 *string);
API String16 ChopNumberEx(String16 *string);