diff options
| author | Max Horn | 2008-09-05 20:26:36 +0000 | 
|---|---|---|
| committer | Max Horn | 2008-09-05 20:26:36 +0000 | 
| commit | e5c8ebf995a8500d5c99cc238f911eac43e8073d (patch) | |
| tree | 8a5d3d79555e83e7021b4debcee60d28845914a6 | |
| parent | 2c20e138a220c706fd5d2e6c23616239566da18f (diff) | |
| download | scummvm-rg350-e5c8ebf995a8500d5c99cc238f911eac43e8073d.tar.gz scummvm-rg350-e5c8ebf995a8500d5c99cc238f911eac43e8073d.tar.bz2 scummvm-rg350-e5c8ebf995a8500d5c99cc238f911eac43e8073d.zip  | |
Fix class FSDirectory (matchPattern would call getAllNames would call matchPattern would call ...); some cleanup
svn-id: r34366
| -rw-r--r-- | common/archive.cpp | 27 | ||||
| -rw-r--r-- | common/archive.h | 12 | 
2 files changed, 18 insertions, 21 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(); diff --git a/common/archive.h b/common/archive.h index 1523eef651..c543e1f3c8 100644 --- a/common/archive.h +++ b/common/archive.h @@ -71,9 +71,7 @@ public:  	 *  	 * @return The number of names added to list.  	 */ -	virtual int getAllNames(StringList &list) { -		return matchPattern(list, "*"); -	} +	virtual int getAllNames(StringList &list) = 0;  	/**  	 * Create a stream bound to a file in the archive. @@ -139,7 +137,7 @@ public:  	FSDirectory *getSubDirectory(const String &name);  	virtual bool hasFile(const String &name); -	virtual int matchPattern(StringList &list, const String &pattern); +	virtual int getAllNames(StringList &list);  	virtual SeekableReadStream *openFile(const String &name);  }; @@ -166,9 +164,6 @@ class SearchSet : public Archive {  	void insert(const Node& node);  public: -	SearchSet(); -	virtual ~SearchSet(); -  	/**  	 * Add a new Archive to the searchable set.  	 */ @@ -191,6 +186,9 @@ public:  	virtual bool hasFile(const String &name);  	virtual int matchPattern(StringList &list, const String &pattern); +	virtual int getAllNames(StringList &list) { +		return matchPattern(list, "*"); +	}  	/**  	 * Implements openFile from Archive base class. The current policy is  | 
