From a2671839daddfaaec63f43132854c606c556558a Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Fri, 5 Apr 2024 18:05:56 +0200 Subject: Add virtual memory API --- deimos/core/os_win32.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'deimos/core/os_win32.cpp') diff --git a/deimos/core/os_win32.cpp b/deimos/core/os_win32.cpp index 1c6b664..d848530 100644 --- a/deimos/core/os_win32.cpp +++ b/deimos/core/os_win32.cpp @@ -8,7 +8,7 @@ namespace deimos { -class Win32OsConsoleApiImpl : public OsConsoleApi +class Win32ConsoleApiImpl : public OsConsoleApi { HANDLE m_stdout; HANDLE m_stderr; @@ -24,7 +24,7 @@ class Win32OsConsoleApiImpl : public OsConsoleApi } public: - Win32OsConsoleApiImpl() : + Win32ConsoleApiImpl() : m_stdout{::GetStdHandle(STD_OUTPUT_HANDLE)}, m_stderr{::GetStdHandle(STD_ERROR_HANDLE)} {} @@ -35,7 +35,7 @@ public: } }; -class Win32OsDllApiImpl : public OsDllApi +class Win32DllApiImpl : public OsDllApi { public: OsDll* Open(gsl::czstring name) override @@ -49,16 +49,42 @@ public: } }; +class Win32VirtualMemoryApiImpl : public OsVirtualMemoryApi +{ +public: + gsl::owner Map(int64_t size) override + { + return ::VirtualAlloc(nullptr, (SIZE_T)size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + } + + void Unmap(gsl::owner ptr) override + { + ::VirtualFree(ptr, 0, MEM_RELEASE); + } + + gsl::owner Reserve(int64_t size) override + { + return ::VirtualAlloc(nullptr, (SIZE_T)size, MEM_RESERVE, PAGE_READWRITE); + } + + void Commit(void* ptr, int64_t size) override + { + ::VirtualAlloc(ptr, (SIZE_T)size, MEM_COMMIT, PAGE_READWRITE); + } +}; + class Win32OsApiImpl : public OsApi { - Win32OsConsoleApiImpl m_console_api; - Win32OsDllApiImpl m_dll_api; + Win32ConsoleApiImpl m_console_api; + Win32DllApiImpl m_dll_api; + Win32VirtualMemoryApiImpl m_virtual_memory_api; public: Win32OsApiImpl() { console = &m_console_api; dll = &m_dll_api; + virtual_memory = &m_virtual_memory_api; } }; -- cgit