diff --git a/lib/modules/Stack.pmod b/lib/modules/Stack.pmod index b57df1b3d42ba7c280c6cf6cec67408ec4456c09..d6ab90993daa677262b0b7c396e6e15eeff8512a 100644 --- a/lib/modules/Stack.pmod +++ b/lib/modules/Stack.pmod @@ -2,12 +2,14 @@ class stack { int ptr; - mixed *arr=allocate(32); + mixed *arr; void push(mixed val) { - if(ptr==sizeof(arr)) arr+=allocate(ptr); - arr[ptr++]=val; + if(ptr == sizeof(arr)) { + arr += allocate(ptr); + } + arr[ptr++] = val; } mixed top() @@ -18,6 +20,21 @@ class stack { error("Stack underflow\n"); } + void quick_pop(void|int val) + { + if (val) { + if (ptr < val) { + ptr = 0; + } else { + ptr -= val; + } + } else { + if (ptr > 0) { + ptr--; + } + } + } + mixed pop(void|int val) { mixed foo; @@ -46,10 +63,15 @@ class stack { return foo; } - void reset() + void reset(int|void initial_size) + { + arr = allocate(initial_size || 32); + ptr = 0; + } + + void create(int|void initial_size) { - arr=allocate(32); - ptr=0; + arr = allocate(initial_size || 32); } };