internal static void GetBytes(AbstractByteBuffer buf, byte *addr, int index, IByteBuffer dst, int dstIndex, int length) { Contract.Requires(dst != null); if (MathUtil.IsOutOfBounds(dstIndex, length, dst.Capacity)) { ThrowHelper.ThrowIndexOutOfRangeException_DstIndex(dstIndex); } if (dst.HasMemoryAddress) { IntPtr ptr = dst.AddressOfPinnedMemory(); if (ptr != IntPtr.Zero) { PlatformDependent.CopyMemory(addr, (byte *)(ptr + dstIndex), length); } else { fixed(byte *destination = &dst.GetPinnableMemoryAddress()) { PlatformDependent.CopyMemory(addr, destination + dstIndex, length); } } } else if (dst.HasArray) { PlatformDependent.CopyMemory(addr, dst.Array, dst.ArrayOffset + dstIndex, length); } else { dst.SetBytes(dstIndex, buf, index, length); } }
protected void CheckDstIndex(int index, int length, int dstIndex, int dstCapacity) { this.CheckIndex(index, length); if (MathUtil.IsOutOfBounds(dstIndex, length, dstCapacity)) { ThrowHelper.ThrowIndexOutOfRangeException_DstIndex(dstIndex, length, dstCapacity); } }
internal static void GetBytes(AbstractByteBuffer buf, byte *addr, int index, byte[] dst, int dstIndex, int length) { Contract.Requires(dst != null); if (MathUtil.IsOutOfBounds(dstIndex, length, dst.Length)) { ThrowHelper.ThrowIndexOutOfRangeException_DstIndex(dstIndex); } if (length != 0) { PlatformDependent.CopyMemory(addr, dst, dstIndex, length); } }