Exemple #1
0
void test_list(void)
{
    SECTION_BEGIN("List");
    List list; 
    printf("list init\n");
    list_init(&list, sizeof(int));
    assert(list_length(&list) == 0);
    printf("list adding\n");
    int n = 1;
    list_addfront(&list, &n);
    n = 2; list_addfront(&list, &n);
    n = 3; list_addfront(&list, &n);
    n = 10; list_addback(&list, &n);
    assert(list_length(&list) == 4);
    Iterator front_it;
    Iterator back_it;
    list_first(&list, &front_it);
    list_next(&list, &front_it);
    list_last(&list, &back_it);
    list_moveafter(&list, &front_it, &back_it);
    list_remove(&list, &front_it);
    Iterator it;
    list_first(&list, &it);
    printf("list iterating\n");
    while(iterator_value(&it))
    {
        printf("val: %d\n", *((int*)iterator_value(&it)));
        list_next(&list, &it);
    }
    assert(list_datasize(&list) == sizeof(int) * 3);
    int *buf = alloca(list_datasize(&list));
    list_tobuffer(&list, buf);
    
    int i;
    for(i = 0; i < 3; i++)
    {
        printf("bufn: %d\n", buf[i]);
    }
    SECTION_END("List");
}
Exemple #2
0
uint8_t*
lupdate_freqcount(uint8_t* bwt,uint32_t size,uint8_t* output,uint64_t* c)
{
    uint32_t chr,i;
    int32_t cost;
    list_t* lst;
    lnode_t* found,*tmp;

    lst = lupdate_createlist();

    *c = 0;
    for (i=0; i<size; i++) {
        chr = bwt[i];

        found = list_find(lst,chr,&cost);

        output[i] = (uint8_t) cost;
        *c += cost;

        /* reorder */
        found->freq++;
        tmp = found->prev;
        while (tmp != NULL && found->freq > tmp->freq) {
            tmp = tmp->prev;
        }

        if (tmp == NULL) {
            list_movetofront(lst,found);
        } else {
            list_moveafter(found,tmp);
        }
    }

    list_free(lst);

    return output;
}