/// <inheritdoc/> public override T Rent(bool resetObject = false) { ThrowForBadAlloc(); var node = _freeTs; _freeTs = node!.Next; var obj = _pool[node.Value]; if (resetObject && obj is IResettable resettable) { resettable.Reset(); } return obj; }
/// <summary> /// /// </summary> /// <param name="elementCount"></param> /// <param name="pin"></param> public PoolAllocator(int elementCount, bool pin = false) { if (elementCount < 0) { ThrowHelper.ThrowArgumentOutOfRangeException(nameof(elementCount)); } _pool = DefaultPool.Rent(elementCount); _freeTs = new LinkedNode<int>(0); var node = _freeTs; for (var i = 1; i < _pool.Length; i++) { node.Next = new LinkedNode<int>(i); node = node.Next; } // https://github.com/dotnet/runtime/issues/36183 if (pin) { ThrowHelper.ThrowNotSupportedException(); } }