#pragma once #include #include #include namespace hex { class Tar { public: enum class Mode { Read, Write, Create }; Tar() = default; Tar(const std::fs::path &path, Mode mode); ~Tar(); Tar(const Tar&) = delete; Tar(Tar&&) noexcept; Tar &operator=(Tar &&other) noexcept; void close(); [[nodiscard]] std::vector readVector(const std::fs::path &path); [[nodiscard]] std::string readString(const std::fs::path &path); void writeVector(const std::fs::path &path, const std::vector &data); void writeString(const std::fs::path &path, const std::string &data); [[nodiscard]] std::vector listEntries(const std::fs::path &basePath = "/"); [[nodiscard]] bool contains(const std::fs::path &path); void extract(const std::fs::path &path, const std::fs::path &outputPath); void extractAll(const std::fs::path &outputPath); [[nodiscard]] bool isValid() const { return this->m_valid; } private: mtar_t m_ctx = { }; std::fs::path m_path; bool m_valid = false; }; }