summaryrefslogtreecommitdiff
path: root/source/core/slang-memory-arena.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/slang-memory-arena.cpp')
-rw-r--r--source/core/slang-memory-arena.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/source/core/slang-memory-arena.cpp b/source/core/slang-memory-arena.cpp
index 6fc6c0c3f..6a13addb6 100644
--- a/source/core/slang-memory-arena.cpp
+++ b/source/core/slang-memory-arena.cpp
@@ -23,6 +23,7 @@ MemoryArena::~MemoryArena()
reset();
}
+
MemoryArena::MemoryArena(size_t blockPayloadSize, size_t blockAlignment)
{
_initialize(blockPayloadSize, blockAlignment);
@@ -62,6 +63,22 @@ void MemoryArena::_initialize(size_t blockPayloadSize, size_t alignment)
_resetCurrentBlock();
}
+void MemoryArena::swapWith(ThisType& rhs)
+{
+ Swap(m_start, rhs.m_start);
+ Swap(m_end, rhs.m_end);
+ Swap(m_current, rhs.m_current);
+
+ Swap(m_blockPayloadSize, rhs.m_blockPayloadSize);
+ Swap(m_blockAllocSize, rhs.m_blockAllocSize);
+ Swap(m_blockAlignment, rhs.m_blockAlignment);
+
+ Swap(m_availableBlocks, rhs.m_availableBlocks);
+ Swap(m_usedBlocks, rhs.m_usedBlocks);
+
+ m_blockFreeList.swapWith(rhs.m_blockFreeList);
+}
+
void MemoryArena::_resetCurrentBlock()
{
m_start = nullptr;