diff options
Diffstat (limited to 'misc.c')
| -rw-r--r-- | misc.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -0,0 +1,42 @@ +/* + * misc.c: miscellaneous useful items + */ + +#include "buttress.h" + +struct stackTag { + void **data; + int sp; + int size; +}; + +stack stk_new(void) { + stack s; + + s = smalloc(sizeof(*s)); + s->sp = 0; + s->size = 0; + s->data = NULL; + + return s; +} + +void stk_free(stack s) { + sfree(s->data); + sfree(s); +} + +void stk_push(stack s, void *item) { + if (s->size <= s->sp) { + s->size = s->sp + 32; + s->data = srealloc(s->data, s->size * sizeof(*s->data)); + } + s->data[s->sp++] = item; +} + +void *stk_pop(stack s) { + if (s->sp > 0) + return s->data[--s->sp]; + else + return NULL; +} |