Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 /// <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);
 }