package com.netthreads.osc.common.collections;
import java.util.ArrayList;
import java.util.List;
/**
* Object pool.
*
* @param <T>
*/
abstract public class Pool<T>
{
private List<T> queue;
/**
* Construct pool.
*
*/
public Pool(int initialCapacity)
{
queue = new ArrayList<T>(initialCapacity);
}
/**
* Implement in sub-classes.
*
* @return Instance of T.
*/
abstract protected T newObject();
/**
* Return an instance of pooled object.
*
* @return instance of pooled object.
*/
public T obtain()
{
T object = null;
if (queue.isEmpty())
{
object = newObject();
}
else
{
object = queue.remove(0);
}
return object;
}
/**
* Return object to the pool.
*
* @param object
*/
public void free(T object)
{
queue.add(object);
}
/**
* Return current queue size.
*
* @return The current queue size.
*/
public int size()
{
return queue.size();
}
}