diff --git a/openVulkanoCpp/IO/Archive/ArchiveConfiguration.hpp b/openVulkanoCpp/IO/Archive/ArchiveConfiguration.hpp index c9c0a37..ea58b24 100644 --- a/openVulkanoCpp/IO/Archive/ArchiveConfiguration.hpp +++ b/openVulkanoCpp/IO/Archive/ArchiveConfiguration.hpp @@ -10,20 +10,36 @@ namespace openVulkanoCpp { - struct ArchiveConfiguration - { - enum class ArchiveType { TAR = 0, CPIO, ISO, ZIP, XAR, SEVEN_ZIP, WARC, SHAR }; - enum class CompressionType { AUTO, NONE, GZIP, BZIP2, XZ, LZ4, ZSTD }; + enum class ArchiveType { TAR = 0, CPIO, ISO, ZIP, XAR, SEVEN_ZIP, WARC, SHAR }; - ArchiveType type = ArchiveType::TAR; - CompressionType compression = CompressionType::AUTO; - int compressionLevel = -1; + enum class CompressionType { AUTO = 0, NONE, GZIP, BZIP2, XZ, LZ4, ZSTD }; + + struct ArchiveConfiguration final + { + + ArchiveType type; + CompressionType compression; + int compressionLevel; + + constexpr ArchiveConfiguration(ArchiveType archiveType = ArchiveType::TAR, + CompressionType compressionType = CompressionType::AUTO, + int level = -1) + : type(archiveType), compression(compressionType), compressionLevel(level) + {} + + [[nodiscard]] static ArchiveConfiguration FromFileName(const char* fileName); [[nodiscard]] std::string GetFileExtension() const; - static ArchiveConfiguration FromFileName(const char* fileName); [[nodiscard]] int GetLibArchiveArchiveType() const; [[nodiscard]] int GetLibArchiveCompressionType() const; }; + + namespace ArchiveConfig + { + inline constexpr ArchiveConfiguration TAR = {ArchiveType::TAR, CompressionType::NONE, 0}; + inline constexpr ArchiveConfiguration TAR_GZ = {ArchiveType::TAR, CompressionType::GZIP, 6}; + inline constexpr ArchiveConfiguration TAR_GZ9 = {ArchiveType::TAR, CompressionType::GZIP, 9}; + } } diff --git a/openVulkanoCpp/IO/Archive/ArchiveWriter.cpp b/openVulkanoCpp/IO/Archive/ArchiveWriter.cpp index 4de1e76..82f0344 100644 --- a/openVulkanoCpp/IO/Archive/ArchiveWriter.cpp +++ b/openVulkanoCpp/IO/Archive/ArchiveWriter.cpp @@ -20,11 +20,11 @@ namespace openVulkanoCpp : ArchiveBase(archive_write_new(), archive_entry_new(), logger) { //TODO error handling ChkErr(archive_write_set_format(m_archive, archiveConfiguration.GetLibArchiveArchiveType())); - if (archiveConfiguration.type == ArchiveConfiguration::ArchiveType::TAR) + if (archiveConfiguration.type == ArchiveType::TAR) { ChkErr(archive_write_add_filter(m_archive, archiveConfiguration.GetLibArchiveCompressionType())); } - if (archiveConfiguration.compression != ArchiveConfiguration::CompressionType::NONE && + if (archiveConfiguration.compression != CompressionType::NONE && archiveConfiguration.compressionLevel > 0) { std::string level = "compression-level=" + std::to_string(archiveConfiguration.compressionLevel);