DatFileIO.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // Created by kikab on 04.06.2018.
  3. //
  4. #ifndef LOTRO_DAT_LIBRARY_DATFILEIO_H
  5. #define LOTRO_DAT_LIBRARY_DATFILEIO_H
  6. #include <fstream>
  7. #include <map>
  8. #include <unordered_map>
  9. #include <set>
  10. #include <vector>
  11. #include <yaml-cpp/node/node.h>
  12. #include <unordered_set>
  13. namespace LOTRO_DAT {
  14. class BinaryData;
  15. class DatFile;
  16. class DatOperationResult;
  17. class SubDirectory;
  18. class SubFile;
  19. class DatFileIO {
  20. public:
  21. DatFileIO() = delete;
  22. DatFileIO(const DatFileIO &other) = delete;
  23. explicit DatFileIO(DatFile &dat_ref);
  24. DatOperationResult Init(const std::string &filename);
  25. DatOperationResult
  26. ReadData(BinaryData &data, long long size, long long offset = 0, long long data_offset = 0) const;
  27. DatOperationResult
  28. WriteData(const BinaryData &data, long long size, long long offset = 0, long long data_offset = 0);
  29. std::shared_ptr<SubDirectory> GetRootDirectory();
  30. long long GetActualDatSize();
  31. DatOperationResult DeInit();
  32. private:
  33. //------------------------------------------------//
  34. // PRIVATE INIT SECTION
  35. //------------------------------------------------//
  36. DatOperationResult OpenDatFile();
  37. DatOperationResult ReadSuperBlock();
  38. DatOperationResult MakeDirectories();
  39. //------------------------------------------------//
  40. // PRIVATE DEINIT SECTION
  41. //------------------------------------------------//
  42. DatOperationResult ModifyFragmentationJournal();
  43. DatOperationResult UpdateHeader();
  44. private:
  45. DatFile &dat_file_ref;
  46. FILE *file_handler_;
  47. std::string filename_;
  48. std::shared_ptr<SubDirectory> root_directory_;
  49. public:
  50. long long constant1;
  51. long long constant2;
  52. long long file_size;
  53. long long version1;
  54. long long version2;
  55. long long fragmentation_journal_size;
  56. long long fragmentation_journal_end;
  57. long long root_directory_offset;
  58. long long fragmentation_journal_offset;
  59. long long free_dat_size;
  60. private:
  61. long long actual_dat_size_;
  62. };
  63. };
  64. #endif //LOTRO_DAT_LIBRARY_DATFILEIO_H