/// <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"); } } }
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)); }
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)); }
/// <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"); } } }