stack_str.c (780B)
1 #include "stack_str.h" 2 3 void stack_str_init(stack_str *d) { 4 d->nmemb = 0; 5 d->alloc = BASE_STACK_STR_SIZE; 6 7 d->data = calloc(d->alloc, sizeof(*(d->data))); 8 } 9 10 void stack_str_clear(stack_str *d) { 11 d->nmemb = 0; 12 free(d->data); 13 d->data = NULL; 14 } 15 16 void stack_str_push(stack_str *d, char *x) { 17 if (d->alloc <= d->nmemb) { 18 d->alloc <<= 1; 19 d->data = realloc(d->data, d->alloc * sizeof(*(d->data))); 20 } 21 22 d->data[d->nmemb] = x; 23 d->nmemb++; 24 } 25 26 char *stack_str_get(const stack_str *d, const size_t i) { return d->data[i]; } 27 28 char *stack_str_getlast(const stack_str *d) { 29 return stack_str_get(d, d->nmemb - 1); 30 } 31 32 char *stack_str_pop(stack_str *d) { 33 if (d->nmemb == 0) 34 return STACK_STR_EMPTY_POP; 35 char *r = stack_str_getlast(d); 36 d->nmemb--; 37 return r; 38 }