diff options
author | Warren Dukes <warren.dukes@gmail.com> | 2005-02-24 03:27:19 +0000 |
---|---|---|
committer | Warren Dukes <warren.dukes@gmail.com> | 2005-02-24 03:27:19 +0000 |
commit | 93b27fe8319f1f8d2b4f34bf5540cd4d58b73f80 (patch) | |
tree | 448ab53381f7b797179ea38cc6f362944e647b20 /src/tree.c | |
parent | fad348b285c5a5a9767493cff967da14617d3041 (diff) |
begin tree implementation
git-svn-id: https://svn.musicpd.org/mpd/trunk@2984 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/tree.c')
-rw-r--r-- | src/tree.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/tree.c b/src/tree.c new file mode 100644 index 000000000..1f3b21546 --- /dev/null +++ b/src/tree.c @@ -0,0 +1,52 @@ +#include "tree.h" + +static inline TreeNode * newTreeNode() { + TreeNode * ret = malloc(sizeof(TreeNode)); + + ret->data[0] = NULL; + ret->data[1] = NULL; + + ret->children[0] = NULL; + ret->children[1] = NULL; + ret->children[2] = NULL; + + return ret; +} + +static inline void freeTreeNode(TreeNode * node) { + free(node); +} + +Tree * newTree(TreeFreeDataFunc * freeFunc, TreeCompareDataFunc * compareFunc) { + Tree * ret = malloc(sizeof(Tree)); + + ret->headNode = NULL; + ret->freeFunc = freeFunc; + ret->compareFunc = compareFunc; + + return ret; +} + +void freeTree(Tree * tree) { + TreeIterator * iter = newTreeIterator(tree, POSTORDER); + + TreeNode * node; + + if(data->freeFunc) { + void * data; + + while( ( data = nextTreeIterator(iter) ) ) { + + } + + freeTreeIterator(iter); + + iter = newTreeIterator(tree, POSTORDER); + } + + while( ( node = nextNodeTreeIterator(iter) ) ) { + freeTreeNode(node); + } + + freeTreeIterator(iter); +} |