aboutsummaryrefslogtreecommitdiff
path: root/src/irrlicht/RezArchive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/irrlicht/RezArchive.cpp')
-rw-r--r--src/irrlicht/RezArchive.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/irrlicht/RezArchive.cpp b/src/irrlicht/RezArchive.cpp
new file mode 100644
index 0000000..8b9ff05
--- /dev/null
+++ b/src/irrlicht/RezArchive.cpp
@@ -0,0 +1,44 @@
+#include <RezArchive.h>
+#include <RezReadFile.h>
+#include <rez.h>
+#include <memory>
+
+irr::io::IReadFile *RezArchive::createAndOpenFile(const irr::io::path &filename)
+{
+ std::unique_ptr<rez::file> f = rez.open(filename.c_str());
+
+ if (!f)
+ return nullptr;
+
+ return new RezReadFile(std::move(f), filename);
+}
+
+irr::io::IReadFile *RezArchive::createAndOpenFile(irr::u32 index)
+{
+ return nullptr;
+}
+
+const irr::io::IFileList *RezArchive::getFileList() const
+{
+ return filelist.get();
+}
+
+irr::io::E_FILE_ARCHIVE_TYPE RezArchive::getType() const
+{
+ return static_cast<irr::io::E_FILE_ARCHIVE_TYPE>
+ (MAKE_IRR_ID('r', 'e', 'z', 0));
+}
+
+int RezArchive::parse()
+{
+ if (rez.parse())
+ return -1;
+
+ filelist = std::make_unique<RezFileList>(rez);
+ return 0;
+}
+
+RezArchive::RezArchive(const irr::io::path &filename) :
+ rez(filename.c_str())
+{
+}