Example #1
0
        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);
        }
Example #2
0
            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;
                    }
                }
            }