From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- .../openmpt-trunk/unarchiver/archive.h | 96 ++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Src/external_dependencies/openmpt-trunk/unarchiver/archive.h (limited to 'Src/external_dependencies/openmpt-trunk/unarchiver/archive.h') diff --git a/Src/external_dependencies/openmpt-trunk/unarchiver/archive.h b/Src/external_dependencies/openmpt-trunk/unarchiver/archive.h new file mode 100644 index 00000000..87b508b1 --- /dev/null +++ b/Src/external_dependencies/openmpt-trunk/unarchiver/archive.h @@ -0,0 +1,96 @@ +/* + * archive.h + * --------- + * Purpose: archive loader + * Notes : (currently none) + * Authors: OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + +#pragma once + +#include "openmpt/all/BuildSettings.hpp" + +#include "../common/FileReader.h" +#include +#include + +OPENMPT_NAMESPACE_BEGIN + +enum class ArchiveFileType +{ + Invalid, + Normal, + Special, +}; + +struct ArchiveFileInfo +{ + mpt::PathString name; + ArchiveFileType type = ArchiveFileType::Invalid; + uint64 size = 0; + mpt::ustring comment; + uint64 cookie1 = 0; + uint64 cookie2 = 0; +}; + +class IArchive +{ +public: + using const_iterator = std::vector::const_iterator; +protected: + IArchive() {} +public: + virtual ~IArchive() {} + +public: + virtual bool IsArchive() const = 0; + virtual mpt::ustring GetComment() const = 0; + virtual bool ExtractFile(std::size_t index) = 0; + virtual FileReader GetOutputFile() const = 0; + virtual std::size_t size() const = 0; + virtual IArchive::const_iterator begin() const = 0; + virtual IArchive::const_iterator end() const = 0; + virtual const ArchiveFileInfo & operator [] (std::size_t index) const = 0; +}; + +class ArchiveBase + : public IArchive +{ +protected: + FileReader inFile; + mpt::ustring comment; + std::vector contents; + std::vector data; +public: + ArchiveBase(const FileReader &inFile) + : inFile(inFile) + { + return; + } + ~ArchiveBase() override + { + return; + } + bool ExtractFile(std::size_t index) override { MPT_UNREFERENCED_PARAMETER(index); return false; } // overwrite this +public: + bool IsArchive() const override + { + return !contents.empty(); + } + mpt::ustring GetComment() const override + { + return comment; + } + FileReader GetOutputFile() const override + { + return FileReader(mpt::byte_cast(mpt::as_span(data))); + } + std::size_t size() const override { return contents.size(); } + IArchive::const_iterator begin() const override { return contents.begin(); } + IArchive::const_iterator end() const override { return contents.end(); } + const ArchiveFileInfo & operator [] (std::size_t index) const override { return contents[index]; } +}; + + +OPENMPT_NAMESPACE_END -- cgit