From 8df3f6970b991a6aa20a3e1e723c8a0ad7a7030a Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Mon, 15 Jul 2024 00:16:13 +0100 Subject: [PATCH] [+] Heap::Clone(Heap *[, ...]) --- Include/Aurora/Memory/MemoryView.hpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Include/Aurora/Memory/MemoryView.hpp b/Include/Aurora/Memory/MemoryView.hpp index 205ff54f..8128d986 100644 --- a/Include/Aurora/Memory/MemoryView.hpp +++ b/Include/Aurora/Memory/MemoryView.hpp @@ -9,6 +9,13 @@ namespace Aurora::Memory { + struct Heap; + + namespace detail + { + inline AuSPtr AllocateArray(Heap *pHeap, AuUInt uLength, AuUInt32 uAlignment); + } + struct MemoryControlBlock { // Free-after-use mitigator: ensures a non-zero flag is kept whilst other memory views are present @@ -392,6 +399,19 @@ namespace Aurora::Memory return MemoryView(MemoryView(pData.get(), uLength), pData); } + MemoryView Clone(Heap *pHeap, AuUInt32 uAlignment = alignof(double)) const + { + auto uLength = this->uLength; + auto pData = detail::AllocateArray(uLength, uAlignment); + if (!pData) + { + return {}; + } + + AuMemcpy(pData.get(), this->pBase, uLength); + return MemoryView(MemoryView(pData.get(), uLength), pData); + } + bool TryCloneSelf(bool bResetOnFailure = true) { auto replacement = Clone();