DatFileSystem.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //
  2. // Created by kikab on 04.06.2018.
  3. //
  4. #ifndef LOTRO_DAT_LIBRARY_DATFILESYSTEM_H
  5. #define LOTRO_DAT_LIBRARY_DATFILESYSTEM_H
  6. #include <set>
  7. #include <map>
  8. #include <utility>
  9. #include <memory>
  10. #include "DatOperationResult.h"
  11. extern "C++" {
  12. namespace LOTRO_DAT {
  13. class DatFile;
  14. class BinaryData;
  15. class SubDirectory;
  16. class SubFile;
  17. class DatFileSystem {
  18. public:
  19. DatFileSystem() = delete;
  20. DatFileSystem(const DatFileSystem &other) = delete;
  21. DatFileSystem& operator=(const DatFileSystem &other) = delete;
  22. ~DatFileSystem() = default;
  23. explicit DatFileSystem(DatFile *datFilePtr);
  24. DatOperationResult<> Init();
  25. DatOperationResult<BinaryData> GetFileData(long long file_id, long long int offset);
  26. DatOperationResult<SubFile> GetFile(long long file_id);
  27. DatOperationResult<bool> CheckCorrectSubfile(const SubFile &file);
  28. bool FileExists(long long file_id);
  29. DatOperationResult<> UpdateFile(const SubFile& file);
  30. DatOperationResult<> DeInit();
  31. private:
  32. //------------------------------------------------//
  33. // PRIVATE INIT SECTION
  34. //------------------------------------------------//
  35. DatOperationResult<> MakeDirectories();
  36. DatOperationResult<> MakeDictionary();
  37. //------------------------------------------------//
  38. // PRIVATE DEINIT SECTION
  39. //------------------------------------------------//
  40. DatOperationResult<> CommitDirectories();
  41. private:
  42. DatFile *dat;
  43. std::shared_ptr<SubDirectory> root_directory_;
  44. std::set<long long> subfile_pending_update;
  45. std::map<long long, std::shared_ptr<SubFile> > dictionary_;
  46. };
  47. }
  48. };
  49. #endif //LOTRO_DAT_LIBRARY_DATFILESYSTEM_H