Archive.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #ifndef INCLUDE_ARCHIVE_H
  2. #define INCLUDE_ARCHIVE_H
  3. #include <cstdint>
  4. #include <cstdio>
  5. #include <TINYSTL/string.h>
  6. namespace WalrusRPG
  7. {
  8. namespace PIAF
  9. {
  10. constexpr uint32_t ARCHIVE_VERSION = 0x01000000;
  11. enum FileType : uint32_t
  12. {
  13. UNKNOWN,
  14. MAP,
  15. EVENT_LIST,
  16. TEXT,
  17. TEXTURE
  18. };
  19. enum CompressionType : uint32_t
  20. {
  21. UNKNWOWN,
  22. RAW,
  23. ZLIB,
  24. RLE
  25. };
  26. class File
  27. {
  28. protected:
  29. const uint8_t *data;
  30. public:
  31. friend class Archive;
  32. char filename[9]; // 8 + a \0 in case of printing
  33. FileType file_type;
  34. CompressionType compression_type;
  35. uint32_t file_size;
  36. std::size_t size;
  37. File(uint8_t *data);
  38. File();
  39. ~File();
  40. const uint8_t *get();
  41. };
  42. class Archive
  43. {
  44. private:
  45. FILE *file;
  46. uint32_t version;
  47. uint32_t nb_files;
  48. uint32_t data_size;
  49. File *entries;
  50. uint8_t **files_data;
  51. bool *files_loaded;
  52. uint32_t *files_data_offset;
  53. public:
  54. // RAII stuff
  55. // Archive(std::unique_ptr<char> *filepath);
  56. Archive(const char *filepath);
  57. Archive(tinystl::string &filepath);
  58. ~Archive();
  59. bool has(const char *filename);
  60. File get(const char *filename);
  61. };
  62. }
  63. }
  64. #endif