package aurelienribon.tweenengine; import java.util.ArrayList; /** * A light pool of objects that can be resused to avoid allocation. * Based on Nathan Sweet pool implementation */ abstract class Pool<T> { private final ArrayList<T> objects; private final Callback<T> callback; protected abstract T create(); public Pool(int initCapacity, Callback<T> callback) { this.objects = new ArrayList<T>(initCapacity); this.callback = callback; } public T get() { T obj = objects.isEmpty() ? create() : objects.remove(objects.size()-1); if (callback != null) callback.onUnPool(obj); return obj; } public void free(T obj) { if (!objects.contains(obj)) { if (callback != null) callback.onPool(obj); objects.add(obj); } } public void clear() { objects.clear(); } public int size() { return objects.size(); } public void ensureCapacity(int minCapacity) { objects.ensureCapacity(minCapacity); } public interface Callback<T> { public void onPool(T obj); public void onUnPool(T obj); } }