DatIO.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //
  2. // Created by kikab on 04.06.2018.
  3. //
  4. #ifndef LOTRO_DAT_LIBRARY_DATIO_H
  5. #define LOTRO_DAT_LIBRARY_DATIO_H
  6. #include <utility>
  7. #include "DatOperationResult.h"
  8. extern "C++" {
  9. namespace LOTRO_DAT {
  10. class BinaryData;
  11. class DatFile;
  12. class SubDirectory;
  13. class SubFile;
  14. /*!
  15. * \brief Модуль ввода/вывода
  16. * \author Gi1dor
  17. * \date 30.06.2018
  18. * Класс для работы с вводом-выводом данных в dat-контейнере. Предоставляет функции чтения/записи данных, а также
  19. * информацию об основных параметрах dat файла
  20. * информацию об основных параметрах dat файла
  21. * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
  22. */
  23. class DatIO {
  24. public:
  25. DatIO() = delete;
  26. DatIO(const DatIO &other) = delete;
  27. DatIO& operator=(const DatIO &other) = delete;
  28. ~DatIO();
  29. explicit DatIO(DatFile *datFilePtr);
  30. DatOperationResult<> Init(const std::string &filename);
  31. DatOperationResult<> ReadData(BinaryData &data, long long size, long long offset = 0, long long data_offset = 0) const;
  32. DatOperationResult<> WriteData(const BinaryData &data, long long size, long long offset = 0, long long data_offset = 0);
  33. DatOperationResult<long long> GetActualDatSize();
  34. DatOperationResult<std::string> GetFilename();
  35. void PrintInformaion(FILE* file);
  36. DatOperationResult<> DeInit();
  37. private:
  38. //------------------------------------------------//
  39. // PRIVATE INIT SECTION
  40. //------------------------------------------------//
  41. DatOperationResult<> OpenDatFile();
  42. DatOperationResult<> ReadSuperBlock();
  43. //------------------------------------------------//
  44. // PRIVATE DEINIT SECTION
  45. //------------------------------------------------//
  46. DatOperationResult<> ModifyFragmentationJournal();
  47. DatOperationResult<> UpdateHeader();
  48. private:
  49. DatFile *dat;
  50. FILE *file_handler_;
  51. std::string filename_;
  52. public:
  53. long long constant1;
  54. long long constant2;
  55. long long file_size;
  56. long long version1;
  57. long long version2;
  58. long long fragmentation_journal_size;
  59. long long fragmentation_journal_end;
  60. long long root_directory_offset;
  61. long long fragmentation_journal_offset;
  62. long long free_dat_size;
  63. private:
  64. long long actual_dat_size_;
  65. };
  66. }
  67. };
  68. #endif //LOTRO_DAT_LIBRARY_DATIO_H