36 lines
907 B
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;
|
|
}
|