From eeff5e273f22aa28e81ab080e9ffdce85ac394b8 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 22 Oct 2021 09:59:31 +0200 Subject: Prepare skeleton for bytecode interpreter --- src/treewalk/string_view.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/treewalk/string_view.c (limited to 'src/treewalk/string_view.c') diff --git a/src/treewalk/string_view.c b/src/treewalk/string_view.c new file mode 100644 index 0000000..39fabe9 --- /dev/null +++ b/src/treewalk/string_view.c @@ -0,0 +1,40 @@ +#include "string_view.h" + +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); + } +} -- cgit v1.2.1