1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#ifndef BSA_BA2_GNRL_FILE_H
#define BSA_BA2_GNRL_FILE_H
#include <list>
#include <map>
#include <string>
#include <vector>
#include <components/bsa/bsa_file.hpp>
namespace Bsa
{
class BA2GNRLFile : private BSAFile
{
private:
struct FileRecord
{
FileRecord();
uint32_t size;
uint32_t offset;
uint32_t packedSize = 0;
bool isValid() const;
};
uint32_t mVersion{ 0u };
using FolderRecord = std::map<std::pair<uint32_t, uint32_t>, FileRecord>;
std::map<uint32_t, FolderRecord> mFolders;
std::list<std::vector<char>> mFileNames;
FileRecord getFileRecord(const std::string& str) const;
Files::IStreamPtr getFile(const FileRecord& fileRecord);
void loadFiles(uint32_t fileCount, std::istream& in);
public:
using BSAFile::getFilename;
using BSAFile::getList;
using BSAFile::open;
BA2GNRLFile();
virtual ~BA2GNRLFile();
/// Read header information from the input source
void readHeader() override;
Files::IStreamPtr getFile(const char* filePath);
Files::IStreamPtr getFile(const FileStruct* fileStruct);
void addFile(const std::string& filename, std::istream& file);
};
}
#endif
|