#pragma once namespace NPK { //------------------------------------ //pre-dfine //------------------------------------ class INPKFile; class IFileStream; //------------------------------------ // NPK file error codes //------------------------------------ enum ErrorCode { NPK_ERR_SUCCESS = 0, NPK_ERR_FILE_NOT_FOUND, NPK_ERR_INVALID_FILE_FORMAT, NPK_ERR_INVALID_FILE_HASH, NPK_ERR_FILE_ACCESS, NPK_ERR_FILE_READ, NPK_ERR_FILE_WRITE, NPK_ERR_PARAM, NPK_ERR_INVALID_STATE, //Other errors NPK_ERR_UNKNOWN }; //------------------------------------ //API for NPK file //------------------------------------ // Create a NPK file interface INPKFile* createNPKFile(); // destroy an NPK interface void closeNPKFile(INPKFile* npkFile); // Get the last error code ErrorCode getLastErrorCode(); // Get the last error message const char* getLastErrorMessage(); //------------------------------------ // define the NPK file interface //------------------------------------ class INPKFile { public: struct FileNode { std::string fileName; uint32_t fileOffset = 0; uint32_t fileSize = 0; }; public: virtual bool openPakFile(const char* szPackFileName) = 0; virtual bool closePakFile(void) = 0; virtual int32_t getFileCount(void) const = 0; virtual bool getFileNode(int32_t index, FileNode& fileNode) const = 0; virtual IFileStream* openFileStream(const char* szFileName) = 0; virtual void closeFileStream(IFileStream* fileStream) = 0; }; class IFileStream { public: virtual const char* name(void) const = 0; virtual uint32_t size(void) const = 0; virtual uint32_t read(void* buffer, uint32_t size) = 0; virtual bool seek(uint32_t offset) = 0; virtual uint32_t tell(void) const = 0; virtual uint32_t crc32(void) = 0; virtual bool isEOF(void) const = 0; }; }