aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/string_view.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-11 11:20:38 +0200
committerBad Diode <bd@badd10de.dev>2021-10-11 11:20:38 +0200
commit6a833ddc268191bfaea94a1cd896684f1b834ef7 (patch)
treea3049a46a338c442f66ec94a36313145f57011d7 /src/bootstrap/string_view.c
parentdc758810b463c1674991601edb0ba41d40831e7a (diff)
downloadbdl-6a833ddc268191bfaea94a1cd896684f1b834ef7.tar.gz
bdl-6a833ddc268191bfaea94a1cd896684f1b834ef7.zip
Modify main function to allow multiple file processing
Diffstat (limited to 'src/bootstrap/string_view.c')
-rw-r--r--src/bootstrap/string_view.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/bootstrap/string_view.c b/src/bootstrap/string_view.c
new file mode 100644
index 0000000..13ba9e0
--- /dev/null
+++ b/src/bootstrap/string_view.c
@@ -0,0 +1,43 @@
1typedef struct StringView {
2 char *start;
3 size_t n;
4} StringView;
5
6char
7sv_next(StringView *sv) {
8 if (sv->n == 0) {
9 return '\0';
10 }
11 char c = sv->start[0];
12 sv->start++;
13 sv->n--;
14 return c;
15}
16
17char
18sv_peek(const StringView *sv) {
19 if (sv->n == 0) {
20 return '\0';
21 }
22 return sv->start[0];
23}
24
25bool
26sv_equal(const StringView *a, const StringView *b) {
27 if (a->n != b->n) {
28 return false;
29 }
30 for (size_t i = 0; i < a->n; i++) {
31 if (a->start[i] != b->start[i]) {
32 return false;
33 }
34 }
35 return true;
36}
37
38void
39sv_write(const StringView *sv, FILE *file) {
40 for (size_t i = 0; i < sv->n; i++) {
41 putc(sv->start[i], file);
42 }
43}