private void Return(IPoolable item) { Debug.Assert(item != null); T poolable1 = (T)item; T previousNode = (T)item.PreviousNode; T nextNode = (T)item.NextNode; if (previousNode != null) { previousNode.NextNode = nextNode; } if (nextNode != null) { nextNode.PreviousNode = previousNode; } if (item == _headNode) { _headNode = nextNode; } if (item == _tailNode) { _tailNode = previousNode; } if (_tailNode != null) { _tailNode.NextNode = null; } _freeItems.AddToBack(poolable1); ItemReturned?.Invoke((T)item); }
/// <summary> Adds object to the pool. Call this when you don't need it anymore. </summary> public void Return([NotNull] T item) { ItemReturned.Call(item); _items.Push(item); }