/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include "ArchiveBase.hpp" #include "ArchiveConfiguration.hpp" #include "IO/FileDescription.hpp" #include #include namespace openVulkanoCpp { class ArchiveWriter final : public ArchiveBase { size_t m_bytesWritten = 0; public: ArchiveWriter(const char* fileName, const std::shared_ptr& logger = nullptr); ArchiveWriter(const char* fileName, ArchiveConfiguration archiveConfiguration, const std::shared_ptr& logger = nullptr); ~ArchiveWriter() override; void Close(); [[nodiscard]] size_t GetTotalWrittenBytes() const { return m_bytesWritten; } bool AddFile(const char* fileName); bool AddFile(const char* fileName, const char* inArchiveName); bool AddFile(const char* inArchiveName, const void* buffer, size_t length); bool AddFile(const FileDescription& description, const void* buffer); bool AddFile(const char* fileName, const std::vector>& buffers); bool AddFile(const FileDescription& description, const std::vector>& buffers); bool AddFiles(const char* dirName); bool AddFiles(const char* dirName, const char* inArchiveDirName); bool AddFiles(const std::filesystem::path& dirName, const std::string& inArchiveDirName); private: void WriteHeader(const FileDescription& fileDescription); }; }