package org.jbox2d.pooling;
import java.lang.reflect.Array;
public class PoolingStack<E>
{
private final E[] pool;
private int index;
private final int size;
private final PoolContainer<E> container;
@SuppressWarnings("unchecked")
public PoolingStack(Class<E> argClass, int argStackSize)
{
size= argStackSize;
pool= (E[]) Array.newInstance(argClass, argStackSize);
for (int i= 0; i < argStackSize; i++)
{
System.out.println("adgadg");
try
{
pool[i]= argClass.newInstance();
}
catch (InstantiationException e)
{
System.err.println("Error creating pooled object " + argClass.getCanonicalName());
e.printStackTrace();
}
catch (IllegalAccessException e)
{
System.err.println("Error creating pooled object " + argClass.getCanonicalName());
e.printStackTrace();
}
}
index= 0;
container= new PoolContainer<E>();
}
public final E pop()
{
assert (index < size) : "End of stack reached, there is probably a leak somewhere";
return pool[index++];
}
public final PoolContainer<E> pop(int argNum)
{
assert (index + argNum < size) : "End of stack reached, there is probably a leak somewhere";
switch (argNum)
{
case 9:
container.p8= pool[index++];
case 8:
container.p7= pool[index++];
case 7:
container.p6= pool[index++];
case 6:
container.p5= pool[index++];
case 5:
container.p4= pool[index++];
case 4:
container.p3= pool[index++];
case 3:
container.p2= pool[index++];
case 2:
container.p1= pool[index++];
case 1:
container.p0= pool[index++];
break;
default:
assert (false);
}
return container;
}
public final void push(int argNum)
{
index-= argNum;
assert (index >= 0) : "Beginning of stack reached, push/pops are unmatched";
}
public static class PoolContainer<E>
{
public static final int MAX_MEMBERS= 9;
public E p0, p1, p2, p3, p4, p5, p6, p7, p8;
public void populate(E[] argRay)
{
p0= argRay[0];
p1= argRay[1];
p2= argRay[2];
p3= argRay[3];
p4= argRay[4];
p5= argRay[5];
p6= argRay[6];
p7= argRay[7];
p8= argRay[8];
}
}
}