repo: add readme and split 80col code

This commit is contained in:
Kevin J. 2024-08-25 14:19:42 +02:00
parent 86e131db0c
commit e4f8292477
3 changed files with 56 additions and 5 deletions

46
README Normal file
View File

@ -0,0 +1,46 @@
+==============+
| streecmp |
+==============+
Fast*er* string comparison - an alternative to thousands of strcmp calls
RES: en.wikipedia.org/wiki/Trie
RES: en.wikipedia.org/wiki/Suffix_tree
RES: en.wikipedia.org/wiki/Radix_tree
RES: facweb.cs.depaul.edu/mobasher/classes/csc575/Suffix_Trees/index.html
TECHNICALS
struct nod
* data structure that represents a node of the tree
struct nod *mknod(struct nod *prnt)
* create a child node below given parent node
* returns: pointer to said node or NULL if fails
int mkstr(struct nod *rot, char *str)
* fit string into tree if it does not already exist
* warning: string has to be null-byte terminated
* returns: the assigned ID of the string or -1 if fails
int gentree(struct nod *rot, char *strs)
* generate tree from character seperated strings
* warning: seperation character is '\n'
* returns: 0 if ok or -1 if fails
int streecmp(struct nod *rot, char *str)
* traverse tree and search for str
* returns: id of string or 0 if there is no match
TODO
* Characters "hashmap" to remove linear checking of children nodes
* Remove memory leaks
* Add alloc/free functions
* NULL checking
COMMITS
Each commit is prefixed with an indicator token of what the change is
*mostly* about. List of tokens is:
* repo: change docs or code style
* feat: implement new change
* fix: implement fix for a bug

View File

@ -12,7 +12,8 @@ struct nod *mknod(struct nod *prnt) {
prnt->pool_size++; prnt->pool_size++;
prnt->pool = (struct nod *) realloc(prnt->pool, sizeof(struct nod)*prnt->pool_size); prnt->pool = (struct nod *) realloc(prnt->pool,
sizeof(struct nod)*prnt->pool_size);
if (prnt->pool == NULL) { if (prnt->pool == NULL) {
return NULL; return NULL;
} }
@ -57,7 +58,8 @@ int gentree(struct nod *rot, char *strs) {
return -1; return -1;
} }
for (char *tok = strtok(strs_cpy, "\n"); tok != NULL; tok = strtok(NULL, "\n")) { for (char *tok = strtok(strs_cpy, "\n"); tok != NULL; tok
= strtok(NULL, "\n")) {
int ret = mkstr(rot,tok); int ret = mkstr(rot,tok);
if (ret < 0) { if (ret < 0) {
return -1; return -1;

9
test.c
View File

@ -135,12 +135,15 @@ int main(void) {
fprintf(stdout, "------------------------\n"); fprintf(stdout, "------------------------\n");
int cnt = 1; int cnt = 1;
for (char *tok = strtok(strs_cpy, "\n"); tok != NULL; tok = strtok(NULL, "\n"), cnt++) { for (char *tok = strtok(strs_cpy, "\n"); tok != NULL; tok
= strtok(NULL, "\n"), cnt++) {
int found = streecmp(rot, tok); int found = streecmp(rot, tok);
if (found == cnt) { if (found == cnt) {
fprintf(stdout, "[+][%d\t] Success: could find '%s' in tree\n", cnt, tok); fprintf(stdout, "[+][%d\t] Success: could find"
"'%s' in tree\n", cnt, tok);
} else { } else {
fprintf(stderr, "[-][%d\t] Error: could not find '%s' in tree\n", cnt, tok); fprintf(stderr, "[-][%d\t] Error: could not find"
"'%s' in tree\n", cnt, tok);
} }
} }