-
Notifications
You must be signed in to change notification settings - Fork 0
/
stack.inc
105 lines (80 loc) · 2 KB
/
stack.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#if defined _inc_stack
#undef _inc_stack
#endif
#if defined _pawnStack_included
#endinput
#endif
#define _pawnStack_included
#include <vector>
#define INVALID_STACK_ID (Stack:-1)
stock Stack:Stack_New(capacity = -1) {
new Vec:stack;
if(capacity == -1) {
stack = Vec_New();
} else {
stack = Vec_New(capacity);
}
if(stack == INVALID_VECTOR_ID) {
return INVALID_STACK_ID;
}
return Stack:stack;
}
stock Stack_Push(Stack:stack, value) {
if(Vec_Append(Vec:stack, value) != VEC_OK) {
return 1;
}
return 0;
}
stock Stack_PushVec(Stack:stack, Vec:value) {
return Stack_Push(stack, _:value);
}
stock Stack_PushBool(Stack:stack, bool:value) {
return Stack_Push(stack, _:value);
}
stock Stack_PushFloat(Stack:stack, Float:value) {
return Stack_Push(stack, _:value);
}
stock Stack_PushStack(Stack:stack, Stack:value) {
return Stack_Push(stack, _:value);
}
stock Stack_Pop(Stack:stack) {
new val = Vec_GetValue(Vec:stack, Vec_GetLength(Vec:stack)-1);
Vec_RemoveAt(Vec:stack, Vec_GetLength(Vec:stack)-1);
return val;
}
stock Vec:Stack_PopVec(Stack:stack) {
return Stack_Pop(stack);
}
stock bool:Stack_PopBool(Stack:stack) {
return Stack_Pop(stack);
}
stock Float:Stack_PopFloat(Stack:stack) {
return Stack_Pop(stack);
}
stock Stack:Stack_PopStack(Stack:stack) {
return Stack_Pop(stack);
}
stock Stack_Peek(Stack:stack) {
if(Vec_GetLength(Vec:stack) == 0) {
return 0;
}
return Vec_GetValue(Vec:stack, Vec_GetLength(Vec:stack)-1);
}
stock Vec:Stack_PeekVec(Stack:stack) {
return Stack_Peek(stack);
}
stock bool:Stack_PeekBool(Stack:stack) {
return Stack_Peek(stack);
}
stock Float:Stack_PeekFloat(Stack:stack) {
return Stack_Peek(stack);
}
stock Stack:Stack_PeekStack(Stack:stack) {
return Stack_Peek(stack);
}
stock bool:Stack_IsEmpty(Stack:stack) {
return Vec_GetLength(Vec:stack) == 0 ? true : false;
}
stock Stack_Delete(Stack:stack) {
Vec_Delete(Vec:stack);
}