void hashtable_iter(struct hashtable *h, void (*iterf)(void *)) { struct entry *e, *f; struct entry **table = h->table; for (int i = 0; i < h->tablelength; i++) { e = table[i]; while (NULL != e) { f = e; e = e->next; iterf(f->v); } } }
static void test_dict(void) { DictObject *mp = dict_cnew(10000, 0, 0, 0, 0, 0, 0, 0); //DictObject *mp = dict_new(); char keybuf[100]; size_t valuebuf[] = { 1 }; dict_add(mp, "a", valuebuf); dict_del(mp, "a"); dict_add(mp, "b", valuebuf); dict_del(mp, "b"); dict_add(mp, "c", valuebuf); dict_del(mp, "c"); dict_add(mp, "d", valuebuf); dict_del(mp, "d"); dict_add(mp, "e", valuebuf); dict_del(mp, "e"); dict_add(mp, "xffff", valuebuf); *valuebuf = 123456789; dict_set(mp, "test", valuebuf); DictObject *copy = dict_copy(mp); dict_print_by_value_desc(copy); fprintf(stdout, "===above is copy===\n"); dict_free(copy); *valuebuf = 1; size_t *vp; // while (fscanf(stdin, "%s", keybuf) == 1) { // vp = dict_get(mp, keybuf); // if (vp) // *vp += 1; // else // dict_add(mp, keybuf, valuebuf); // } // this is another faster version while (fscanf(stdin, "%s", keybuf) == 1) { vp = dict_fget(mp, keybuf); *vp += 1; } *valuebuf = 123456789; dict_set(mp, "the", valuebuf); *valuebuf = 145678999; dict_set(mp, "xxx", valuebuf); dict_del(mp, "xxx"); DictObject *mp2 = dict_new(); *valuebuf = 99999999; dict_set(mp2, "xiangnan", valuebuf); *valuebuf = 89999999; dict_add(mp2, "laoma", valuebuf); dict_update(mp, mp2); dict_free(mp2); //dict_print_by_value_desc(mp); dict_print(mp); void *key, *value; IterObject *dio = iter(mp); printf("\ntest iterw...\n"); while(iterw(dio, &key)) { value = dict_get(mp, key); fprintf(stdout, "%s\t%u\n", (char*)key, *(size_t*)value); } *valuebuf = 9888888; dict_set(mp, "emacs", valuebuf); iterf(dio); printf("\nnow test dict_iterkv...\n"); while(dict_iterkv(dio, &key, &value)) { fprintf(stdout, "%s\t%u\n", (char*)key, *(size_t*)value); } free(dio); dict_clear(mp); dict_clear(mp); //just for test dict_free(mp); }