From 7c4c3829c317c053e98cb7ebb7219e7327ef0216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 14 Nov 1998 19:17:33 +0100 Subject: [PATCH] Added quick_pop(). The initial stack size can now be specified to create() and reset(). Rev: lib/modules/Stack.pmod:1.4 --- lib/modules/Stack.pmod | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/modules/Stack.pmod b/lib/modules/Stack.pmod index b57df1b3d4..d6ab90993d 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); } }; -- GitLab