aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/util/Stack.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/util/Stack.java')
-rw-r--r--libjava/java/util/Stack.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/libjava/java/util/Stack.java b/libjava/java/util/Stack.java
new file mode 100644
index 0000000..bc45888
--- /dev/null
+++ b/libjava/java/util/Stack.java
@@ -0,0 +1,74 @@
+/* Copyright (C) 1998, 1999 Cygnus Solutions
+
+ This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+details. */
+
+package java.util;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date August 20, 1998.
+ */
+/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
+ * "The Java Language Specification", ISBN 0-201-63451-1
+ * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+ * Status: Believed complete and correct
+ */
+
+public class Stack extends Vector
+{
+ // Could use Vector methods internally for the following methods
+ // but have used Vector fields directly for efficiency (i.e. this
+ // often reduces out duplicate bounds checking).
+
+ public boolean empty()
+ {
+ return elementCount == 0;
+ }
+
+ public synchronized Object peek()
+ {
+ if (elementCount == 0)
+ throw new EmptyStackException();
+
+ return elementData[elementCount - 1];
+ }
+
+ public synchronized Object pop()
+ {
+ if (elementCount == 0)
+ throw new EmptyStackException();
+
+ Object obj = elementData[--elementCount];
+
+ // Set topmost element to null to assist the gc in cleanup
+ elementData[elementCount] = null;
+ return obj;
+ }
+
+ public Object push(Object obj)
+ {
+ // When growing the Stack, use the Vector routines in case more
+ // memory is needed.
+ // Note: spec indicates that this method *always* returns obj passed in!
+
+ addElement(obj);
+ return obj;
+ }
+
+ public synchronized int search(Object obj)
+ {
+ // Return the position of obj on the stack as measured from the top;
+ // i.e. the top element is 1, the next element down is 2, etc.
+ // If obj is not on the stack, return -1
+
+ for (int i = elementCount-1; i >=0; --i)
+ if (elementData[i].equals(obj))
+ return elementCount - i;
+
+ return -1;
+ }
+}