ArchiveMemberPtr SearchSet::getMember(const String &name) { if (name.empty()) return ArchiveMemberPtr(); ArchiveNodeList::iterator it = _list.begin(); for ( ; it != _list.end(); ++it) { if (it->_arc->hasFile(name)) return it->_arc->getMember(name); } return ArchiveMemberPtr(); }
const ArchiveMemberPtr FSDirectory::getMember(const String &name) const { if (name.empty() || !_node.isDirectory()) return ArchiveMemberPtr(); FSNode *node = lookupCache(_fileCache, name); if (!node || !node->exists()) { warning("FSDirectory::getMember: '%s' does not exist", name.c_str()); return ArchiveMemberPtr(); } else if (node->isDirectory()) { warning("FSDirectory::getMember: '%s' is a directory", name.c_str()); return ArchiveMemberPtr(); } return ArchiveMemberPtr(new FSNode(*node)); }
int FSDirectory::listMembers(ArchiveMemberList &list) const { if (!_node.isDirectory()) return 0; // Cache dir data ensureCached(); int files = 0; for (NodeCache::const_iterator it = _fileCache.begin(); it != _fileCache.end(); ++it) { list.push_back(ArchiveMemberPtr(new FSNode(it->_value))); ++files; } return files; }
int FSDirectory::listMatchingMembers(ArchiveMemberList &list, const String &pattern) { if (!_node.isDirectory()) return 0; // Cache dir data ensureCached(); String lowercasePattern(pattern); lowercasePattern.toLowercase(); int matches = 0; NodeCache::iterator it = _fileCache.begin(); for ( ; it != _fileCache.end(); ++it) { if (it->_key.matchString(lowercasePattern, true)) { list.push_back(ArchiveMemberPtr(new FSNode(it->_value))); matches++; } } return matches; }
int FSDirectory::listMatchingMembers(ArchiveMemberList &list, const String &pattern) const { if (!_node.isDirectory()) return 0; // Cache dir data ensureCached(); // need to match lowercase key, since all entries in our file cache are // stored as lowercase. String lowercasePattern(pattern); lowercasePattern.toLowercase(); int matches = 0; NodeCache::const_iterator it = _fileCache.begin(); for ( ; it != _fileCache.end(); ++it) { if (it->_key.matchString(lowercasePattern, false, true)) { list.push_back(ArchiveMemberPtr(new FSNode(it->_value))); matches++; } } return matches; }
const ArchiveMemberPtr CdfArchive::getMember(const String &name) const { return hasFile(name) ? ArchiveMemberPtr(new GenericArchiveMember(name, this)) : ArchiveMemberPtr(); }
ArchiveMemberPtr ZipArchive::getMember(const String &name) { if (!hasFile(name)) return ArchiveMemberPtr(); return ArchiveMemberPtr(new GenericArchiveMember(name, this)); }