package weiss.util; import java.io.Serializable; /** * Stack class. Unlike java.util.Stack, this is not * extended from Vector. This is the minimum respectable * set of operations. */ public class Stack implements Serializable { /** * Constructs an empty stack. */ public Stack( ) { items = new ArrayList( ); } /** * Adds an item to the top of the stack. * @param x the item to add. * @return the item added. */ public AnyType push( AnyType x ) { items.add( x ); return x; } /** * Removes and returns item from the top of the stack. * @return the former top item. * @throws EmptyStackException if stack is empty. */ public AnyType pop( ) { if( isEmpty( ) ) throw new EmptyStackException( ); return items.remove( items.size( ) - 1 ); } /** * Returns item from the top of the stack. * @return the top item. * @throws EmptyStackException if stack is empty. */ public AnyType peek( ) { if( isEmpty( ) ) throw new EmptyStackException( ); return items.get( items.size( ) - 1 ); } /** * Tests if stack is empty. * @return true if the stack is empty; false otherwise. */ public boolean isEmpty( ) { return size( ) == 0; } /** * Returns the size of the stack. * @return the size of the stack. */ public int size( ) { return items.size( ); } public void clear( ) { items.clear( ); } public String toString( ) { StringBuilder result = new StringBuilder( ); for( int i = size( ) - 1; i >= 0; i-- ) result.append( items.get( i ) ); return result.toString( ); } private ArrayList items; }