Ascii trim
This commit is contained in:
+48
-4
@@ -7,7 +7,7 @@ Str str_empty(void)
|
||||
return str;
|
||||
}
|
||||
|
||||
Str str_substr(Str str, U32 start, U32 len)
|
||||
Str str_slice(Str str, U32 start, U32 len)
|
||||
{
|
||||
Assert(start < str.len);
|
||||
Assert(len <= str.len);
|
||||
@@ -16,7 +16,6 @@ Str str_substr(Str str, U32 start, U32 len)
|
||||
return new_str;
|
||||
}
|
||||
|
||||
|
||||
Str str_concat(Allocator *alloc, Str first, Str second)
|
||||
{
|
||||
Str str;
|
||||
@@ -43,6 +42,51 @@ Str str_push(Allocator *alloc, Str str)
|
||||
return *new_str;
|
||||
}
|
||||
|
||||
static INLINE bool char_is_ascii_whitespace(U8 byte)
|
||||
{
|
||||
return byte == ' ' || byte == '\t' || byte == '\v' || byte == '\f' || byte == '\r' || byte == '\n';
|
||||
|
||||
}
|
||||
|
||||
Str str_ascii_trim_left(Str str)
|
||||
{
|
||||
U8 *start = str.str;
|
||||
U8 *end = str.str + str.len;
|
||||
while (start != end) {
|
||||
if (!char_is_ascii_whitespace(*start)) {
|
||||
break;
|
||||
}
|
||||
start++;
|
||||
}
|
||||
|
||||
return str_create(start, (U32)(end - start));
|
||||
}
|
||||
|
||||
Str str_ascii_trim_right(Str str)
|
||||
{
|
||||
U8 *start = str.str;
|
||||
U8 *end = str.str + str.len;
|
||||
while (start != end) {
|
||||
if (!char_is_ascii_whitespace(*(end - 1))) {
|
||||
break;
|
||||
}
|
||||
end--;
|
||||
}
|
||||
|
||||
return str_create(start, (U32)(end - start));
|
||||
}
|
||||
|
||||
Str str_ascii_trim(Str str)
|
||||
{
|
||||
Str new_str = str_ascii_trim_left(str);
|
||||
new_str = str_ascii_trim_right(new_str);
|
||||
return new_str;
|
||||
}
|
||||
|
||||
S64 str_substr(Str haystack, Str to_find)
|
||||
{
|
||||
}
|
||||
|
||||
// split @str on any byte in @separators, place split strings in @vec
|
||||
void str_split(Str str, Str separators, StrVec *vec)
|
||||
{
|
||||
@@ -58,14 +102,14 @@ void str_split(Str str, Str separators, StrVec *vec)
|
||||
break;
|
||||
}
|
||||
|
||||
Str sub_str = str_substr(str, start_pos, i - start_pos);
|
||||
Str sub_str = str_slice(str, start_pos, i - start_pos);
|
||||
vec->strings[vec->len] = sub_str;
|
||||
vec->len++;
|
||||
start_pos = i + 1;
|
||||
}
|
||||
}
|
||||
if (start_pos < str.len && vec->len < vec->max_len) {
|
||||
Str sub_str = str_substr(str, start_pos, str.len - start_pos);
|
||||
Str sub_str = str_slice(str, start_pos, str.len - start_pos);
|
||||
vec->strings[vec->len] = sub_str;
|
||||
vec->len++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user