Extend ArchiveReader to allow opening the archive later
This commit is contained in:
@@ -17,33 +17,58 @@ namespace openVulkanoCpp
|
||||
constexpr int BUFFER_SIZE = 16384;
|
||||
}
|
||||
|
||||
ArchiveReader::ArchiveReader(const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveBase(archive_read_new(), nullptr, logger)
|
||||
{}
|
||||
|
||||
ArchiveReader::ArchiveReader(const std::string& archiveFile, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveReader(archiveFile.c_str(), logger)
|
||||
: ArchiveReader(archiveFile.c_str(), logger)
|
||||
{}
|
||||
|
||||
ArchiveReader::ArchiveReader(const char* archiveFile, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveBase(archive_read_new(), nullptr, logger)
|
||||
: ArchiveReader(logger)
|
||||
{
|
||||
ChkErr(archive_read_support_filter_all(m_archive));
|
||||
ChkErr(archive_read_support_format_all(m_archive));
|
||||
ChkErr(archive_read_open_filename(m_archive, archiveFile, BUFFER_SIZE));
|
||||
ReadNextHeader();
|
||||
Open(archiveFile);
|
||||
}
|
||||
|
||||
ArchiveReader::ArchiveReader(const void* archiveBuffer, const size_t size, const std::shared_ptr<spdlog::logger>& logger)
|
||||
: ArchiveBase(archive_read_new(), nullptr, logger)
|
||||
: ArchiveReader(logger)
|
||||
{
|
||||
ChkErr(archive_read_support_filter_all(m_archive));
|
||||
ChkErr(archive_read_support_format_all(m_archive));
|
||||
ChkErr(archive_read_open_memory(m_archive, archiveBuffer, size));
|
||||
ReadNextHeader();
|
||||
Open(archiveBuffer, size);
|
||||
}
|
||||
|
||||
ArchiveReader::~ArchiveReader() = default;
|
||||
|
||||
bool ArchiveReader::Open(const char* archiveFile)
|
||||
{
|
||||
if (m_open) ChkErr(archive_read_close(m_archive));
|
||||
ChkErr(archive_read_support_filter_all(m_archive));
|
||||
ChkErr(archive_read_support_format_all(m_archive));
|
||||
ChkErr(archive_read_open_filename(m_archive, archiveFile, BUFFER_SIZE));
|
||||
m_open = true;
|
||||
ReadNextHeader();
|
||||
return HasNext();
|
||||
}
|
||||
|
||||
bool ArchiveReader::Open(const std::string& archiveFile)
|
||||
{
|
||||
return Open(archiveFile.c_str());
|
||||
}
|
||||
|
||||
bool ArchiveReader::Open(const void* archiveBuffer, size_t size)
|
||||
{
|
||||
if (m_open) ChkErr(archive_read_close(m_archive));
|
||||
ChkErr(archive_read_support_filter_all(m_archive));
|
||||
ChkErr(archive_read_support_format_all(m_archive));
|
||||
ChkErr(archive_read_open_memory(m_archive, archiveBuffer, size));
|
||||
m_open = true;
|
||||
ReadNextHeader();
|
||||
return HasNext();
|
||||
}
|
||||
|
||||
void ArchiveReader::ReadNextHeader()
|
||||
{
|
||||
if (m_eof)
|
||||
if (m_eof || !m_open)
|
||||
{
|
||||
m_archiveEntry = nullptr;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user