From e5f6c01c2b018ca44f9318a062bfd4607e1a8c32 Mon Sep 17 00:00:00 2001 From: 0xdeadbeer Date: Wed, 28 Aug 2024 20:30:33 +0200 Subject: [PATCH] feat: add streencmp --- README | 14 +++++++++++++- streecmp.c | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/README b/README index 903a3f3..d541e1f 100644 --- a/README +++ b/README @@ -4,6 +4,17 @@ Fast*er* string comparison - an alternative to thousands of strcmp calls + This is an O(n) solution - n being the length of the string to be checked. + A plus is that this method will stay O(n) *no matter the length of the string + nor the number of strings to be checked against*. + + Potential minuses might be the additional memory needed to store the trie + data structure or the computational time required to generate the tree before + utilizing it. Therefore, users are advised to use a secure, fast hashmap + instead of streecmp. streecmp is only applied to specific scenarios where + a rather simple or fast solution for string comparison is required so the + project moves on. + RES: en.wikipedia.org/wiki/Trie RES: en.wikipedia.org/wiki/Suffix_tree RES: en.wikipedia.org/wiki/Radix_tree @@ -48,7 +59,8 @@ LEAKS TODO - * everything done so far + * feat: add length option - streencpy + * feat: ++ strong or loose -- comparison option COMMITS diff --git a/streecmp.c b/streecmp.c index 4a52dae..e7e16b9 100644 --- a/streecmp.c +++ b/streecmp.c @@ -115,3 +115,18 @@ int streecmp(struct nod *nod, char *str) { return streecmp(target, str+1); } + +int streencmp(struct nod *nod, char *str, int len) { + for (int i = 0; i < len; i++) { + struct nod *target = nod->pool[*str]; + if (target == NULL) { + return 0; + } + + if (target->val.cval == '\0') { + return target->val.ival; + } + } + + return 0; +}