stack_str

Stack for strings
git clone git://www.tkruger.se/stack_str.git
Log | Files | Refs | README

stack_str.c (781B)


      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 }