mirror of https://github.com/SixLabors/ImageSharp
13 changed files with 78 additions and 81 deletions
@ -0,0 +1,50 @@ |
|||||
|
using System; |
||||
|
|
||||
|
namespace SixLabors.ImageSharp.Memory |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// Contains <see cref="Buffer{T}"/> and <see cref="ManagedByteBuffer"/>
|
||||
|
/// </summary>
|
||||
|
public partial class ArrayPoolMemoryManager |
||||
|
{ |
||||
|
private class Buffer<T> : IBuffer<T> |
||||
|
where T : struct |
||||
|
{ |
||||
|
private readonly ArrayPoolMemoryManager memoryManager; |
||||
|
|
||||
|
private readonly int length; |
||||
|
|
||||
|
public Buffer(byte[] data, int length, ArrayPoolMemoryManager memoryManager) |
||||
|
{ |
||||
|
this.memoryManager = memoryManager; |
||||
|
this.Data = data; |
||||
|
this.length = length; |
||||
|
} |
||||
|
|
||||
|
protected byte[] Data { get; private set; } |
||||
|
|
||||
|
public Span<T> Span => this.Data.AsSpan().NonPortableCast<byte, T>().Slice(0, this.length); |
||||
|
|
||||
|
public void Dispose() |
||||
|
{ |
||||
|
if (this.Data == null) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
this.memoryManager.pool.Return(this.Data); |
||||
|
this.Data = null; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private class ManagedByteBuffer : Buffer<byte>, IManagedByteBuffer |
||||
|
{ |
||||
|
public ManagedByteBuffer(byte[] data, int length, ArrayPoolMemoryManager memoryManager) |
||||
|
: base(data, length, memoryManager) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public byte[] Array => this.Data; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,10 @@ |
|||||
|
namespace SixLabors.ImageSharp.Memory |
||||
|
{ |
||||
|
internal class BasicByteBuffer : BasicArrayBuffer<byte>, IManagedByteBuffer |
||||
|
{ |
||||
|
internal BasicByteBuffer(byte[] array) |
||||
|
: base(array) |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,12 +0,0 @@ |
|||||
namespace SixLabors.ImageSharp.Memory |
|
||||
{ |
|
||||
internal class ManagedByteBuffer : Buffer<byte>, IManagedByteBuffer |
|
||||
{ |
|
||||
internal ManagedByteBuffer(byte[] array, int length, MemoryManager memoryManager) |
|
||||
: base(array, length, memoryManager) |
|
||||
{ |
|
||||
} |
|
||||
|
|
||||
public byte[] Array => this.array; |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue