Initial commit
This commit is contained in:
59
Torque/SDK/engine/core/dataChunker.cc
Normal file
59
Torque/SDK/engine/core/dataChunker.cc
Normal file
@@ -0,0 +1,59 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "platform/platform.h"
|
||||
#include "core/dataChunker.h"
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
DataChunker::DataChunker(S32 size)
|
||||
{
|
||||
chunkSize = size;
|
||||
curBlock = new DataBlock(size);
|
||||
curBlock->next = NULL;
|
||||
curBlock->curIndex = 0;
|
||||
}
|
||||
|
||||
DataChunker::~DataChunker()
|
||||
{
|
||||
freeBlocks();
|
||||
}
|
||||
|
||||
void *DataChunker::alloc(S32 size)
|
||||
{
|
||||
AssertFatal(size <= chunkSize, "Data chunk too large.");
|
||||
if(!curBlock || size + curBlock->curIndex > chunkSize)
|
||||
{
|
||||
DataBlock *temp = new DataBlock(chunkSize);
|
||||
temp->next = curBlock;
|
||||
temp->curIndex = 0;
|
||||
curBlock = temp;
|
||||
}
|
||||
void *ret = curBlock->data + curBlock->curIndex;
|
||||
curBlock->curIndex += (size + 3) & ~3; // dword align
|
||||
return ret;
|
||||
}
|
||||
|
||||
DataChunker::DataBlock::DataBlock(S32 size)
|
||||
{
|
||||
data = new U8[size];
|
||||
}
|
||||
|
||||
DataChunker::DataBlock::~DataBlock()
|
||||
{
|
||||
delete[] data;
|
||||
}
|
||||
|
||||
void DataChunker::freeBlocks()
|
||||
{
|
||||
while(curBlock)
|
||||
{
|
||||
DataBlock *temp = curBlock->next;
|
||||
delete curBlock;
|
||||
curBlock = temp;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user