www.pudn.com > 3DEDITOR.rar > CHUNKFILE.CPP
// ChunkFile.cpp: implementation of the ChunkFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "ChunkFile.h"
//#include "3DEditor.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ChunkFile::ChunkFile(CFile *f)
{
fp=f;
nc=-1;
}
ChunkFile::~ChunkFile()
{
}
void ChunkFile::Open(unsigned short IdP)
{
nc++;
SizeI[nc]=0;
Write(&IdP,sizeof(unsigned short));
PositionI[nc]=fp->GetPosition();
Write(&SizeI[nc], sizeof(unsigned long));
}
void ChunkFile::Close()
{
DWORD pos=fp->GetPosition();
fp->Seek(PositionI[nc], CFile::begin);
fp->Write(&SizeI[nc], sizeof(unsigned long));
fp->Seek(pos, CFile::begin);
nc--;
if(nc>=0)
SizeI[nc]+=SizeI[nc+1];
}
void ChunkFile::ReadHeader()
{
nc++;
fp->Read(&Id,sizeof(unsigned short));
fp->Read(&SizeI[nc],sizeof(unsigned long));
PositionI[nc]=fp->GetPosition();
}
unsigned long ChunkFile::resto()
{
return SizeI[nc]-sizeof(unsigned short)-sizeof(unsigned long)-(fp->GetPosition()-PositionI[nc]);
}
void ChunkFile::Next()
{
fp->Seek(resto(), CFile::current);
nc--;
}
bool ChunkFile::End()
{
return resto()==0;
}
UINT ChunkFile::Read( void* lpBuf, UINT nMax )
{
return fp->Read(lpBuf, nMax);
}
void ChunkFile::Write( const void* lpBuf, UINT nMax )
{
SizeI[nc]+=nMax;
fp->Write(lpBuf, nMax);
}