rendered paste bodyusing System;
using System.Collections.Generic;
using System.Text;
namespace YourNamespace
{
public class PoolList<T> where T : IPoolable
{
#region Fields
List<T> mPoolables = new List<T>();
int mNextAvailable = -1;
#endregion
#region Methods
public void AddToPool(T particleToAdd)
{
int index = mPoolables.Count;
if(mNextAvailable == -1)
{
mNextAvailable = index;
}
mPoolables.Add(particleToAdd);
particleToAdd.Index = index;
particleToAdd.Used = false;
}
public T GetNextAvailable()
{
if (mNextAvailable == -1)
return default(T);
T returnReference = mPoolables[mNextAvailable];
returnReference.Used = true;
// find next available
int count = mPoolables.Count;
mNextAvailable = -1;
for (int i = returnReference.Index + 1; i < count; i++)
{
if (mPoolables[i].Used == false)
{
mNextAvailable = i;
break;
}
}
return returnReference;
}
public void MakeUnused(T particleToMakeUnused)
{
if (mNextAvailable == -1 || particleToMakeUnused.Index < mNextAvailable)
{
mNextAvailable = particleToMakeUnused.Index;
}
particleToMakeUnused.Used = false;
}
#endregion
}
}