X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fsystem%2Fs.h;h=2b3c3566524b277d7072010715648a9b04361550;hb=755798450bd0ed6ca319021e4e98bafc64b270cd;hp=44035d259fb0ccefebf54463c1d0c4c751b622f6;hpb=f9e5ee4fdada72653c100e21323ec90b87387c74;p=nothing.git diff --git a/src/system/s.h b/src/system/s.h index 44035d25..2b3c3566 100644 --- a/src/system/s.h +++ b/src/system/s.h @@ -1,6 +1,9 @@ #ifndef S_H_ #define S_H_ +#include +#include "system/stacktrace.h" + typedef struct { size_t count; const char *data; @@ -59,4 +62,48 @@ int string_equal(String a, String b) return memcmp(a.data, b.data, a.count) == 0; } +static inline +String trim_begin(String input) +{ + while (input.count > 0 && isspace(*input.data)) { + input.data += 1; + input.count -= 1; + } + + return input; +} + +static inline +String trim_end(String input) +{ + while (input.count > 0 && isspace(*(input.data + input.count - 1))) { + input.count -= 1; + } + + return input; +} + +static inline +String trim(String input) +{ + return trim_end(trim_begin(input)); +} + +static inline +String chop_word(String *input) +{ + trace_assert(input); + + *input = trim_begin(*input); + + size_t i = 0; + while (i < input->count && !isspace(input->data[i])) + i++; + + String result = string(i, input->data); + input->data += i; + input->count -= i; + return result; +} + #endif // S_H_