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 */
void lis_clear(PLIS pl) { assert(lis_valid(pl)); lis_destroy(pl); lis_init(pl); assert(lis_valid(pl)); } /* lis_clear */
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; }
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 */
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 */
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; }