diff options
Diffstat (limited to 'common/archive.cpp')
-rw-r--r-- | common/archive.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/common/archive.cpp b/common/archive.cpp index cac6680e76..91ed49c5c2 100644 --- a/common/archive.cpp +++ b/common/archive.cpp @@ -159,30 +159,29 @@ void FSDirectory::cacheDirectoryRecursive(FilesystemNode node, int depth, const } -int FSDirectory::matchPattern(StringList &list, const String &pattern) { - if (pattern.empty() || !_node.isDirectory()) { +int FSDirectory::getAllNames(StringList &list) { + if (!_node.isDirectory()) return 0; - } + // Cache dir data if (!_cached) { cacheDirectoryRecursive(_node, _depth, ""); _cached = true; } - return Archive::matchPattern(list, pattern); -} - - - - - -SearchSet::SearchSet() { - + // Small optimization: Ensure the StringList has to grow at most once + list.reserve(list.size() + _fileCache.size()); + + // Add all filenames from our cache + NodeCache::iterator it = _fileCache.begin(); + for ( ; it != _fileCache.end(); it++) { + list.push_back((*it)._key); + } + + return _fileCache.size(); } -SearchSet::~SearchSet() { -} SearchSet::ArchiveList::iterator SearchSet::find(const String &name) const { ArchiveList::iterator it = _list.begin(); |