#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; }