using System; using System.Collections.Generic; namespace Global.Shared.OcTree { public interface IPoolable { void Reset(); } public class Pool where E : IPoolable { private readonly Func creator; private readonly List pool = new List(); public Pool(Func creator) { this.creator = creator; } public E Obtain() { if (pool.Count <= 0) return creator(); var e = pool[0]; pool.RemoveAt(0); return e; } public void Release(E e) { e.Reset(); pool.Add(e); } } }