typedef struct StringView { char *start; size_t n; } StringView; void sv_write(StringView sv) { for (size_t i = 0; i < sv.n; i++) { putchar(sv.start[i]); } } bool sv_equal(StringView a, StringView b) { if (a.n == b.n) { for (size_t i = 0; i < a.n; i++) { if (a.start[i] != b.start[i]) { return false; } } return true; } return false; } char sv_next(StringView *sv) { if (sv->n == 0) { return '\0'; } char ret = sv->start[0]; sv->start++; sv->n--; return ret; } char sv_peek(const StringView *sv) { if (sv->n == 0) { return '\0'; } return sv->start[0]; }