6
void xc_stack_init(S stack)
10
stack->data = malloc(sizeof(void *) * stack->size);
13
void xc_stack_destroy(S stack)
18
void xc_stack_push(S stack, void *item)
20
if (stack->cnt == stack->size) {
22
stack->data = realloc(stack->data, sizeof(void *) * stack->size);
24
stack->data[stack->cnt++] = item;
27
void* xc_stack_pop(S stack)
29
assert(stack != NULL && stack->size > 0);
30
return stack->data[--stack->cnt];
33
void* xc_stack_top(S stack)
35
assert(stack != NULL && stack->cnt > 0);
36
return stack->data[stack->cnt-1];
39
void* xc_stack_get(S stack, int n)
41
assert(stack != NULL && stack->cnt > 0);
42
return stack->data[n];
45
int xc_stack_size(S stack)
47
assert(stack != NULL);
51
void xc_stack_reverse(S stack)
56
assert(stack != NULL);
57
for (i = 0, j = stack->cnt - 1; i < j; i ++, j --) {
59
stack->data[i] = stack->data[j];