mirror of https://github.com/SixLabors/ImageSharp
3 changed files with 127 additions and 0 deletions
@ -0,0 +1,60 @@ |
|||
// Copyright (c) Six Labors.
|
|||
// Licensed under the Apache License, Version 2.0.
|
|||
|
|||
using System; |
|||
using System.Buffers; |
|||
|
|||
namespace SixLabors.ImageSharp.Memory |
|||
{ |
|||
/// <summary>
|
|||
/// A custom <see cref="MemoryManager{T}"/> that can wrap a rawpointer to a buffer of a specified type.
|
|||
/// </summary>
|
|||
/// <typeparam name="T">The value type to use when casting the wrapped <see cref="Memory{T}"/> instance.</typeparam>
|
|||
/// <remarks>This manager doesn't own the memory buffer that it points to.</remarks>
|
|||
internal sealed unsafe class UnmanagedMemoryManager<T> : MemoryManager<T> |
|||
where T : unmanaged |
|||
{ |
|||
/// <summary>
|
|||
/// The pointer to the memory buffer.
|
|||
/// </summary>
|
|||
private readonly void* pointer; |
|||
|
|||
/// <summary>
|
|||
/// The length of the memory area.
|
|||
/// </summary>
|
|||
private readonly int length; |
|||
|
|||
/// <summary>
|
|||
/// Initializes a new instance of the <see cref="UnmanagedMemoryManager{T}"/> class.
|
|||
/// </summary>
|
|||
/// <param name="pointer">The pointer to the memory buffer.</param>
|
|||
/// <param name="length">The length of the memory area.</param>
|
|||
public UnmanagedMemoryManager(void* pointer, int length) |
|||
{ |
|||
this.pointer = pointer; |
|||
this.length = length; |
|||
} |
|||
|
|||
/// <inheritdoc/>
|
|||
protected override void Dispose(bool disposing) |
|||
{ |
|||
} |
|||
|
|||
/// <inheritdoc/>
|
|||
public override Span<T> GetSpan() |
|||
{ |
|||
return new Span<T>(this.pointer, this.length); |
|||
} |
|||
|
|||
/// <inheritdoc/>
|
|||
public override MemoryHandle Pin(int elementIndex = 0) |
|||
{ |
|||
return new MemoryHandle(((T*)this.pointer) + elementIndex); |
|||
} |
|||
|
|||
/// <inheritdoc/>
|
|||
public override void Unpin() |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue