void test_ahtable_find_prev() { fprintf(stderr, "finding prev for %zu keys ... \n", k); ahtable_build_index(T); ahtable_iter_t i; ahtable_iter_begin(T, &i, true); value_t* u; const char *key = NULL; char *dkey = NULL; size_t len = 0; while (!ahtable_iter_finished(&i)) { u = ahtable_iter_val(&i); key = ahtable_iter_key(&i, &len); /* increase key last byte by 1 and check result */ dkey = realloc(dkey, len); memcpy(dkey, key, len); ++dkey[len-1]; value_t *fp = NULL; int r = ahtable_find_leq(T, dkey, len, &fp); if (*fp != *u || r != -1) { fprintf(stderr, "[error] ahtable_find_leq should find %lu, " "but found prev=%lu and return -1, returned %d\n", *u, *fp, r); } ahtable_iter_next(&i); } ahtable_iter_free(&i); free(dkey); fprintf(stderr, "done.\n"); }
static void node_build_index(node_ptr node) { /* build index on all ahtable nodes */ if (*node.flag & NODE_TYPE_TRIE) { size_t i; for (i = 0; i < NODE_CHILDS; ++i) { if (i > 0 && node.t->xs[i].t == node.t->xs[i - 1].t) continue; if (node.t->xs[i].t) node_build_index(node.t->xs[i]); } } else { ahtable_build_index(node.b); } }