Exemplo n.º 1
0
Arquivo: lis.c Projeto: yumetodo/lis
lis_bool lis_construct(PLIS pl, size_t data_size,
                       size_t num_items, const void *items)
{
    PNOD pn;
    size_t i;
    char *p;
    LIS_STATUS_INIT(ret, false);

    assert(pl != NULL);
    lis_init(pl);

#ifdef LIS_QUICK_BUT_RISKY
    lis_resize(pl, num_items, NULL, data_size);
#else
    if (lis_resize(pl, num_items, NULL, data_size))
#endif
    {
        pn = pl->first;
        i = 0;
        p = (char *)items;
        while (pn != NULL)
        {
            memcpy(nod_data(pn), &p[i * data_size], data_size);
            ++i;
        }
        LIS_STATUS_SET(ret, true);
    }

    LIS_STATUS_RETURN(ret);
} /* lis_construct */
Exemplo n.º 2
0
Arquivo: lis.c Projeto: yumetodo/lis
void lis_clear(PLIS pl)
{
    assert(lis_valid(pl));
    lis_destroy(pl);
    lis_init(pl);
    assert(lis_valid(pl));
} /* lis_clear */
Exemplo n.º 3
0
void ls_push ( lisStack *cs, int *m )
{
   lis *c;
   c=(lis*)calloc(1,sizeof(lis));
   lis_init(c,m,cs->top);
   cs->cur=cs->top=c;
   ++cs->count;
}
Exemplo n.º 4
0
Arquivo: lis.c Projeto: yumetodo/lis
PLIS lis_new(void)
{
    PLIS pl = (PLIS)malloc(sizeof(LIS));
    if (pl != NULL)
    {
        lis_init(pl);
        assert(lis_valid(pl));
    }
    else
    {
        /* status bad */
        lis_status_bad(NULL);
    }
    return pl;
} /* lis_new */
Exemplo n.º 5
0
Arquivo: lis.c Projeto: yumetodo/lis
lis_bool lis_assign(PLIS pl, size_t count, const void *data, size_t data_size)
{
    LIS lis;
    LIS_STATUS_INIT(ret, false);

    assert(lis_valid(pl));
    lis_init(&lis);

#ifdef LIS_QUICK_BUT_RISKY
    lis_resize(&lis, count, data, data_size);
#else
    if (lis_resize(&lis, count, data, data_size))
#endif
    {
        lis_swap(&lis, pl);
        lis_destroy(&lis);
        LIS_STATUS_SET(ret, true);
    }

    assert(lis_valid(pl));
    LIS_STATUS_RETURN(ret);
} /* lis_assign */
Exemplo n.º 6
0
Arquivo: lis.c Projeto: yumetodo/lis
    int main(void)
    {
        LIS lis1, lis2;
        long n;
        PNOD pn;
        size_t siz = sizeof(long);

        lis_init(&lis1);
        lis_init(&lis2);

        n = 1;
        lis_push_back(&lis1, &n, siz);
        n = 2;
        lis_push_back(&lis1, &n, siz);
        n = 0;
        lis_push_front(&lis1, &n, siz);

        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        pn = lis1.first;

        n = 0;
        assert(memcmp(nod_data(pn), &n, siz) == 0);
        pn = pn->next;
        n = 1;
        assert(memcmp(nod_data(pn), &n, siz) == 0);
        pn = pn->next;
        n = 2;
        assert(memcmp(nod_data(pn), &n, siz) == 0);
        pn = pn->next;
        assert(pn == NULL);

        assert(lis_is_sorted(&lis1, compare_long));

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        lis_pop_front(&lis1);

        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        n = 4;
        lis_push_front(&lis1, &n, siz);
        n = 9;
        lis_push_back(&lis1, &n, siz);

        lis_copy(&lis2, &lis1);

        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        lis_clear(&lis2);

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        n = 2;
        lis_push_front(&lis2, &n, siz);
        n = 4;
        lis_push_back(&lis2, &n, siz);
        n = 4;
        lis_push_back(&lis2, &n, siz);

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        lis_unique(&lis2, compare_long);

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        lis_reverse(&lis2);

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        n = 999;
        lis_insert(&lis2, lis2.last, 4, &n, siz);

        printf("lis2: ");
        lis_foreach(&lis2, print_long);
        puts("");

        lis_copy(&lis1, &lis2);
        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        lis_sort(&lis1, compare_long);

        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        lis_sort(&lis2, compare_long);
        lis_merge(&lis1, &lis2, compare_long);

        printf("lis1: ");
        lis_foreach(&lis1, print_long);
        puts("");

        lis_destroy(&lis1);
        lis_destroy(&lis2);

        return 0;
    }