/// <inheritdoc /> public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None) { while (operatingThread != Thread.CurrentThread && operatingThread != null) { } Guard.MustBeGreaterThanOrEqualTo(length, 0, nameof(length)); ArrayPool <byte> pool = this.GetArrayPool(length); byte[] byteArray = pool.Rent(length); if (RawData != null && RawData.Length > 0) { int copyLength = Math.Min(RawData.Length, byteArray.Length); Array.Copy(RawData, 0, byteArray, 0, copyLength); int count = cache.Length - copyLength; if (count > 0) { byte[] cache = RawData; RawData = new byte[count]; Array.Copy(cache, copyLength, RawData, 0, RawData.Length); } else { RawData = null; } } var buffer = new ManagedByteBuffer(byteArray, length, pool); if (options == AllocationOptions.Clean) { buffer.GetSpan().Clear(); } return(buffer); }
/// <inheritdoc /> internal override IManagedByteBuffer AllocateManagedByteBuffer(int length, bool clear) { ArrayPool <byte> pool = this.GetArrayPool(length); byte[] byteArray = pool.Rent(length); var buffer = new ManagedByteBuffer(byteArray, length, pool); if (clear) { buffer.Clear(); } return(buffer); }
/// <inheritdoc /> public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None) { ArrayPool <byte> pool = this.GetArrayPool(length); byte[] byteArray = pool.Rent(length); var buffer = new ManagedByteBuffer(byteArray, length, pool); if (options == AllocationOptions.Clean) { buffer.GetSpan().Clear(); } return(buffer); }
/// <inheritdoc /> public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None) { Guard.MustBeGreaterThanOrEqualTo(length, 0, nameof(length)); ArrayPool <byte> pool = this.GetArrayPool(length); byte[] byteArray = pool.Rent(length); var buffer = new ManagedByteBuffer(byteArray, length, pool); if (options == AllocationOptions.Clean) { buffer.GetSpan().Clear(); } return(buffer); }