using System.Collections; using System.Collections.Generic; using UnityEngine; namespace BF { public class BFStackPool { private BFNode top; private int count; public int Count { get { return count; } } public BFStackPool() { top = null; count = 0; } public BFStackPool(int count) { for (int i = 0; i < count; i++) { var node = new BFNode(); Push(node); } } public BFNode Alloc(T item) { var node = SafePop(); node.item = item; return node; } public void Free(BFNode node) { node.Invalidate(); Push(node); } public BFNode SafePop() { if (count == 0) return new BFNode(); var temp = top; top = top.next; --count; return temp; } public void Push(BFNode node) { var temp = top; node.next = top; top = node; ++count; } public void Clear() { top = null; count = 0; } } }