BufferExtensions
using System;
using System.Buffers;
namespace Azure.Storage
{
internal static class BufferExtensions
{
private class DisposableRentedArray<T> : IDisposable
{
private ArrayPool<T> _pool;
private T[] _rentedArray;
public DisposableRentedArray(ArrayPool<T> pool, T[] rentedArray)
{
_pool = pool;
_rentedArray = rentedArray;
}
public void Dispose()
{
_pool.Return(_rentedArray, false);
}
}
public static IDisposable RentDisposable<T>(this ArrayPool<T> pool, int minimumLength, out T[] array)
{
array = pool.Rent(minimumLength);
return new DisposableRentedArray<T>(pool, array);
}
public static IDisposable RentAsMemoryDisposable<T>(this ArrayPool<T> pool, int minimumLength, out Memory<T> memory)
{
if (minimumLength == 0) {
memory = Memory<T>.Empty;
return null;
}
T[] array;
IDisposable result = pool.RentDisposable(minimumLength, out array);
memory = new Memory<T>(array, 0, minimumLength);
return result;
}
public static IDisposable RentAsSpanDisposable<T>(this ArrayPool<T> pool, int minimumLength, out Span<T> span)
{
if (minimumLength == 0) {
span = Span<T>.Empty;
return null;
}
T[] array;
IDisposable result = pool.RentDisposable(minimumLength, out array);
span = new Span<T>(array, 0, minimumLength);
return result;
}
public static T[] Clear<T>(this T[] array)
{
for (int i = 0; i < array.Length; i++) {
array[i] = default(T);
}
return array;
}
}
}