diff options
Diffstat (limited to 'tests/test60.c')
-rw-r--r-- | tests/test60.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/test60.c b/tests/test60.c new file mode 100644 index 000000000..138c0da86 --- /dev/null +++ b/tests/test60.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "uthash.h" + +/* hash of hashes */ +typedef struct item { + char name[10]; + struct item *sub; + int val; + UT_hash_handle hh; +} item_t; + +int main() +{ + item_t *item1, *item2, *tmp1, *tmp2; + item_t *items=NULL; + + /* make initial element */ + item_t *i = (item_t *)malloc(sizeof(*i)); + if (i == NULL) { + exit(-1); + } + strcpy(i->name, "bob"); + i->sub = NULL; + i->val = 0; + HASH_ADD_STR(items, name, i); + + /* add a sub hash table off this element */ + item_t *s = (item_t *)malloc(sizeof(*s)); + if (s == NULL) { + exit(-1); + } + strcpy(s->name, "age"); + s->sub = NULL; + s->val = 37; + HASH_ADD_STR(i->sub, name, s); + + /* iterate over hash elements, printing and freeing them */ + HASH_ITER(hh, items, item1, tmp1) { + HASH_ITER(hh, item1->sub, item2, tmp2) { + printf("$items{%s}{%s} = %d\n", item1->name, item2->name, item2->val); + HASH_DEL(item1->sub, item2); + free(item2); + } + HASH_DEL(items, item1); + free(item1); + } + + return 0; +} |