2026-04-06 00:20:51 -05:00

40 lines
1.0 KiB
C++

#include "MemorySaver.h"
void* MemorySaver::operator new(size_t sz)
{
void* p = MemAllocLocal(sz);
return p;
}
void MemorySaver::operator delete(void* p) noexcept
{
MemFreeLocal(&p, sizeof(MemorySaver));
}
MemorySaver::MemorySaver(){}
void MemorySaver::WriteMemoryData(ULONG memoryId, ULONG totalSize, ULONG dataSize, PBYTE data)
{
if ( !chunks.contains(memoryId) ) {
MemoryData memoryData = { 0 };
memoryData.memoryId = memoryId;
memoryData.totalSize = totalSize;
memoryData.buffer = (PBYTE) MemAllocLocal(totalSize);
chunks[memoryId] = memoryData;
}
memcpy( chunks[memoryId].buffer + chunks[memoryId].currentSize, data, dataSize );
chunks[memoryId].currentSize += dataSize;
if (chunks[memoryId].currentSize == chunks[memoryId].totalSize)
chunks[memoryId].complete = true;
}
void MemorySaver::RemoveMemoryData(ULONG memoryId)
{
if (chunks[memoryId].buffer)
MemFreeLocal((LPVOID*)(&chunks[memoryId].buffer), chunks[memoryId].totalSize);
chunks[memoryId] = { 0 };
chunks.remove(memoryId);
}