|
|
@@ -0,0 +1,63 @@
|
|
|
+#include <ds/avltree.h>
|
|
|
+#include <ds/err.h>
|
|
|
+
|
|
|
+extern func_malloc ds_malloc;
|
|
|
+extern func_free ds_free;
|
|
|
+
|
|
|
+
|
|
|
+ds_avl_tree_t * ds_avl_tree_new(func_destroyer destroyer, func_comparer comparer)
|
|
|
+{
|
|
|
+ ds_avl_tree_t * tree = (ds_avl_tree_t*) ds_malloc(sizeof(ds_avl_tree_t));
|
|
|
+ if(!tree) {
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ tree->size = 0;
|
|
|
+ tree->root = NULL;
|
|
|
+ tree->destroyer = destroyer ? destroyer : ds_cb_default_destroyer;
|
|
|
+ tree->comparer = comparer ? comparer : ds_cb_default_comparer;
|
|
|
+ return tree;
|
|
|
+}
|
|
|
+
|
|
|
+int ds_avl_tree_init(ds_avl_tree_t *tree, func_destroyer destroyer, func_comparer comparer)
|
|
|
+{
|
|
|
+ tree->size = 0;
|
|
|
+ tree->root = NULL;
|
|
|
+ tree->destroyer = destroyer ? destroyer : ds_cb_default_destroyer;
|
|
|
+ tree->comparer = comparer ? comparer : ds_cb_default_comparer;
|
|
|
+ return DS_ERR_OK;
|
|
|
+}
|
|
|
+
|
|
|
+void ds_avl_tree_destroy(ds_avl_tree_t *tree, int free_tree)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+int ds_avl_tree_insert(ds_avl_tree_t *tree, const ds_data_t data);
|
|
|
+int ds_avl_tree_remove(ds_avl_tree_t *tree, const ds_data_t data);
|
|
|
+int ds_avl_tree_lookup(const ds_avl_tree_t *tree, ds_data_t* data);
|
|
|
+
|
|
|
+inline int ds_avl_tree_size(const ds_avl_tree_t *tree)
|
|
|
+{
|
|
|
+ return tree->size;
|
|
|
+}
|
|
|
+
|
|
|
+int ds_avl_tree_traversal(const ds_avl_tree_t *tree, func_each fn)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+int __insert_left(ds_avl_tree_t *tree, const ds_data_t data)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+int __insert_right(ds_avl_tree_t *tree, const ds_data_t data)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+int __destroy_left(ds_avl_tree_t *tree, ds_avl_node_t *node)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+int __destroy_right(ds_avl_tree_t *tree, ds_avl_node_t *node)
|
|
|
+{
|
|
|
+
|
|
|
+}
|