using System; using System.Collections.Generic; namespace FlowerPower { public class ObjectPool where T : new() { private Stack m_Stack = new(); private Action m_ActionOnNew; private Action m_ActionOnGet; private Action m_ActionOnRelease; public int CountAll { get; private set; } public ObjectPool() { } public ObjectPool(Action actionOnGet, Action actionOnRelease) { m_ActionOnGet = actionOnGet; m_ActionOnRelease = actionOnRelease; } public T Get() { T element; if (m_Stack.Count == 0) { element = new T(); CountAll++; if (m_ActionOnNew != null) { m_ActionOnNew(element); } } else { element = m_Stack.Pop(); } if (m_ActionOnGet != null) m_ActionOnGet(element); return element; } public void Release(T element) { if (m_ActionOnRelease != null) { m_ActionOnRelease(element); } m_Stack.Push(element); } public void Dispose() { m_Stack.Clear(); m_Stack = null; m_ActionOnNew = null; m_ActionOnGet = null; m_ActionOnRelease = null; } } }