aboutsummaryrefslogtreecommitdiff
path: root/project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java
diff options
context:
space:
mode:
authorJoshua Rahm <joshua.rahm@colorado.edu>2015-01-27 18:40:32 -0700
committerJoshua Rahm <joshua.rahm@colorado.edu>2015-01-27 18:40:32 -0700
commit5f3fb9afece2125cbeba79d61a8d88460b7878d7 (patch)
treeb0e1e60bae9927a9449561bf7fe9431a54d12be9 /project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java
downloadLegacyQBar-5f3fb9afece2125cbeba79d61a8d88460b7878d7.tar.gz
LegacyQBar-5f3fb9afece2125cbeba79d61a8d88460b7878d7.tar.bz2
LegacyQBar-5f3fb9afece2125cbeba79d61a8d88460b7878d7.zip
initial commit
Diffstat (limited to 'project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java')
-rw-r--r--project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java101
1 files changed, 101 insertions, 0 deletions
diff --git a/project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java b/project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java
new file mode 100644
index 0000000..17dfcb1
--- /dev/null
+++ b/project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java
@@ -0,0 +1,101 @@
+package com.modulus.common.collections;
+
+import java.io.Serializable;
+
+/**
+ * Class which uses an array to be used to
+ * implement a stack.
+ *
+ * This class is most efficient for
+ * nearly every purpose.
+ *
+ * @author jrahm
+ *
+ * @param <T> the type this stack holds
+ */
+public class ArrayStack<T> implements Stack<T>, Serializable{
+
+ private Object[] arr;
+ private int pointer = -1;
+
+ /**
+ * Creates a new ArrayStack with a
+ * default starting size of 10
+ */
+ public ArrayStack(){
+ this(10);
+ }
+
+ /**
+ * Creates a new ArrayStack with
+ * a default starting size of <code>size</code>
+ * @param size
+ */
+ public ArrayStack( int size ){
+ arr = new Object[size];
+ }
+
+ /**
+ * Ensures that this ArrayStack has enough space
+ * to store <code>size</code> number of elements.
+ *
+ * @param size the number of elements needed to store
+ */
+ public void ensureSize( int size ){
+
+ if(arr.length > size)
+ return;
+
+ Object[] tmp = new Object[size*2];
+ for ( int i = 0;i < arr.length; i ++ ){
+ tmp[i] = arr[i];
+ }
+
+ arr = tmp;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return pointer == -1;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T peek() {
+ return (T)arr[pointer];
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T pop() {
+ return (T) arr[ pointer -- ];
+ }
+
+ @Override
+ public void push(T obj) {
+ pointer ++;
+ this.ensureSize(pointer);
+ arr[pointer] = obj;
+ }
+
+ @Override
+ public int size() {
+ return pointer + 1;
+ }
+
+ @Override
+ public void clear(){
+ pointer = 0;
+ }
+
+ @Override
+ public String toString(){
+ StringBuffer buf = new StringBuffer("[");
+
+ for( int i = pointer; i >= 1; i --)
+ buf.append(arr[i] + ", ");
+
+ buf.append(arr[0] + "]");
+ return buf.toString();
+ }
+}