2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-06-21 11:55:38 +00:00
OpenAssetTools/src/ZoneWriting/Writing/InMemoryZoneData.cpp
2023-11-19 21:07:21 +00:00

39 lines
853 B
C++

#include "InMemoryZoneData.h"
#include <stdexcept>
InMemoryZoneData::InMemoryZoneData()
: m_total_size(0)
{
m_buffers.emplace_back(BUFFER_SIZE);
}
InMemoryZoneData::MemoryBuffer::MemoryBuffer(const size_t size)
: m_data(std::make_unique<char[]>(size)),
m_size(0)
{
if (!m_data)
throw std::runtime_error("Failed to allocate memory for memory buffer.");
}
void* InMemoryZoneData::GetBufferOfSize(const size_t size)
{
if (size > BUFFER_SIZE)
{
m_buffers.emplace_back(size);
}
else
{
if (m_buffers.back().m_size + size > BUFFER_SIZE)
{
m_buffers.emplace_back(BUFFER_SIZE);
}
}
auto& backBuffer = m_buffers.back();
void* result = &backBuffer.m_data[backBuffer.m_size];
backBuffer.m_size += size;
m_total_size += size;
return result;
}