repo: add readme and split 80col code
This commit is contained in:
parent
86e131db0c
commit
e4f8292477
46
README
Normal file
46
README
Normal 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
|
||||||
|
|
|
@ -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
9
test.c
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user