#pragma once #include #include #include namespace Archive { static constexpr std::uint32_t VERSION {0x0010}; static constexpr std::size_t BLOCK_SIZE {1024}; static constexpr std::size_t NAMELEN {64}; struct Header { std::uint32_t version; std::uint32_t total_entries; struct { std::uint32_t total_blocks; std::uint32_t compressed_size; std::uint32_t offset; } directory; }; struct Entry { char name[NAMELEN]; std::uint32_t original_size; std::uint32_t compressed_size; std::uint32_t offset; }; class Archive { public: explicit Archive(const char* path); int Expand(int index, std::uint8_t*& buffer, bool null_terminated=false) const; void PrintNamesOfEntries() const; std::size_t DirectoryBlocks() const; private: const char* path; Header header; std::vector entries; }; } // namespace Archive