예제 #1
0
        internal static object Allocate(Type typeToAllocate)
        {
            MyGenericObjectPool objectPool      = null;
            CleanerDelegate     cleanerDelegate = null;
            MyTuple <MyGenericObjectPool, CleanerDelegate> poolDelegatePair;

            if (m_poolsByType.TryGetValue(typeToAllocate, out poolDelegatePair))
            {
                objectPool      = poolDelegatePair.Item1;
                cleanerDelegate = poolDelegatePair.Item2;
            }
            else
            {
                Debug.Fail("No type registered for " + typeToAllocate.ToString());
                return(null);
            }

            object allocatedObject = null;

            if (objectPool.AllocateOrCreate(out allocatedObject))
            {
                cleanerDelegate(allocatedObject);
            }

            return(allocatedObject);
        }