diff options
author | Lioncash <mathew1800@gmail.com> | 2020-11-18 01:58:41 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2020-11-18 02:08:20 +0100 |
commit | b3c8997829ed986c948d195bc1e7c8f66c42755e (patch) | |
tree | 9be666d43f15154ee3df2001ced3972cc31a99d7 /src/common | |
parent | page_table: Add missing doxygen parameters to Resize() (diff) | |
download | yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar.gz yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar.bz2 yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar.lz yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar.xz yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.tar.zst yuzu-b3c8997829ed986c948d195bc1e7c8f66c42755e.zip |
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/page_table.cpp | 2 | ||||
-rw-r--r-- | src/common/page_table.h | 10 | ||||
-rw-r--r-- | src/common/virtual_buffer.cpp | 4 | ||||
-rw-r--r-- | src/common/virtual_buffer.h | 23 |
4 files changed, 30 insertions, 9 deletions
diff --git a/src/common/page_table.cpp b/src/common/page_table.cpp index e5d3090d5..bccea0894 100644 --- a/src/common/page_table.cpp +++ b/src/common/page_table.cpp @@ -8,7 +8,7 @@ namespace Common { PageTable::PageTable() = default; -PageTable::~PageTable() = default; +PageTable::~PageTable() noexcept = default; void PageTable::Resize(std::size_t address_space_width_in_bits, std::size_t page_size_in_bits, bool has_attribute) { diff --git a/src/common/page_table.h b/src/common/page_table.h index a5be7a668..9754fabf9 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h @@ -4,6 +4,8 @@ #pragma once +#include <tuple> + #include "common/common_types.h" #include "common/memory_hook.h" #include "common/virtual_buffer.h" @@ -47,7 +49,13 @@ struct SpecialRegion { */ struct PageTable { PageTable(); - ~PageTable(); + ~PageTable() noexcept; + + PageTable(const PageTable&) = delete; + PageTable& operator=(const PageTable&) = delete; + + PageTable(PageTable&&) noexcept = default; + PageTable& operator=(PageTable&&) noexcept = default; /** * Resizes the page table to be able to accomodate enough pages within diff --git a/src/common/virtual_buffer.cpp b/src/common/virtual_buffer.cpp index b009cb500..e3ca29258 100644 --- a/src/common/virtual_buffer.cpp +++ b/src/common/virtual_buffer.cpp @@ -13,7 +13,7 @@ namespace Common { -void* AllocateMemoryPages(std::size_t size) { +void* AllocateMemoryPages(std::size_t size) noexcept { #ifdef _WIN32 void* base{VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_READWRITE)}; #else @@ -29,7 +29,7 @@ void* AllocateMemoryPages(std::size_t size) { return base; } -void FreeMemoryPages(void* base, [[maybe_unused]] std::size_t size) { +void FreeMemoryPages(void* base, [[maybe_unused]] std::size_t size) noexcept { if (!base) { return; } diff --git a/src/common/virtual_buffer.h b/src/common/virtual_buffer.h index 125cb42f0..363913d45 100644 --- a/src/common/virtual_buffer.h +++ b/src/common/virtual_buffer.h @@ -4,25 +4,38 @@ #pragma once -#include "common/common_funcs.h" +#include <utility> namespace Common { -void* AllocateMemoryPages(std::size_t size); -void FreeMemoryPages(void* base, std::size_t size); +void* AllocateMemoryPages(std::size_t size) noexcept; +void FreeMemoryPages(void* base, std::size_t size) noexcept; template <typename T> -class VirtualBuffer final : NonCopyable { +class VirtualBuffer final { public: constexpr VirtualBuffer() = default; explicit VirtualBuffer(std::size_t count) : alloc_size{count * sizeof(T)} { base_ptr = reinterpret_cast<T*>(AllocateMemoryPages(alloc_size)); } - ~VirtualBuffer() { + ~VirtualBuffer() noexcept { FreeMemoryPages(base_ptr, alloc_size); } + VirtualBuffer(const VirtualBuffer&) = delete; + VirtualBuffer& operator=(const VirtualBuffer&) = delete; + + VirtualBuffer(VirtualBuffer&& other) noexcept + : alloc_size{std::exchange(other.alloc_size, 0)}, base_ptr{std::exchange(other.base_ptr), + nullptr} {} + + VirtualBuffer& operator=(VirtualBuffer&& other) noexcept { + alloc_size = std::exchange(other.alloc_size, 0); + base_ptr = std::exchange(other.base_ptr, nullptr); + return *this; + } + void resize(std::size_t count) { FreeMemoryPages(base_ptr, alloc_size); |