mirror of
https://github.com/isledecomp/isle.git
synced 2026-05-06 06:53:57 +00:00
52 lines
1.0 KiB
C++
52 lines
1.0 KiB
C++
#include "mxstreamchunk.h"
|
|
|
|
#include "mxdsbuffer.h"
|
|
|
|
// FUNCTION: LEGO1 0x100c2fe0
|
|
MxStreamChunk::~MxStreamChunk()
|
|
{
|
|
if (m_buffer) {
|
|
m_buffer->ReleaseRef(this);
|
|
}
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x100c3050
|
|
MxResult MxStreamChunk::ReadChunk(MxDSBuffer* p_buffer, MxU8* p_chunkData)
|
|
{
|
|
MxResult result = FAILURE;
|
|
|
|
if (p_chunkData != NULL && *(MxU32*) p_chunkData == FOURCC('M', 'x', 'C', 'h')) {
|
|
if (ReadChunkHeader(p_chunkData + 8)) {
|
|
if (p_buffer) {
|
|
SetBuffer(p_buffer);
|
|
p_buffer->AddRef(this);
|
|
}
|
|
result = SUCCESS;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x100c30a0
|
|
MxU32 MxStreamChunk::ReadChunkHeader(MxU8* p_chunkData)
|
|
{
|
|
MxU32 headersize = 0;
|
|
if(p_chunkData)
|
|
{
|
|
SetFlags(*(MxU16*)p_chunkData);
|
|
SetObjectId(*(MxU32*)(p_chunkData + 2));
|
|
SetTime(*(MxLong*)(p_chunkData + 6));
|
|
SetLength(*(MxU32*)(p_chunkData + 10));
|
|
SetData(p_chunkData + 14);
|
|
headersize = (MxU32)(p_chunkData + 14) - (MxU32)p_chunkData;
|
|
}
|
|
return headersize;
|
|
}
|
|
|
|
// FUNCTION: LEGO1 0x100c3170
|
|
void MxStreamChunk::SetBuffer(MxDSBuffer* p_buffer)
|
|
{
|
|
m_buffer = p_buffer;
|
|
}
|