[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