using System; using System.Collections.Generic; using System.Text; namespace YourNamespace { public class PoolList where T : IPoolable { #region Fields List mPoolables = new List(); 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 } }