// // Created by kikab on 04.06.2018. // #ifndef LOTRO_DAT_LIBRARY_DATFILEIO_H #define LOTRO_DAT_LIBRARY_DATFILEIO_H #include #include #include #include #include #include #include namespace LOTRO_DAT { class BinaryData; class DatFile; class DatOperationResult; class SubDirectory; class SubFile; class DatFileIO { public: DatFileIO() = delete; DatFileIO(const DatFileIO &other) = delete; explicit DatFileIO(DatFile &dat_ref); DatOperationResult Init(const std::string &filename); DatOperationResult ReadData(BinaryData &data, long long size, long long offset = 0, long long data_offset = 0) const; DatOperationResult WriteData(const BinaryData &data, long long size, long long offset = 0, long long data_offset = 0); std::shared_ptr GetRootDirectory(); long long GetActualDatSize(); DatOperationResult DeInit(); private: //------------------------------------------------// // PRIVATE INIT SECTION //------------------------------------------------// DatOperationResult OpenDatFile(); DatOperationResult ReadSuperBlock(); DatOperationResult MakeDirectories(); //------------------------------------------------// // PRIVATE DEINIT SECTION //------------------------------------------------// DatOperationResult ModifyFragmentationJournal(); DatOperationResult UpdateHeader(); private: DatFile &dat_file_ref; FILE *file_handler_; std::string filename_; std::shared_ptr root_directory_; public: long long constant1; long long constant2; long long file_size; long long version1; long long version2; long long fragmentation_journal_size; long long fragmentation_journal_end; long long root_directory_offset; long long fragmentation_journal_offset; long long free_dat_size; private: long long actual_dat_size_; }; }; #endif //LOTRO_DAT_LIBRARY_DATFILEIO_H