public ReadOnlyBuffer(OwnedMemory <byte> data, int offset, int length) { if (data == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.data); } if (offset < 0) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.offset); } if (length < 0 || length > data.Length - offset) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.length); } BufferStart = new Position(data, offset); BufferEnd = new Position(data, offset + length); }
public sealed override MemoryHandle Pin(int byteOffset = 0) { unsafe { Retain(); // this checks IsDisposed try { if ((IntPtr.Size == 4 && (uint)byteOffset > (uint)_array.Length * (uint)Unsafe.SizeOf <T>()) || (IntPtr.Size != 4 && (ulong)byteOffset > (uint)_array.Length * (ulong)Unsafe.SizeOf <T>())) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.byteOffset); } GCHandle handle = GCHandle.Alloc(_array, GCHandleType.Pinned); return(new MemoryHandle(this, ((byte *)handle.AddrOfPinnedObject()) + byteOffset, handle)); } catch { Release(); throw; } } }