60 lines
1.2 KiB
C++
60 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "libNPK.h"
|
|
#include "libNPK_NPKFile.h"
|
|
|
|
namespace NPK
|
|
{
|
|
|
|
class CFileStream : public IFileStream
|
|
{
|
|
public:
|
|
virtual const char* name(void) const {
|
|
return m_fileName.c_str();
|
|
}
|
|
|
|
virtual uint32_t size(void) const {
|
|
return m_fileSize;
|
|
}
|
|
|
|
virtual uint32_t read(void* buffer, uint32_t size);
|
|
|
|
virtual bool seek(uint32_t offset);
|
|
|
|
virtual uint32_t tell(void) const {
|
|
return m_currentOffset;
|
|
}
|
|
|
|
virtual uint32_t crc32(void);
|
|
|
|
virtual bool isEOF(void) const {
|
|
return m_currentOffset >= m_fileSize;
|
|
}
|
|
|
|
protected:
|
|
//Pack file
|
|
CNPKFile* m_pNPKFile;
|
|
// windows file handle
|
|
HANDLE m_hFileandle;
|
|
std::string m_fileName;
|
|
//offset of the file in the pak file
|
|
uint32_t m_fileOffset = 0;
|
|
//size of the file
|
|
uint32_t m_fileSize = 0;
|
|
//current read offset in the file
|
|
uint32_t m_currentOffset = 0;
|
|
//CRC32 checksum of the file
|
|
uint32_t m_crc32 = 0;
|
|
//Flag to indicate if CRC32 has been calculated
|
|
bool m_crc32Calculated = false;
|
|
|
|
private:
|
|
CFileStream(CNPKFile* pNPKFile, HANDLE hFile, const FileItemBaseInfo& baseFileInfo);
|
|
virtual ~CFileStream();
|
|
|
|
friend IFileStream* CNPKFile::openFileStream(const char* szFileName);
|
|
friend void CNPKFile::closeFileStream(IFileStream* fileStream);
|
|
};
|
|
|
|
}
|