package org.jbox2d.pooling; import org.jbox2d.collision.AABB; public class PoolingStackAABB extends PoolingStack<AABB>{ private final AABB[] pool; private int index; private final int size; private final PoolContainer<AABB> container; public PoolingStackAABB(int size) { this.size = size; this.pool = new AABB[size]; this.index = 0; this.container = new PoolContainer<AABB>(); for (int i = 0; i < size; i++) { pool[i] = new AABB(); } } @Override public AABB pop() { assert(index < size) : "End of stack reached, there is probably a leak somewhere"; return pool[index++]; } @Override @SuppressWarnings("fallthrough") public org.jbox2d.pooling.PoolingStack.PoolContainer<AABB> 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; } @Override public void push(int argNum) { index -= argNum; assert (index >= 0) : "Beginning of stack reached, push/pops are unmatched"; } }