summaryrefslogtreecommitdiff
path: root/src/utils/rbtree.h
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-05-10 00:16:42 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-05-10 00:16:42 +0000
commit419e9a6766e9676fc1905291eeccaf655c8d5b09 (patch)
tree33f02eaf082449ca4f8b330c19c96138f5537e7c /src/utils/rbtree.h
parent2777a04ed2ba4fd36138b991d66a32a283361f7e (diff)
downloadlibparserutils-419e9a6766e9676fc1905291eeccaf655c8d5b09.tar.gz
libparserutils-419e9a6766e9676fc1905291eeccaf655c8d5b09.tar.bz2
Have some generic dictionary implementation.
Even comes with testcases, which is nice. svn path=/trunk/libparserutils/; revision=4138
Diffstat (limited to 'src/utils/rbtree.h')
-rw-r--r--src/utils/rbtree.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/utils/rbtree.h b/src/utils/rbtree.h
new file mode 100644
index 0000000..0225c92
--- /dev/null
+++ b/src/utils/rbtree.h
@@ -0,0 +1,40 @@
+/*
+ * This file is part of LibParserUtils.
+ * Licensed under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org>
+ */
+
+#ifndef parserutils_utils_rbtree_h_
+#define parserutils_utils_rbtree_h_
+
+#include <parserutils/errors.h>
+#include <parserutils/functypes.h>
+
+struct parserutils_rbtree;
+typedef struct parserutils_rbtree parserutils_rbtree;
+
+typedef int (*parserutils_rbtree_cmp)(const void *a, const void *b);
+typedef void (*parserutils_rbtree_del)(void *key, void *value, void *pw);
+typedef void (*parserutils_rbtree_print)(const void *key, const void *value,
+ int depth);
+
+parserutils_rbtree *parserutils_rbtree_create(parserutils_rbtree_cmp cmp,
+ parserutils_alloc alloc, void *pw);
+void parserutils_rbtree_destroy(parserutils_rbtree *tree,
+ parserutils_rbtree_del destructor, void *pw);
+
+parserutils_error parserutils_rbtree_insert(parserutils_rbtree *tree,
+ void *key, void *value, void **oldvalue);
+parserutils_error parserutils_rbtree_find(parserutils_rbtree *tree,
+ const void *key, void **value);
+parserutils_error parserutils_rbtree_delete(parserutils_rbtree *tree,
+ const void *key, void **intkey, void **value);
+
+#ifndef NDEBUG
+void parserutils_rbtree_dump(parserutils_rbtree *tree,
+ parserutils_rbtree_print print);
+#endif
+
+#endif
+