* Implemented a default matchPattern for Archive subclasses (courtesy of Fingolfin).

* Fixed bug in FSDirectory::matchPattern.

svn-id: r34359
This commit is contained in:
Nicola Mettifogo 2008-09-05 18:24:41 +00:00
parent 0ae32fe32c
commit 87d67be832
2 changed files with 26 additions and 5 deletions

View File

@ -25,12 +25,34 @@
#include "common/archive.h"
#include "common/fs.h"
#include "common/file.h"
#include "common/util.h"
namespace Common {
int Archive::matchPattern(StringList &list, const String &pattern) {
// Get all "names" (TODO: "files" ?)
StringList allNames;
getAllNames(allNames);
int matches = 0;
// need to match lowercase key
String lowercasePattern = pattern;
lowercasePattern.toLowercase();
StringList::iterator it = allNames.begin();
for ( ; it != allNames.end(); it++) {
if (matchString(it->c_str(), lowercasePattern.c_str())) {
list.push_back(*it);
matches++;
}
}
return matches;
}
FSDirectory::FSDirectory(const FilesystemNode &node, int depth)
: _node(node), _cached(false), _depth(depth) {
}
@ -158,7 +180,8 @@ int FSDirectory::matchPattern(StringList &list, const String &pattern) {
NodeCache::iterator it = _fileCache.begin();
for ( ; it != _fileCache.end(); it++) {
if (matchString((*it)._key.c_str(), lowercasePattern.c_str())) {
list.push_back((*it)._key.c_str());
list.push_back((*it)._key);
matches++;
}
}
@ -283,5 +306,4 @@ SeekableReadStream *SearchSet::openFile(const String &name) {
return 0;
}
} // namespace Common

View File

@ -62,7 +62,7 @@ public:
*
* @return The number of names added to list.
*/
virtual int matchPattern(StringList &list, const String &pattern) = 0;
virtual int matchPattern(StringList &list, const String &pattern);
/**
* Add all the names present in the Archive. Returned
@ -144,7 +144,6 @@ public:
};
/**
* SearchSet enables access to a group of Archives through the Archive interface.
* Its intended usage is a situation in which there are no name clashes among names in the