aboutsummaryrefslogtreecommitdiff
path: root/strings.c
diff options
context:
space:
mode:
author=2022-05-05 15:23:47 +0200
committer=2022-05-05 15:23:47 +0200
commit6afe3cc8ec6c009a43950bdbe138cbc2d7a88a4d (patch)
tree7c2854537fc1bdf5f5aa8e861cf676204d773967 /strings.c
parent2b1838ecf30fd91575a71b877965ed3363356138 (diff)
downloadsoikk-DB-6afe3cc8ec6c009a43950bdbe138cbc2d7a88a4d.tar.xz
soikk-DB-6afe3cc8ec6c009a43950bdbe138cbc2d7a88a4d.tar.zst
Quality of life changes
Diffstat (limited to 'strings.c')
-rw-r--r--strings.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/strings.c b/strings.c
new file mode 100644
index 0000000..30e00e7
--- /dev/null
+++ b/strings.c
@@ -0,0 +1,55 @@
+#include "db.h"
+
+
+uint16_t len(const char *s){
+ uint16_t l = -1;
+ while(s[++l]);
+ return l;
+}
+
+bool sameStr(const char *s1, const char *s2){
+ uint16_t i1 = 0, i2 = 0;
+ while(s1[i1] && s2[i2] && s1[i1] == s2[i2])
+ ++i1, ++i2;
+ return !s1[i1] && !s2[i2];
+}
+
+
+static int *table(char *y, int n, char sep){
+ int *tb = calloc(n, sizeof(int));
+ if(tb == NULL){
+ fprintf(stderr, "Error callocating array (table)");
+ exit(EXIT_FAILURE);
+ }
+
+ int lSep = n-1;
+ for(int i = n-1; i >= 0; --i){
+ if(y[i] == sep){
+ tb[i] = 1;
+ lSep = i;
+ }else if(y[i] != '\0'){
+ tb[i] = lSep-i;
+ }
+ }
+ return tb;
+}
+
+
+ssize_t strInTags(const char *tags, int n, const char *ndl, int m, char sep){
+ int *tb = table(tags, n, sep);
+
+ for(int i = 0; i < n; ){
+ int j = 0;
+ while(j < m && tags[i+j] == ndl[j]){
+ ++j;
+ }
+ if(j == m){
+ return i;
+ }
+ if(tags[i+j] != ndl[j]){
+ i += tb[i];
+ }
+ }
+ return -1;
+}
+