package org.jbox2d.pooling; public abstract class MutableStack<E> { private E[] stack; private int index; private int size; public MutableStack(){ index = 0; size = 0; } protected void initStack(int argSize){ index = argSize - 1; size = argSize; stack = createArray(argSize, null); } protected abstract E[] createArray(int argSize, E[] argOld); public final E pop(){ if(index >= size){ stack = createArray(size*2, stack); size = stack.length; } return stack[index++]; } public final void push(E argObject){ assert(index > 0); stack[--index] = argObject; } }