aboutsummaryrefslogtreecommitdiff
path: root/common/archive.cpp
diff options
context:
space:
mode:
authorMax Horn2009-02-24 03:22:34 +0000
committerMax Horn2009-02-24 03:22:34 +0000
commitd7b3c04588119eb122b23a1e923c5429492d2de5 (patch)
treed2f9eb6c0950740302b2f4a67169950610ddda4c /common/archive.cpp
parent35e33646750a7a315fd2c3fd15cdbe2ffc29131c (diff)
downloadscummvm-rg350-d7b3c04588119eb122b23a1e923c5429492d2de5.tar.gz
scummvm-rg350-d7b3c04588119eb122b23a1e923c5429492d2de5.tar.bz2
scummvm-rg350-d7b3c04588119eb122b23a1e923c5429492d2de5.zip
Moved FSDirectory implementation from common/archive.cpp to common/fs.cpp
svn-id: r38824
Diffstat (limited to 'common/archive.cpp')
-rw-r--r--common/archive.cpp180
1 files changed, 0 insertions, 180 deletions
diff --git a/common/archive.cpp b/common/archive.cpp
index 88c56d4908..7f81ecc7fb 100644
--- a/common/archive.cpp
+++ b/common/archive.cpp
@@ -65,186 +65,6 @@ int Archive::listMatchingMembers(ArchiveMemberList &list, const String &pattern)
return matches;
}
-FSDirectory::FSDirectory(const FSNode &node, int depth)
- : _node(node), _cached(false), _depth(depth) {
-}
-
-FSDirectory::FSDirectory(const String &prefix, const FSNode &node, int depth)
- : _node(node), _cached(false), _depth(depth) {
-
- setPrefix(prefix);
-}
-
-FSDirectory::FSDirectory(const String &name, int depth)
- : _node(name), _cached(false), _depth(depth) {
-}
-
-FSDirectory::FSDirectory(const String &prefix, const String &name, int depth)
- : _node(name), _cached(false), _depth(depth) {
-
- setPrefix(prefix);
-}
-
-FSDirectory::~FSDirectory() {
-}
-
-void FSDirectory::setPrefix(const String &prefix) {
- _prefix = prefix;
-
- if (!_prefix.empty() && !_prefix.hasSuffix("/"))
- _prefix += "/";
-}
-
-FSNode FSDirectory::getFSNode() const {
- return _node;
-}
-
-FSNode *FSDirectory::lookupCache(NodeCache &cache, const String &name) const {
- // make caching as lazy as possible
- if (!name.empty()) {
- ensureCached();
-
- if (cache.contains(name))
- return &cache[name];
- }
-
- return 0;
-}
-
-bool FSDirectory::hasFile(const String &name) {
- if (name.empty() || !_node.isDirectory())
- return false;
-
- FSNode *node = lookupCache(_fileCache, name);
- return node && node->exists();
-}
-
-ArchiveMemberPtr FSDirectory::getMember(const String &name) {
- if (name.empty() || !_node.isDirectory())
- return ArchiveMemberPtr();
-
- FSNode *node = lookupCache(_fileCache, name);
-
- if (!node || !node->exists()) {
- warning("FSDirectory::getMember: FSNode does not exist");
- return ArchiveMemberPtr();
- } else if (node->isDirectory()) {
- warning("FSDirectory::getMember: FSNode is a directory");
- return ArchiveMemberPtr();
- }
-
- return ArchiveMemberPtr(new FSNode(*node));
-}
-
-SeekableReadStream *FSDirectory::createReadStreamForMember(const String &name) const {
- if (name.empty() || !_node.isDirectory())
- return 0;
-
- FSNode *node = lookupCache(_fileCache, name);
- if (!node)
- return 0;
- SeekableReadStream *stream = node->createReadStream();
- if (!stream)
- warning("FSDirectory::createReadStreamForMember: Can't create stream for file '%s'", name.c_str());
-
- return stream;
-}
-
-FSDirectory *FSDirectory::getSubDirectory(const String &name, int depth) {
- return getSubDirectory(String::emptyString, name, depth);
-}
-
-FSDirectory *FSDirectory::getSubDirectory(const String &prefix, const String &name, int depth) {
- if (name.empty() || !_node.isDirectory())
- return 0;
-
- FSNode *node = lookupCache(_subDirCache, name);
- if (!node)
- return 0;
-
- return new FSDirectory(prefix, *node, depth);
-}
-
-void FSDirectory::cacheDirectoryRecursive(FSNode node, int depth, const String& prefix) const {
- if (depth <= 0)
- return;
-
- FSList list;
- node.getChildren(list, FSNode::kListAll, false);
-
- FSList::iterator it = list.begin();
- for ( ; it != list.end(); ++it) {
- String name = prefix + it->getName();
-
- // don't touch name as it might be used for warning messages
- String lowercaseName = name;
- lowercaseName.toLowercase();
-
- // since the hashmap is case insensitive, we need to check for clashes when caching
- if (it->isDirectory()) {
- if (_subDirCache.contains(lowercaseName)) {
- warning("FSDirectory::cacheDirectory: name clash when building cache, ignoring sub-directory '%s'", name.c_str());
- } else {
- cacheDirectoryRecursive(*it, depth - 1, lowercaseName + "/");
- _subDirCache[lowercaseName] = *it;
- }
- } else {
- if (_fileCache.contains(lowercaseName)) {
- warning("FSDirectory::cacheDirectory: name clash when building cache, ignoring file '%s'", name.c_str());
- } else {
- _fileCache[lowercaseName] = *it;
- }
- }
- }
-
-}
-
-void FSDirectory::ensureCached() const {
- if (_cached)
- return;
- cacheDirectoryRecursive(_node, _depth, _prefix);
- _cached = true;
-}
-
-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::listMembers(ArchiveMemberList &list) {
- if (!_node.isDirectory())
- return 0;
-
- // Cache dir data
- ensureCached();
-
- int files = 0;
- for (NodeCache::iterator it = _fileCache.begin(); it != _fileCache.end(); ++it) {
- list.push_back(ArchiveMemberPtr(new FSNode(it->_value)));
- ++files;
- }
-
- return files;
-}
-
-
-
SearchSet::ArchiveNodeList::iterator SearchSet::find(const String &name) const {