74 lines
2.8 KiB
Plaintext
74 lines
2.8 KiB
Plaintext
+==============+
|
|
| streecmp |
|
|
+==============+
|
|
|
|
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
|
|
RES: facweb.cs.depaul.edu/mobasher/classes/csc575/Suffix_Trees/index.html
|
|
|
|
TECHNICALS
|
|
|
|
struct nod
|
|
* data structure that represents a node of the tree
|
|
void frenod(struct nod *nod)
|
|
* free memory of node and all of its children
|
|
struct nod *allocnod(void)
|
|
* allocate memory for a node and its pool size for
|
|
character hashmap
|
|
* returns: poiner to said node or NULL if function fails
|
|
struct nod *mknod(struct nod *nod, int loc)
|
|
* create a child node below given parent node
|
|
* loc is the character of the node (consult source code
|
|
of mkstr for more information)
|
|
* returns: pointer to said node or NULL if function fails
|
|
int mkstr(struct nod *nod, 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, 0 if string
|
|
is already inside tree, or -1 if function fails
|
|
int gentree(struct nod *nod, char *strs, char *delim)
|
|
* generate tree from character seperated strings
|
|
* if delim is NULL, then "\n" is assumed
|
|
* warning: seperation character is '\n'
|
|
* returns: 0 if ok or -1 if function fails
|
|
int streecmp(struct nod *nod, char *str)
|
|
* traverse tree and search for str
|
|
* returns: id of string or 0 if there is no match
|
|
|
|
test.c provides a practical example for comparing against
|
|
HTTP header fields
|
|
|
|
LEAKS
|
|
|
|
LEAKS file contains the most recent valgrind memory leaks
|
|
dump ran on test.c.
|
|
|
|
TODO
|
|
|
|
* feat: add length option - streencpy
|
|
* feat: ++ strong or loose -- comparison option
|
|
|
|
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
|
|
|