#pragma once #include #include #include class CppC4Group { struct Private; std::unique_ptr p; public: struct Data { const void* data; size_t size; Data(); Data(const void* data, size_t size); }; struct EntryInfo { std::string fileName; int32_t modified; std::string author; size_t size; size_t totalSize; bool executable; bool directory; bool official; }; public: enum TmpMemoryStrategy { Memory, File, Auto }; static void setTmpMemoryStrategy(const TmpMemoryStrategy strategy); public: CppC4Group(); ~CppC4Group(); void create(); bool openExisting(const std::string& path); bool save(const std::string& path, const bool overwrite = false); bool extractAll(const std::string& path); bool extractSingle(const std::string& entryPath, const std::string& targetPath); std::optional getEntryData(const std::string& path); std::string getErrorMessage(); int32_t getErrorCode(); std::string getErrorMethod(); std::string getErrorCauser(); bool setMaker(const std::string& maker, const std::string& path = "", const bool recursive = false); bool setCreation(const int32_t creation, const std::string& path = "", const bool recursive = false); bool setOfficial(const bool official, const std::string& path = "", const bool recursive = false); bool setExecutable(const bool executable, const std::string& path); std::optional getEntryInfo(const std::string& path = ""); std::optional> getEntryInfos(const std::string& path = ""); bool deleteEntry(const std::string& path, const bool recursive = false); bool renameEntry(const std::string& oldPath, const std::string& newPath); bool createDirectory(const std::string& path); bool createFile(const std::string& path, void* data = nullptr, size_t size = 0); bool setEntryData(const std::string& path, void* data = nullptr, size_t size = 0); };