Update ArchiveConfiguration

This commit is contained in:
2021-03-01 20:35:11 +01:00
parent 68d2feeba5
commit 247bc8deef
2 changed files with 26 additions and 10 deletions

View File

@@ -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};
}
}

View File

@@ -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);