package stack;
public class StackImpl implements Stack {
/*@ spec_public */ private int maxSize = 50;
private int[] internalStack;
/*@ spec_public */ private int stackCounter; //-RAC@ in count;
@SuppressWarnings("unchecked")
public StackImpl() {
internalStack = new int[maxSize];
stackCounter = 0;
}
//@ ensures \result == stackCounter;
//@ pure
//@ helper
public int count() {
return stackCounter;
}
//@ pure
public int itemAt(int i) {
return internalStack[i-1];
}
//@ pure
public boolean isEmpty() {
return internalStack.length == 0;
}
public boolean push(int item) {
if(stackCounter + 1 > maxSize) return false;
internalStack[stackCounter] = item;
stackCounter++;
return true;
}
public int top() {
return internalStack[stackCounter-1];
}
public boolean remove() {
if(stackCounter == 0) return false;
stackCounter--;
return true;
}
public static void main(String[] args) {
Stack s = new StackImpl();
s.push(2);
s.push(2);
s.push(2);
System.out.println(s.itemAt(1));
System.out.println(s.itemAt(2));
System.out.println(s.itemAt(3));
}
}