/*******************************************************************************
* Copyright (c) 2010 Oak Ridge National Laboratory.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.csstudio.swt.xygraph.undo;
import java.util.LinkedList;
import java.util.NoSuchElementException;
/**A stack with limited size. If the stack is full,
* the oldest element will be removed when new element was pushed.
* @author Xihui Chen
*/
public class SizeLimitedStack<T> {
private LinkedList<T> list = new LinkedList<T>();
private int sizeLimit;
/**Constructor
* @param sizeLimit the maximum number of elements in the stack.
* If the stack is full,
* the oldest element will be removed when new element was pushed.
*/
public SizeLimitedStack(int sizeLimit) {
this.sizeLimit = sizeLimit;
}
/**
* Pushes an item onto the top of this stack.
* @param e the item to be pushed onto this stack.
*/
public void push(T e){
if(list.size() >= sizeLimit)
list.removeFirst();
list.addLast(e);
}
/**
* Removes the object at the top of this stack and returns that
* object as the value of this function.
*
* @return The object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws NoSuchElementException if this list is empty
*/
public T pop(){
return list.removeLast();
}
/**
* Looks at the object at the top of this stack without removing it
* from the stack.
*
* @return the object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @throws NoSuchElementException if this list is empty
*/
public T peek(){
return list.getLast();
}
/**
* Empty the stack.
*/
public void clear(){
list.clear();
}
/**Return an array of all elements in the stack.
* The oldest element is the first element of the returned array.
* @return the array contained all elements in the stack.
*/
public Object[] toArray(){
return list.toArray();
}
/**Returns the number of elements in this stack.
* @return the number of elements in this stack
*/
public int size(){
return list.size();
}
}