Beispiel #1
0
        public static void ArrayCopy(ulong[] src, int srcOffset, byte[] dst, int dstOffset, int count)
        {
            Contract.Requires <ArgumentNullException>(src != null);
            Contract.Requires <ArgumentOutOfRangeException>(srcOffset >= 0);
            Contract.Requires <ArgumentNullException>(dst != null);
            Contract.Requires <ArgumentOutOfRangeException>(dstOffset >= 0);

            Contract.Requires <ArgumentOutOfRangeException>(ArrayCopyToBytesBoundsValidate(
                                                                src, srcOffset, dst, dstOffset, count, sizeof(ulong)));

            var memcpy = new MemoryCopier <byte, ulong>(dummy: false);

            memcpy.CopyInternal(dst, dstOffset, src, srcOffset, count);
        }
Beispiel #2
0
        static Program()
        {
            var m2 = new DynamicMethod(
                "memcpy",
                MethodAttributes.Public | MethodAttributes.Static,
                CallingConventions.Standard,
                typeof(void),
                new[] { typeof(byte *), typeof(byte *), typeof(uint) },
                typeof(Program),
                false);
            var il2 = m2.GetILGenerator();

            il2.Emit(OpCodes.Ldarg_0); // dst address
            il2.Emit(OpCodes.Ldarg_1); // src address
            il2.Emit(OpCodes.Ldarg_2); // number of bytes
            il2.Emit(OpCodes.Cpblk);
            il2.Emit(OpCodes.Ret);

            MemcpyDelegate = (MemoryCopier)m2.CreateDelegate(typeof(MemoryCopier));
        }
Beispiel #3
0
        public override void CopyFromStorage(IntPtr dst, long storageIndex, long byteCount)
        {
            var srcPtr = PtrAtElement(storageIndex);

            MemoryCopier.Copy(dst, srcPtr, (ulong)byteCount);
        }
Beispiel #4
0
        public override void CopyToStorage(long storageIndex, IntPtr src, long byteCount)
        {
            var dstPtr = PtrAtElement(storageIndex);

            MemoryCopier.Copy(dstPtr, src, (ulong)byteCount);
        }