aoc-2021/src/stack.c

36 lines
907 B
C

#include "string.h"
#include "stack.h"
stack_ret_t stack_init(stack_t * stack, void * data, size_t max_data_size, size_t element_size) {
stack->data = data;
stack->top_of_stack = -1;
stack->max_data_size = max_data_size;
stack->elem_size = element_size;
return STACK_OK;
}
stack_ret_t stack_push(stack_t * stack, void * element) {
if ((stack->top_of_stack != -1) && (stack->top_of_stack >= stack->max_data_size)) {
return STACK_FULL;
}
memcpy(stack->data + (stack->top_of_stack * stack->elem_size), element, stack->elem_size);
stack->top_of_stack++;
return STACK_OK;
}
stack_ret_t stack_pop(stack_t * stack, void * store_to) {
if (stack->top_of_stack < 0) {
return STACK_EMPTY;
}
memcpy(store_to, stack->data + ((stack->top_of_stack - 1) * stack->elem_size), stack->elem_size);
stack->top_of_stack--;
return STACK_OK;
}