Пример #1
0
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");
}
Пример #2
0
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);
    }
}