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