aboutsummaryrefslogtreecommitdiff
path: root/project/JavaCommon/src/com/modulus/common/collections/ArrayStack.java
blob: 17dfcb1f644768e61af932666cb4be0895de2b6d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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();
	}
}