diff options
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); | 
