aboutsummaryrefslogtreecommitdiff
path: root/lib/eztree.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/eztree.c')
-rw-r--r--lib/eztree.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/eztree.c b/lib/eztree.c
new file mode 100644
index 0000000..ba8506a
--- /dev/null
+++ b/lib/eztree.c
@@ -0,0 +1,77 @@
+// Include eztree header file
+#include <dtree/eztree.h>
+
+dtree *eztree_new_literal(const char *string)
+{
+ dtree *node;
+ dtree_malloc(&node);
+ dtree_addliteral(node, string);
+ return node;
+}
+
+
+dtree *eztree_new_numeric(const long num)
+{
+ dtree *node;
+ dtree_malloc(&node);
+ dtree_addnumeral(node, num);
+ return node;
+}
+
+
+dtree *eztree_new_pair(const char *kdata, void *vdata, short type)
+{
+ dtree *root, *key, *val;
+
+ /* Allocate nodes */
+ dtree_malloc(&root);
+ dtree_addpair(root, &key, &val);
+
+ /* Fill the data */
+ dtree_addliteral(key, kdata);
+ switch(type) {
+ case EZTREE_LITERAL:
+ dtree_addliteral(val, (char*) vdata);
+ break;
+
+ case EZTREE_NUMERIC:
+ // FIXME: This might be dangerous on 32bit
+ dtree_addnumeral(val, (long) vdata);
+ break;
+
+ case EZTREE_NESTED:
+ {
+ dtree *tmp;
+ dtree_addlist(val, &tmp);
+
+ /* Manually override data */
+ memcpy(val->payload.list[0], vdata, sizeof(vdata));
+ break;
+ }
+
+ default: break;
+ }
+
+ return root;
+}
+
+//
+//dtree *eztree_new_list(dtree **list, size_t size)
+//{
+// /* Prepare our buffer */
+// memset(list, 0, sizeof(dtree*) * size);
+//
+// /* Prepare root node */
+// dtree *root;
+// dtree_malloc(&root);
+//
+// /* Add apropriate number of children to root node */
+// int i;
+// for(i = 0; i < size; i++) {
+// dtree *tmp;
+// dtree_addlist(root, &tmp);
+// list[i] = tmp;
+// }
+//
+// return root;
+//} \ No newline at end of file