1/*
2 * stack.c
3 *
4 *  Author: mozman
5 *  Copyright (c) 2010-2013 by Manfred Moitzi
6 *  License: MIT-License
7 */
8
9#include "ctrees.h"
10#include "stack.h"
11
12extern node_stack_t *
13stack_init(int size)
14{
15	node_stack_t *stack;
16
17	stack = PyMem_Malloc(sizeof(node_stack_t));
18	stack->stack = PyMem_Malloc(sizeof(node_t *) * size);
19	stack->size = size;
20	stack->stackptr = 0;
21	return stack;
22}
23
24extern void
25stack_delete(node_stack_t *stack)
26{
27	PyMem_Free(stack->stack);
28	PyMem_Free(stack);
29}
30
31extern void
32stack_push(node_stack_t *stack, node_t *node)
33{
34	stack->stack[stack->stackptr++] = node;
35	if (stack->stackptr >= stack->size) {
36		stack->size *= 2;
37		stack->stack = PyMem_Realloc(stack->stack,
38				sizeof(node_t *) * stack->size);
39	}
40}
41
42extern node_t *
43stack_pop(node_stack_t *stack)
44{
45	return (stack->stackptr > 0) ? stack->stack[--stack->stackptr] : NULL;
46}
47
48extern int
49stack_is_empty(node_stack_t *stack)
50{
51	return (stack->stackptr == 0);
52}
53
54extern void
55stack_reset(node_stack_t *stack)
56{
57	stack->stackptr = 0;
58}
59