code review refactoring

This commit is contained in:
ohyzha
2024-12-21 17:11:29 +02:00
parent 9d6756bbad
commit d3750f2b8a
10 changed files with 88 additions and 117 deletions

View File

@@ -20,21 +20,21 @@ namespace OpenVulkano
constexpr int BUFFER_SIZE = 16384;
}
ArchiveReader::ArchiveReader(const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
ArchiveReader::ArchiveReader(const std::shared_ptr<spdlog::logger>& logger, std::optional<ArchiveType::Type> archiveType)
: ArchiveBase(archive_read_new(), nullptr, logger), m_archiveType(archiveType)
{}
ArchiveReader::ArchiveReader(const std::string& archiveFile, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
ArchiveReader::ArchiveReader(const std::string& archiveFile, const std::shared_ptr<spdlog::logger>& logger, std::optional<ArchiveType::Type> archiveType)
: ArchiveReader(archiveFile.c_str(), logger, archiveType)
{}
ArchiveReader::ArchiveReader(const char* archiveFile, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
ArchiveReader::ArchiveReader(const char* archiveFile, const std::shared_ptr<spdlog::logger>& logger, std::optional<ArchiveType::Type> archiveType)
: ArchiveReader(logger, archiveType)
{
Open(archiveFile);
}
ArchiveReader::ArchiveReader(const void* archiveBuffer, const size_t size, const std::shared_ptr<spdlog::logger>& logger, ArchiveType::Type archiveType)
ArchiveReader::ArchiveReader(const void* archiveBuffer, const size_t size, const std::shared_ptr<spdlog::logger>& logger, std::optional<ArchiveType::Type> archiveType)
: ArchiveReader(logger, archiveType)
{
OpenMemory(archiveBuffer, size);
@@ -51,32 +51,7 @@ namespace OpenVulkano
m_archive = archive_read_new();
}
ChkErr(archive_read_support_filter_all(m_archive));
std::function<int(archive*)> pFunc;
switch (m_archiveType)
{
case ArchiveType::ZIP:
pFunc = archive_read_support_format_zip;
break;
case ArchiveType::SEVEN_ZIP:
pFunc = archive_read_support_format_7zip;
break;
case ArchiveType::CPIO:
pFunc = archive_read_support_format_cpio;
break;
case ArchiveType::ISO:
pFunc = archive_read_support_format_iso9660;
case ArchiveType::TAR:
pFunc = archive_read_support_format_tar;
break;
case ArchiveType::WARC:
pFunc = archive_read_support_format_warc;
break;
case ArchiveType::XAR:
pFunc = archive_read_support_format_xar;
break;
default:
pFunc = archive_read_support_format_all;
}
std::function<int(archive*)> pFunc = GetCurrentFormatReadFunc();
ChkErr(pFunc(m_archive));
m_open = true;
}
@@ -182,6 +157,33 @@ namespace OpenVulkano
}
}
std::function<int(archive*)> ArchiveReader::GetCurrentFormatReadFunc() const
{
if (!m_archiveType)
{
return archive_read_support_format_all;
}
ArchiveType::Type type = *m_archiveType;
switch (type)
{
case ArchiveType::ZIP:
return archive_read_support_format_zip;
case ArchiveType::SEVEN_ZIP:
return archive_read_support_format_7zip;
case ArchiveType::CPIO:
return archive_read_support_format_cpio;
case ArchiveType::ISO:
return archive_read_support_format_iso9660;
case ArchiveType::TAR:
return archive_read_support_format_tar;
case ArchiveType::WARC:
return archive_read_support_format_warc;
case ArchiveType::XAR:
return archive_read_support_format_xar;
}
return archive_read_support_format_all;
}
size_t ArchiveReader::ExtractRemaining(std::string_view targetDir)
{
size_t count = 0;
@@ -289,6 +291,19 @@ namespace OpenVulkano
return std::nullopt;
}
std::optional<std::pair<FileDescription, Array<char>>> ArchiveReader::GetFile(const std::string& path)
{
while (HasNext())
{
const std::pair<FileDescription, Array<char>> info = *GetNextFile();
if (info.first.path == path)
{
return info;
}
}
return {};
}
bool ArchiveReader::GetNextFileAsStream(const std::function<void(const FileDescription&, std::istream&)>& streamReader)
{
if (SkipTill(std::filesystem::file_type::regular))