1
0
forked from 0ad/0ad
0ad/source/ps/FileUnpacker.h
2005-02-26 15:13:15 +00:00

60 lines
1.7 KiB
C++
Executable File

///////////////////////////////////////////////////////////////////////////////
//
// Name: FileUnpacker.h
// Author: Rich Cross
// Contact: rich@wildfiregames.com
//
///////////////////////////////////////////////////////////////////////////////
#ifndef _FILEUNPACKER_H
#define _FILEUNPACKER_H
#include <vector>
#include "lib/types.h"
#include "CStr.h"
////////////////////////////////////////////////////////////////////////////////
// CFileUnpacker: class to assist in reading of binary files
class CFileUnpacker
{
public:
// exceptions thrown by class
class CError { };
class CFileTypeError : public CError { };
class CFileVersionError : public CError { };
class CFileOpenError : public CError { };
class CFileReadError : public CError { };
class CFileEOFError : public CError { };
public:
// constructor
CFileUnpacker();
~CFileUnpacker();
// Read: open and read in given file, check magic bits against those given; throw
// variety of exceptions for missing files etc
void Read(const char* filename,const char magicstr[4]);
// GetVersion: return stored file version
u32 GetVersion() const { return m_Version; }
// UnpackRaw: unpack given number of bytes from the input stream into the given array
// - throws CFileEOFError if the end of the data stream is reached before the given
// number of bytes have been read
void UnpackRaw(void* rawdata,u32 rawdatalen);
// UnpackString: unpack a string from the raw data stream
void UnpackString(CStr& result);
private:
// the data read from file and used during unpack operations
void* m_Buf;
size_t m_Size;
// current unpack position in stream
u32 m_UnpackPos;
// version of the file currently being read
u32 m_Version;
};
#endif