| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- using System;
- namespace Ryujinx.Memory
- {
- public static class MemoryManagement
- {
- public static IntPtr Allocate(ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.Allocate((IntPtr)size);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.Allocate(size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static IntPtr Reserve(ulong size, bool viewCompatible)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.Reserve((IntPtr)size, viewCompatible);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.Reserve(size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static bool Commit(IntPtr address, ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.Commit(address, (IntPtr)size);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.Commit(address, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static bool Decommit(IntPtr address, ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.Decommit(address, (IntPtr)size);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.Decommit(address, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static void MapView(IntPtr sharedMemory, ulong srcOffset, IntPtr address, ulong size, MemoryBlock owner)
- {
- if (OperatingSystem.IsWindows())
- {
- MemoryManagementWindows.MapView(sharedMemory, srcOffset, address, (IntPtr)size, owner);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- MemoryManagementUnix.MapView(sharedMemory, srcOffset, address, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static void UnmapView(IntPtr sharedMemory, IntPtr address, ulong size, MemoryBlock owner)
- {
- if (OperatingSystem.IsWindows())
- {
- MemoryManagementWindows.UnmapView(sharedMemory, address, (IntPtr)size, owner);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- MemoryManagementUnix.UnmapView(address, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static void Reprotect(IntPtr address, ulong size, MemoryPermission permission, bool forView, bool throwOnFail)
- {
- bool result;
- if (OperatingSystem.IsWindows())
- {
- result = MemoryManagementWindows.Reprotect(address, (IntPtr)size, permission, forView);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- result = MemoryManagementUnix.Reprotect(address, size, permission);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- if (!result && throwOnFail)
- {
- throw new MemoryProtectionException(permission);
- }
- }
- public static bool Free(IntPtr address, ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.Free(address, (IntPtr)size);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.Free(address);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static IntPtr CreateSharedMemory(ulong size, bool reserve)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.CreateSharedMemory((IntPtr)size, reserve);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.CreateSharedMemory(size, reserve);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static void DestroySharedMemory(IntPtr handle)
- {
- if (OperatingSystem.IsWindows())
- {
- MemoryManagementWindows.DestroySharedMemory(handle);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- MemoryManagementUnix.DestroySharedMemory(handle);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static IntPtr MapSharedMemory(IntPtr handle, ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- return MemoryManagementWindows.MapSharedMemory(handle);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- return MemoryManagementUnix.MapSharedMemory(handle, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- public static void UnmapSharedMemory(IntPtr address, ulong size)
- {
- if (OperatingSystem.IsWindows())
- {
- MemoryManagementWindows.UnmapSharedMemory(address);
- }
- else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
- {
- MemoryManagementUnix.UnmapSharedMemory(address, size);
- }
- else
- {
- throw new PlatformNotSupportedException();
- }
- }
- }
- }
|