mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
2 years ago
|
#ifndef BSA_BA2_GNRL_FILE_H
|
||
|
#define BSA_BA2_GNRL_FILE_H
|
||
|
|
||
|
#include <list>
|
||
|
#include <map>
|
||
|
|
||
|
#include <components/bsa/bsa_file.hpp>
|
||
|
#include <filesystem>
|
||
|
|
||
|
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
|