mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-23 01:25:51 +00:00
30 lines
857 B
C++
30 lines
857 B
C++
#include "StepAllocXBlocks.h"
|
|
#include "Loading/Exception/InvalidXBlockSizeException.h"
|
|
|
|
const uint64_t StepAllocXBlocks::MAX_XBLOCK_SIZE = 0x3C000000;
|
|
|
|
void StepAllocXBlocks::PerformStep(ZoneLoader* zoneLoader, ILoadingStream* stream)
|
|
{
|
|
const unsigned int blockCount = zoneLoader->m_blocks.size();
|
|
|
|
auto* blockSizes = new xblock_size_t[blockCount];
|
|
stream->Load(blockSizes, sizeof(xblock_size_t) * blockCount);
|
|
|
|
uint64_t totalMemory = 0;
|
|
for(unsigned int block = 0; block < blockCount; block++)
|
|
{
|
|
totalMemory += blockSizes[block];
|
|
}
|
|
|
|
if(totalMemory > MAX_XBLOCK_SIZE)
|
|
{
|
|
throw InvalidXBlockSizeException(totalMemory, MAX_XBLOCK_SIZE);
|
|
}
|
|
|
|
for(unsigned int block = 0; block < blockCount; block++)
|
|
{
|
|
zoneLoader->m_blocks[block]->Alloc(blockSizes[block]);
|
|
}
|
|
|
|
delete[] blockSizes;
|
|
} |