package aliview; import java.util.Stack; import org.apache.log4j.Logger; public class LimitedStack<T> { private static final Logger logger = Logger.getLogger(LimitedStack.class); Stack<T> stack; int maxSize; int pointer = -1; public LimitedStack(int maxSize){ stack = new Stack<T>(); this.maxSize = maxSize; } public T push(T obj){ // remove everything between this and pointer // logger.info("pointer" + pointer); // logger.info("(stack.size() -1)" + (stack.size() -1)); int diff = Math.abs(pointer - (stack.size()-1)); T retVal = stack.push(obj); if(stack.size() > maxSize){ stack.removeElementAt(0); } pointer = stack.size() - 1; return retVal; } public T pop(){ T popObj = stack.pop(); pointer = stack.size() - 1; return popObj; } public boolean isEmpty(){ return stack.isEmpty(); } public int size(){ return stack.size(); } private boolean rangeCheck(int index){ if(index > -1 && index <= stack.size()){ return true; }else{ return false; } } public boolean hasPrevious(){ return rangeCheck(pointer-1); } public boolean hasNext(){ return rangeCheck(pointer+1); } public T getPreviousState() { pointer = pointer -1; return stack.elementAt(pointer); } public T getNextState() { pointer = pointer +1; return stack.elementAt(pointer); } public void clear() { stack.clear(); } }