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/virtual_buffer.h | |
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 '')
-rw-r--r-- | src/common/virtual_buffer.h | 23 |
1 files changed, 18 insertions, 5 deletions
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); |