7 #include "system/stacktrace.h"
8 #include "system/memory.h"
15 #define STRING_LIT(literal) string(sizeof(literal) - 1, literal)
18 String string(size_t count, const char *data)
29 String string_nt(const char *data)
32 .count = strlen(data),
40 String chop_by_delim(String *input, char delim)
45 while (i < input->count && input->data[i] != delim)
48 if (i < input->count) {
49 String result = string(i, input->data);
51 input->count -= i - 1;
55 String result = *input;
62 int string_equal(String a, String b)
64 if (a.count != b.count) return 0;
65 return memcmp(a.data, b.data, a.count) == 0;
69 String trim_begin(String input)
71 while (input.count > 0 && isspace(*input.data)) {
80 String trim_end(String input)
82 while (input.count > 0 && isspace(*(input.data + input.count - 1))) {
90 String trim(String input)
92 return trim_end(trim_begin(input));
96 String chop_word(String *input)
100 *input = trim_begin(*input);
103 while (i < input->count && !isspace(input->data[i]))
106 String result = string(i, input->data);
113 char *string_to_cstr(Memory *memory, String s)
115 trace_assert(memory);
117 char *result = memory_alloc(memory, s.count + 1);
118 memset(result, 0, s.count + 1);
119 memcpy(result, s.data, s.count);