Пример #1
0
//{{{void wah_uniq_append(uint8_t **w, uint32_t id)
void wah_uniq_append(uint8_t **w, uint32_t id)
{
    uint8_t *w_id = wah_init(id);

    if (*w == NULL) {
        *w = w_id;
    } else {
        uint8_t *r = NULL;
        uint32_t r_size = 0;
        uint32_t resize = wah_or(*w, w_id, &r, &r_size);
        free(*w);
        free(w_id);
        *w = r;
    }
}
Пример #2
0
//{{{void wah_non_leading_union_with_SA(void **R, void *d)
void wah_non_leading_union_with_SA(uint32_t domain, void **R, void *d)
{
    struct wah_bpt_non_leading_data *nld = 
            (struct wah_bpt_non_leading_data *) d;
    if (nld != NULL) {
        if ((nld->SA != NULL)) {
            uint8_t **w = (uint8_t **)R;

            if (*w == NULL)
                *w = wah_init(0);

            uint8_t *r = NULL;
            uint32_t r_size = 0;
            uint32_t resize = wah_or(*w, nld->SA, &r, &r_size);

            free(*w);
            *w = r;
        }
    }
}
Пример #3
0
//{{{void wah_leading_union_with_B(void **R, void *leading)
void wah_leading_union_with_B(uint32_t domain,
                                void **R,
                                void *leading)
{
    struct wah_bpt_leading_data *ld = 
            (struct wah_bpt_leading_data *)leading;

    if ((ld != NULL) && (ld->B != NULL)) {
        uint8_t **w = (uint8_t **)R;

        if (*w == NULL)
            *w = wah_init(0);

        uint8_t *r = NULL;
        uint32_t r_size = 0;
        uint32_t resize = wah_or(*w, ld->B, &r, &r_size);

        free(*w);
        *w = r;
    }
}
Пример #4
0
int main(int argc, char **argv)
{
    WAH_SIZE = 32;
    WAH_MAX_FILL_WORDS = (1<<(WAH_SIZE-1)) - 1;

    uint32_t size = atoi(argv[1]);

    uint32_t *W_1 = (uint32_t *)calloc(size, sizeof(uint32_t));

    uint32_t *W_2 = (uint32_t *)calloc(size, sizeof(uint32_t));

    uint32_t i;

    if (argv[2][0] == 'w') {
        uint8_t *w_2 = NULL;
        uint8_t *w_1 = NULL;

        start();
        for (i = 0; i < size; ++i) {
            W_1[i] = rand();
            wah_uniq_append(&w_1, W_1[i]);
        }
        stop();
        fprintf(stderr, "%lu\t", report());

        start();
        for (i = 0; i < size; ++i) {
            W_2[i] = rand();
            wah_uniq_append(&w_2, W_2[i]);
        }
        stop();
        fprintf(stderr, "%lu\t", report());


        uint8_t *r = NULL;
        uint32_t r_size = 0;

        start();
        uint32_t resize = wah_or(w_1, w_2, &r, &r_size);
        stop();
        fprintf(stderr, "%lu\n", report());
    } else if (argv[2][0] == 'l') {
     
        struct uint32_t_ll *l_1 = NULL;
        struct uint32_t_ll *l_2 = NULL;

        start();
        for (i = 0; i < size; ++i) {
            W_1[i] = rand();
            uint32_t_ll_append(&l_1, W_1[i]);
        }
        stop();
        fprintf(stderr, "%lu\t", report());

        start();
        for (i = 0; i < size; ++i) {
            W_2[i] = rand();
            uint32_t_ll_append(&l_2, W_2[i]);
        }
        stop();
        fprintf(stderr, "%lu\t", report());

        start();
        struct uint32_t_ll_node *curr = l_1->head;
        while (curr != NULL) {
            uint32_t_ll_uniq_append(&l_2, curr->val);
            curr = curr->next;
        }
        stop();
        fprintf(stderr, "%lu\n", report());
    }
}