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