Replace Stack List internal usage by a Vector (lighter)
[cgds.git] / src / Stack.c
CommitLineData
a7868768
BA
1/**
2 * @file Stack.c
3 */
4
5#include "cgds/Stack.h"
6
7void _stack_init(Stack* stack, size_t dataSize)
8{
a7868768 9 stack->dataSize = dataSize;
10b9967a 10 _vector_init(stack->array, dataSize);
a7868768
BA
11}
12
13Stack* _stack_new(size_t dataSize)
14{
15 Stack* stack = (Stack*) safe_malloc(sizeof (Stack));
16 _stack_init(stack, dataSize);
17 return stack;
18}
19
20Stack* stack_copy(Stack* stack)
21{
10b9967a
BA
22 Stack* stackCopy = (Stack*) safe_malloc(sizeof (Stack));
23 stackCopy->dataSize = stack->dataSize;
24 Vector* arrayCopy = vector_copy(stack->array);
25 stackCopy->array = arrayCopy;
a7868768
BA
26 return stackCopy;
27}
28
29Bool stack_empty(Stack* stack)
30{
10b9967a 31 return vector_empty(stack->array);
a7868768
BA
32}
33
34UInt stack_size(Stack* stack)
35{
10b9967a 36 return vector_size(stack->array);
a7868768
BA
37}
38
39void _stack_push(Stack* stack, void* data)
40{
10b9967a 41 _vector_push(stack->array, data);
a7868768
BA
42}
43
44void* _stack_top(Stack* stack)
45{
10b9967a 46 return _vector_get(stack->array, vector_size(stack->array)-1);
a7868768
BA
47}
48
49void stack_pop(Stack* stack)
50{
10b9967a 51 vector_pop(stack->array);
a7868768
BA
52}
53
54void stack_clear(Stack* stack)
55{
10b9967a 56 vector_clear(stack->array);
a7868768
BA
57}
58
59void stack_destroy(Stack* stack)
60{
61 stack_clear(stack);
62 safe_free(stack);
63}