#ifndef IPAKSTREAM_H__ #define IPAKSTREAM_H__ #include "../../IDataStream.h" #include "../../LString.h" #include #include "pak_io/PakFile.h" namespace LifeCore { class IPakStream : public IDataStream { private: PakFile* source; entry_info info; int openMode; size_t stmLength; PakEntryHandle entry; public: ~IPakStream(){} void Close() { source->fclose(entry); openMode = 0; } IPakStream(PakFile* file, String& entryName, int fileAccessMode) { source = file; openMode = fileAccessMode; // source->CloseCurrentEntry(); if (fileAccessMode == FA_READ) { entry = source->fopen(entryName); // source->LocateEntry(entry); //info = source->GetEntryInfo(); stmLength = source->fget_size(entry); //source->OpenCurrentEntry(); } else { throw "Creation of new PAK entry is not implemented! IPakStream.h"; //source->NewFileEntry(entry); } } size_t Read(void* pBuffer, size_t countBytes) { return source->fread(entry, pBuffer, countBytes); } size_t Write(const void* pBuffer, size_t countBytes) { source->fwrite(entry, pBuffer, countBytes); return countBytes; } void Seek(size_t position) { source->fseek(entry, position); } size_t Tell() { return source->ftell(entry); } size_t Length() { return source->fget_size(entry); } bool CanRead() { return true; } bool CanWrite() { return true; } }; } #endif