[Scummvm-cvs-logs] SF.net SVN: scummvm:[34831] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Tue Oct 21 13:42:08 CEST 2008


Revision: 34831
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34831&view=rev
Author:   lordhoto
Date:     2008-10-21 11:42:08 +0000 (Tue, 21 Oct 2008)

Log Message:
-----------
Cleanup.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/resource.cpp
    scummvm/trunk/engines/kyra/resource.h
    scummvm/trunk/engines/kyra/staticres.cpp

Modified: scummvm/trunk/engines/kyra/resource.cpp
===================================================================
--- scummvm/trunk/engines/kyra/resource.cpp	2008-10-20 21:55:20 UTC (rev 34830)
+++ scummvm/trunk/engines/kyra/resource.cpp	2008-10-21 11:42:08 UTC (rev 34831)
@@ -108,7 +108,13 @@
 		};
 
 		for (uint i = 0; i < ARRAYSIZE(list); ++i) {
-			Common::ArchivePtr archive = loadArchive(list[i]);
+			Common::ArchiveMemberList fileList;
+			listFiles(list[i], fileList);
+
+			if (fileList.empty())
+				error("Couldn't load PAK file '%s'", list[i]);
+
+			Common::ArchivePtr archive = loadArchive(list[i], *fileList.begin());
 			if (archive)
 				_protectedFiles->add(list[i], archive, 0);
 		}
@@ -137,14 +143,26 @@
 bool Resource::loadPakFile(Common::String filename) {
 	filename.toUppercase();
 
-	if (_archiveFiles->hasArchive(filename) || _protectedFiles->hasArchive(filename))
+	Common::ArchiveMemberList list;
+	_files.listMatchingMembers(list, filename);
+
+	if (list.empty())
+		return false;
+
+	return loadPakFile(filename, *list.begin());
+}
+
+bool Resource::loadPakFile(Common::String name, Common::SharedPtr<Common::ArchiveMember> file) {
+	name.toUppercase();
+
+	if (_archiveFiles->hasArchive(name) || _protectedFiles->hasArchive(name))
 		return true;
 
-	Common::ArchivePtr archive = loadArchive(filename);
+	Common::ArchivePtr archive = loadArchive(name, file);
 	if (!archive)
 		return false;
 
-	_archiveFiles->add(filename, archive, 0);
+	_archiveFiles->add(name, archive, 0);
 
 	return true;
 }
@@ -200,9 +218,11 @@
 	return true;
 }
 
-void Resource::unloadPakFile(Common::String filename) {
+void Resource::unloadPakFile(Common::String filename, bool remFromCache) {
 	filename.toUppercase();
 	_archiveFiles->remove(filename);
+	if (remFromCache)
+		_archiveCache.erase(filename);
 	// We do not remove files from '_protectedFiles' here, since
 	// those are protected against unloading.
 }
@@ -212,11 +232,20 @@
 	return (_archiveFiles->hasArchive(filename) || _protectedFiles->hasArchive(filename));
 }
 
+bool Resource::isInCacheList(Common::String name) {
+	name.toUppercase();
+	return (_archiveCache.find(name) != _archiveCache.end());
+}
+
 void Resource::unloadAllPakFiles() {
 	_archiveFiles->clear();
 	_protectedFiles->clear();
 }
 
+void Resource::listFiles(const Common::String &pattern, Common::ArchiveMemberList &list) {
+	_files.listMatchingMembers(list, pattern);
+}
+
 uint8 *Resource::fileData(const char *file, uint32 *size) {
 	Common::SeekableReadStream *stream = getFileStream(file);
 	if (!stream)
@@ -265,21 +294,11 @@
 	return _files.openFile(file);
 }
 
-Common::ArchivePtr Resource::loadArchive(const Common::String &file) {
-	ArchiveMap::iterator cachedArchive = _archiveCache.find(file);
+Common::ArchivePtr Resource::loadArchive(const Common::String &name, Common::SharedPtr<Common::ArchiveMember> member) {
+	ArchiveMap::iterator cachedArchive = _archiveCache.find(name);
 	if (cachedArchive != _archiveCache.end())
 		return cachedArchive->_value;
 
-	Common::ArchiveMemberList list;
-	_files.listMatchingMembers(list, file);
-
-	if (list.empty())
-		return Common::ArchivePtr();
-
-	return loadArchive(file, *list.begin());
-}
-
-Common::ArchivePtr Resource::loadArchive(const Common::String &name, Common::SharedPtr<Common::ArchiveMember> member) {
 	Common::SeekableReadStream *stream = member->open();
 
 	if (!stream)

Modified: scummvm/trunk/engines/kyra/resource.h
===================================================================
--- scummvm/trunk/engines/kyra/resource.h	2008-10-20 21:55:20 UTC (rev 34830)
+++ scummvm/trunk/engines/kyra/resource.h	2008-10-21 11:42:08 UTC (rev 34831)
@@ -47,7 +47,6 @@
 class ResArchiveLoader;
 
 class Resource {
-	friend class StaticResource;
 public:
 	Resource(KyraEngine_v1 *vm);
 	~Resource();
@@ -55,14 +54,20 @@
 	bool reset();
 
 	bool loadPakFile(Common::String filename);
-	void unloadPakFile(Common::String filename);
+	bool loadPakFile(Common::String name, Common::SharedPtr<Common::ArchiveMember> file);
+	void unloadPakFile(Common::String filename, bool remFromCache = false);
 	bool isInPakList(Common::String filename);
+	bool isInCacheList(Common::String name);
 
 	bool loadFileList(const Common::String &filedata);
 	bool loadFileList(const char * const *filelist, uint32 numFiles);
-	// This unloads *all* pakfiles, even kyra.dat and protected ones
+
+	// This unloads *all* pakfiles, even kyra.dat and protected ones.
+	// It does not remove files from cache though!
 	void unloadAllPakFiles();
 
+	void listFiles(const Common::String &pattern, Common::ArchiveMemberList &list);
+
 	bool exists(const char *file, bool errorOutOnFail=false);
 	uint32 getFileSize(const char *file);
 	uint8* fileData(const char *file, uint32 *size);
@@ -77,7 +82,6 @@
 	Common::SharedPtr<Common::SearchSet> _archiveFiles;
 	Common::SharedPtr<Common::SearchSet> _protectedFiles;
 
-	Common::ArchivePtr loadArchive(const Common::String &file);
 	Common::ArchivePtr loadArchive(const Common::String &name, Common::SharedPtr<Common::ArchiveMember> member);
 	Common::ArchivePtr loadInstallerArchive(const Common::String &file, const Common::String &ext, const uint8 offset);
 

Modified: scummvm/trunk/engines/kyra/staticres.cpp
===================================================================
--- scummvm/trunk/engines/kyra/staticres.cpp	2008-10-20 21:55:20 UTC (rev 34830)
+++ scummvm/trunk/engines/kyra/staticres.cpp	2008-10-21 11:42:08 UTC (rev 34831)
@@ -136,11 +136,11 @@
 bool StaticResource::loadStaticResourceFile() {
 	Resource *res = _vm->resource();
 
-	if (res->_archiveCache.find(staticDataFilename()) != res->_archiveCache.end())
+	if (res->isInCacheList(staticDataFilename()))
 		return true;
 
 	Common::ArchiveMemberList kyraDatFiles;
-	res->_files.listMatchingMembers(kyraDatFiles, staticDataFilename());
+	res->listFiles(staticDataFilename(), kyraDatFiles);
 
 	bool foundWorkingKyraDat = false;
 	for (Common::ArchiveMemberList::iterator i = kyraDatFiles.begin(); i != kyraDatFiles.end(); ++i) {
@@ -152,18 +152,15 @@
 
 		delete file; file = 0;
 
-		Common::ArchivePtr archive = res->loadArchive(staticDataFilename(), *i);
-		if (!archive)
+		if (!res->loadPakFile(staticDataFilename(), *i))
 			continue;
-	
-		res->_archiveFiles->add(staticDataFilename(), archive, 0);
+
 		if (tryKyraDatLoad()) {
 			foundWorkingKyraDat = true;
 			break;
 		}
 
-		res->_archiveCache.erase(staticDataFilename());
-		res->_archiveFiles->remove(staticDataFilename());
+		res->unloadPakFile(staticDataFilename(), true);
 		unloadId(-1);
 	}
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list