]> git.lizzy.rs Git - nothing.git/blobdiff - src/system/s.h
Replace Tokens with Strings
[nothing.git] / src / system / s.h
index 44035d259fb0ccefebf54463c1d0c4c751b622f6..2b3c3566524b277d7072010715648a9b04361550 100644 (file)
@@ -1,6 +1,9 @@
 #ifndef S_H_
 #define S_H_
 
+#include <string.h>
+#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_