diff options
Diffstat (limited to 'src/treewalk/string_view.c')
-rw-r--r-- | src/treewalk/string_view.c | 40 |
1 files changed, 40 insertions, 0 deletions
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 @@ | |||
1 | #include "string_view.h" | ||
2 | |||
3 | char | ||
4 | sv_next(StringView *sv) { | ||
5 | if (sv->n == 0) { | ||
6 | return '\0'; | ||
7 | } | ||
8 | char c = sv->start[0]; | ||
9 | sv->start++; | ||
10 | sv->n--; | ||
11 | return c; | ||
12 | } | ||
13 | |||
14 | char | ||
15 | sv_peek(const StringView *sv) { | ||
16 | if (sv->n == 0) { | ||
17 | return '\0'; | ||
18 | } | ||
19 | return sv->start[0]; | ||
20 | } | ||
21 | |||
22 | bool | ||
23 | sv_equal(const StringView *a, const StringView *b) { | ||
24 | if (a->n != b->n) { | ||
25 | return false; | ||
26 | } | ||
27 | for (size_t i = 0; i < a->n; i++) { | ||
28 | if (a->start[i] != b->start[i]) { | ||
29 | return false; | ||
30 | } | ||
31 | } | ||
32 | return true; | ||
33 | } | ||
34 | |||
35 | void | ||
36 | sv_write(const StringView *sv, FILE *file) { | ||
37 | for (size_t i = 0; i < sv->n; i++) { | ||
38 | putc(sv->start[i], file); | ||
39 | } | ||
40 | } | ||