summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kdx@42l.fr>2023-03-13 23:59:51 +0100
committerkdx <kdx@42l.fr>2023-03-13 23:59:56 +0100
commitedfde221a0e8ca49fde51a45a211e540ca46b0f5 (patch)
tree9484707929a50e98b7a46218fca8b2a6a17e83fd
parent3c2abb64ad8a43e453a3388cec18728d1dd36254 (diff)
downloadgolem-edfde221a0e8ca49fde51a45a211e540ca46b0f5.tar.gz
string slice
-rw-r--r--main.c11
-rw-r--r--slice.c29
-rw-r--r--slice.h11
3 files changed, 51 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..a881c87
--- /dev/null
+++ b/main.c
@@ -0,0 +1,11 @@
+#include "slice.h"
+
+int
+main(void)
+{
+ Slice slice = slice_from_str("bonsoir paris");
+ slice_print(slice);
+ slice_print(slice_sub(slice, 3, 4));
+ slice_print(slice_sub(slice, 3, 7));
+ return 0;
+}
diff --git a/slice.c b/slice.c
new file mode 100644
index 0000000..172da58
--- /dev/null
+++ b/slice.c
@@ -0,0 +1,29 @@
+#include "slice.h"
+#include <string.h>
+#include <stdio.h>
+
+Slice
+slice_print(Slice slice)
+{
+ putchar('"');
+ for (int i = slice.begin; i < slice.end; i++) {
+ putchar(slice.str[i]);
+ }
+ putchar('"');
+ putchar('\n');
+ return slice;
+}
+
+Slice
+slice_from_str(const char *str)
+{
+ if (str == NULL)
+ return (Slice){ NULL, 0, 0 };
+ return (Slice){ str, 0, strlen(str) };
+}
+
+Slice
+slice_sub(Slice src, int begin, int end)
+{
+ return (Slice){ src.str, src.begin + begin, src.begin + end };
+}
diff --git a/slice.h b/slice.h
new file mode 100644
index 0000000..b15bb54
--- /dev/null
+++ b/slice.h
@@ -0,0 +1,11 @@
+#pragma once
+
+typedef struct {
+ const char *str;
+ int begin;
+ int end;
+} Slice;
+
+Slice slice_print(Slice slice);
+Slice slice_from_str(const char *str);
+Slice slice_sub(Slice src, int begin, int end);