#include #include #include "stack.h" static int growStack (stack *); int initStack (stack **inst) { *inst = calloc (1, sizeof(stack)); (*inst)->items = calloc (DEFAULT_SIZE_STACK, sizeof(void *)); (*inst)->size = DEFAULT_SIZE_STACK; return 0; } int destroyStack(stack **inst) { free ((*inst)->items); free (*inst); *inst = NULL; return 0; } int pushStack (stack *inst, void *item) { if (!inst) return -1; if (!item) return -1; if (inst->count == inst->size) growStack(inst); inst->items[inst->count++] = item; return 0; } int popStack (stack *inst, void **item) { if (!inst) return -1; if (!item) return -1; if (!inst->count) return -1; *item = inst->items[inst->count-1]; inst->count--; return 0; } int peek (stack *inst, void **item) { if (!inst) return -1; if (!item) return -1; if (!inst->count) return -1; *item = inst->items[inst->count-1]; return 0; } static int growStack (stack *inst) { void **newItems; if (!inst) return -1; newItems = realloc(inst->items, GROWTH_STACK * inst->size); inst->size *= GROWTH_STACK; inst->items = newItems; return 0; }