// // EuropaTools // // (C) 2021-2025 modeco80 // // SPDX-License-Identifier: MIT // #ifndef EUROPA_IO_PAKREADER_H #define EUROPA_IO_PAKREADER_H #include #include #include #include namespace europa::io::pak { /// Reader for Europa package files (.pak). struct Reader { using FlatType = std::pair; using MapType = std::vector; /// Constructor. Takes in a input stream to read pak data from. /// This stream should only be used by the PakReader, nothing else. explicit Reader(std::istream& is); /// Reads the header and the file TOC. /// This function should be called first. void ReadHeaderAndTOC(); /// Reads all files in the package. void ReadFiles(); /// Reads a file with the path specified as [file]. void ReadFile(const std::string& file); bool Invalid() const { return invalid; } MapType& GetFiles(); const MapType& GetFiles() const; const structs::PakHeaderVariant& GetHeader() const { return header; } private: template void ReadHeaderAndTOCImpl(); std::istream& stream; bool invalid { false }; structs::PakHeaderVariant header {}; MapType files; }; } // namespace europa::io::pak #endif // EUROPA_IO_PAKREADER_H