Exemple #1
0
        /// <summary>
        /// Ensure <see cref="MemoryCopy"/> functionality.
        /// </summary>
        private static void EnsureMemoryCopy()
        {
            if (MemoryCopyPointer == null)
            {
                IntPtr memoryCopyPtr;

                switch (Environment.OSVersion.Platform)
                {
                case PlatformID.Win32Windows:
                case PlatformID.Win32NT:
                case PlatformID.Win32S:
                    memoryCopyPtr = GetProcAddress.GetProcAddressOS.GetProcAddress("msvcrt.dll", "memcpy");
                    if (memoryCopyPtr != IntPtr.Zero)
                    {
                        MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
                        return;
                    }

                    throw new NotSupportedException("no suitable memcpy support");

                case PlatformID.Unix:
                    memoryCopyPtr = GetProcAddress.GetProcAddressOS.GetProcAddress("libc.so.6", "memcpy");
                    if (memoryCopyPtr != IntPtr.Zero)
                    {
                        MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
                        return;
                    }

                    throw new NotSupportedException("no suitable memcpy support");

                default:
                    throw new NotSupportedException("no suitable memcpy support");
                }
            }
        }
        /// <summary>
        /// Ensure <see cref="MemoryCopy"/> functionality.
        /// </summary>
        private static void EnsureMemoryCopy()
        {
            if (MemoryCopyPointer == null)
            {
                IntPtr memoryCopyPtr;

                switch (Platform.CurrentPlatformId)
                {
                case Platform.Id.WindowsNT:
                    memoryCopyPtr = GetProcAddress.GetProcAddressOS.GetProcAddress("msvcrt.dll", "memcpy");
                    if (memoryCopyPtr != IntPtr.Zero)
                    {
                        MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
                        return;
                    }

                    throw new NotSupportedException("no suitable memcpy support");

                case Platform.Id.Linux:
                    memoryCopyPtr = GetProcAddress.GetProcAddressOS.GetProcAddress("libc.so.6", "memcpy");
                    if (memoryCopyPtr != IntPtr.Zero)
                    {
                        MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
                        return;
                    }

                    throw new NotSupportedException("no suitable memcpy support");

                default:
                    throw new NotSupportedException("no suitable memcpy support");
                }
            }
        }
Exemple #3
0
        static ByteUtil()
        {
            var dynamicMethod = new DynamicMethod
                                (
                "MemoryCopy",
                typeof(void),
                new[] { typeof(void *), typeof(void *), typeof(uint) },
                typeof(ByteUtil)
                                );

            var ilGenerator = dynamicMethod.GetILGenerator();

            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldarg_1);
            ilGenerator.Emit(OpCodes.Ldarg_2);

            ilGenerator.Emit(OpCodes.Cpblk);
            ilGenerator.Emit(OpCodes.Ret);

            MemoryCopy = (MemoryCopyDelegate)dynamicMethod.CreateDelegate(typeof(MemoryCopyDelegate));
        }
Exemple #4
0
        static ByteUtil()
        {
            var dynamicMethod = new DynamicMethod
            (
                "MemoryCopy",
                typeof(void),
                new[] { typeof(void*), typeof(void*), typeof(uint) },
                typeof(ByteUtil)
            );

            var ilGenerator = dynamicMethod.GetILGenerator();

            ilGenerator.Emit(OpCodes.Ldarg_0);
            ilGenerator.Emit(OpCodes.Ldarg_1);
            ilGenerator.Emit(OpCodes.Ldarg_2);

            ilGenerator.Emit(OpCodes.Cpblk);
            ilGenerator.Emit(OpCodes.Ret);

            MemoryCopy = (MemoryCopyDelegate)dynamicMethod.CreateDelegate(typeof(MemoryCopyDelegate));
        }
Exemple #5
0
		/// <summary>
		/// Ensure <see cref="MemoryCopy"/> functionality.
		/// </summary>
		private static void EnsureMemoryCopy()
		{
			if (MemoryCopyPointer == null) {
				IntPtr memoryCopyPtr;

				switch (Environment.OSVersion.Platform) {
					case PlatformID.Win32Windows:
					case PlatformID.Win32NT:
					case PlatformID.Win32S:
						memoryCopyPtr = GetProcAddress.GetAddress("msvcrt.dll", "memcpy");
						if (memoryCopyPtr != IntPtr.Zero) {
							MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
							return;
						}
						
						throw new NotSupportedException("no suitable memcpy support");
					case PlatformID.Unix:
						memoryCopyPtr = GetProcAddress.GetAddress("libc.so.6", "memcpy");
						if (memoryCopyPtr != IntPtr.Zero) {
							MemoryCopyPointer = (MemoryCopyDelegate)Marshal.GetDelegateForFunctionPointer(memoryCopyPtr, typeof(MemoryCopyDelegate));
							return;
						}
						
						throw new NotSupportedException("no suitable memcpy support");
					default:
						throw new NotSupportedException("no suitable memcpy support");
				}
			}
		}