package loon.action;
import loon.utils.TArray;
abstract class ActionTweenPool<T> {
public interface Callback<T> {
public void onPool(T obj);
public void onUnPool(T obj);
}
private final TArray<T> _objects;
private final Callback<T> _callback;
public ActionTweenPool(int initCapacity, Callback<T> _callback) {
this._objects = new TArray<T>(initCapacity);
this._callback = _callback;
}
protected abstract T create();
public T get() {
T obj = null;
try {
obj = _objects.isEmpty() ? create() : _objects.removeIndex(0);
} catch (Exception e) {}
if (obj == null) {
obj = create();
}
if (_callback != null){
_callback.onUnPool(obj);
}
return obj;
}
public void free(T obj) {
if (obj == null) return;
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 resize(int minCapacity) {
_objects.ensureCapacity(minCapacity);
}
}