All pastes #1435797 Raw Edit

Victor

public text v1 · immutable
#1435797 ·published 2009-05-27 03:31 UTC
rendered paste body
using 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

    }
}