#include #include #include #include static const irr::io::path s; irr::u32 RezFileList::getFileCount(const rez::dir &dir) const { irr::u32 ret = 0; for (const auto &d : dir.entries()) { const auto &entry = d.second; if (std::holds_alternative(entry)) ret += getFileCount(std::get(entry)); else if (std::holds_alternative(entry)) ret++; } return ret; } irr::u32 RezFileList::getFileCount() const { return getFileCount(rez.root()); } const irr::io::path &RezFileList::getFileName(irr::u32 index) const { return s; } const irr::io::path &RezFileList::getFullFileName(irr::u32 index) const { return s; } irr::u32 RezFileList::getFileSize(irr::u32 index) const { return 0; } irr::u32 RezFileList::getFileOffset(irr::u32 index) const { return 0; } irr::u32 RezFileList::getID(irr::u32 index) const { return 0; } bool RezFileList::isDirectory(irr::u32 index) const { if (index >= entries.size()) return false; return std::holds_alternative(*entries.at(index)); } int RezFileList::findFile(const irr::io::path &filename, bool isFolder, const rez::dir::direntry *entry) const { if (std::holds_alternative(*entry)) { const auto &resource = std::get(*entry); if (resource.name() == filename.c_str()) { if (isFolder) { std::cerr << filename.c_str() << " expected to be a " "directory, but is a file\n"; return -1; } else return 1; } } else if (std::holds_alternative(*entry) && isFolder) { const auto &dir = std::get(*entry); if (dir.name() == filename.c_str()) { if (!isFolder) { std::cerr << filename.c_str() << " expected to be a " "file, but is a directory\n"; return -1; } else return 1; } } return 0; } irr::s32 RezFileList::findFile(const irr::io::path &filename, bool isFolder) const { for (irr::u32 i = 0; i < entries.size(); i++) { auto entry = entries.at(i); int n = findFile(filename, isFolder, entry); if (n < 0) return -1; else if (n) return i; } const rez::dir::direntry *entry = rez.access(filename.c_str()); if (!entry || findFile(filename, isFolder, entry) <= 0) return -1; entries.push_back(entry); return entries.size() - 1; } const irr::io::path &RezFileList::getPath() const { return s; } irr::u32 RezFileList::addItem(const irr::io::path &fullPath, irr::u32 offset, irr::u32 size, bool isDirectory, irr::u32 id) { return 0; } void RezFileList::sort() { } RezFileList::RezFileList(const rez::ball &rez) : rez(rez) { }