diff options
Diffstat (limited to 'src/stack.c')
-rw-r--r-- | src/stack.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/stack.c b/src/stack.c new file mode 100644 index 0000000..5c4d0ca --- /dev/null +++ b/src/stack.c @@ -0,0 +1,38 @@ +#include "include/stack.h" + +stack_t* stack_init() { + stack_t* stack = emalloc(sizeof(stack_t)); + + stack->sp = 0; + for (int i = 0; i < STACK_MAXLEN; stack->val[i++] = 0); + + return stack; +} + +void stack_destroy(stack_t* stack) { + free(stack); +} + +void stack_push(stack_t* stack, void* val) { + stack->val[stack->sp++] = val; +} + +void* stack_pop(stack_t* stack) { + void* tmpval; + + tmpval = stack->val[--stack->sp]; + stack->val[stack->sp] = NULL; + + return tmpval; +} + +size_t stack_len(stack_t* stack) { + return stack->sp - 1; +} + +void stack_print(stack_t* stack) { + log_inf("stack_print(): %p", stack); + for (int i = stack_len(stack) - 1; i >= 0; --i) { + log_inf("%d: %p", i, stack[i]); + } +} |