6 #include "system/stacktrace.h"
7 #include "system/memory.h"
14 #define STRING_LIT(literal) string(sizeof(literal) - 1, literal)
17 String string(size_t count, const char *data)
28 String string_nt(const char *data)
31 .count = strlen(data),
39 String chop_by_delim(String *input, char delim)
44 while (i < input->count && input->data[i] != delim)
47 if (i < input->count) {
48 String result = string(i, input->data);
50 input->count -= i - 1;
54 String result = *input;
61 int string_equal(String a, String b)
63 if (a.count != b.count) return 0;
64 return memcmp(a.data, b.data, a.count) == 0;
68 String trim_begin(String input)
70 while (input.count > 0 && isspace(*input.data)) {
79 String trim_end(String input)
81 while (input.count > 0 && isspace(*(input.data + input.count - 1))) {
89 String trim(String input)
91 return trim_end(trim_begin(input));
95 String chop_word(String *input)
99 *input = trim_begin(*input);
102 while (i < input->count && !isspace(input->data[i]))
105 String result = string(i, input->data);
112 char *string_to_cstr(Memory *memory, String s)
114 trace_assert(memory);
116 char *result = memory_alloc(memory, s.count + 1);
117 memset(result, 0, s.count + 1);
118 memcpy(result, s.data, s.count);