diff options
Diffstat (limited to 'src/stack.c')
-rw-r--r-- | src/stack.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/stack.c b/src/stack.c new file mode 100644 index 0000000..4898d83 --- /dev/null +++ b/src/stack.c @@ -0,0 +1,34 @@ +#include "./include/stack.h" +#include "./include/hash_table.h" +#include "./include/macros.h" +#include <stdlib.h> + +stack_t *init_stack(int ht_size) { + stack_t *s = (stack_t *)malloc(sizeof(stack_t)); + if (s == NULL) + die("malloc on stack"); + s->stack = NULL; + s->cur = -1; + return s; +} + +void stack_push(stack_t *s, hash_table_t *h) { + if (s->stack == NULL) { + s->stack = malloc(sizeof(hash_table_t *)); + if (s->stack == NULL) + die("malloc on stack within stack"); + } else { + s->stack = realloc(s->stack, 2 + s->cur); + } + s->cur++; + s->stack[s->cur] = h; +} + +hash_table_t *stack_peek(stack_t *s) { return s->stack[s->cur]; } + +hash_table_t *stack_pop(stack_t *s) { + hash_table_t *h = s->stack[s->cur]; + s->stack[s->cur] = NULL; + s->cur--; + return h; +} |