aboutsummaryrefslogtreecommitdiff
path: root/lib/eztree.c
blob: ba8506afd8836a9b3c69712ce730bcc1937c22c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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;
//}