protected void CheckSrcIndex(int index, int length, int srcIndex, int srcCapacity) { this.CheckIndex(index, length); if (MathUtil.IsOutOfBounds(srcIndex, length, srcCapacity)) { ThrowHelper.ThrowIndexOutOfRangeException_SrcIndex(srcIndex, length, srcCapacity); } }
internal static void SetBytes(AbstractByteBuffer buf, byte *addr, int index, IByteBuffer src, int srcIndex, int length) { Contract.Requires(src != null); if (MathUtil.IsOutOfBounds(srcIndex, length, src.Capacity)) { ThrowHelper.ThrowIndexOutOfRangeException_SrcIndex(srcIndex); } if (length != 0) { if (src.HasMemoryAddress) { IntPtr ptr = src.AddressOfPinnedMemory(); if (ptr != IntPtr.Zero) { PlatformDependent.CopyMemory((byte *)(ptr + srcIndex), addr, length); } else { fixed(byte *source = &src.GetPinnableMemoryAddress()) { PlatformDependent.CopyMemory(source + srcIndex, addr, length); } } } else if (src.HasArray) { PlatformDependent.CopyMemory(src.Array, src.ArrayOffset + srcIndex, addr, length); } else { src.GetBytes(srcIndex, buf, index, length); } } }