aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJohannes Schickel2012-01-27 20:35:34 +0100
committerJohannes Schickel2012-01-27 20:35:34 +0100
commit827cdbd22ea5b9d66848ddc1cdf9cee0afaea0f4 (patch)
tree26c356c7a0e3c80f8eedf59be4a8c4824a7a0ea6 /engines
parenta231f9d5ddb685a5a4817c5ff89e493825f12148 (diff)
downloadscummvm-rg350-827cdbd22ea5b9d66848ddc1cdf9cee0afaea0f4.tar.gz
scummvm-rg350-827cdbd22ea5b9d66848ddc1cdf9cee0afaea0f4.tar.bz2
scummvm-rg350-827cdbd22ea5b9d66848ddc1cdf9cee0afaea0f4.zip
AGOS: Make ArchiveMan a proper sub-type of SearchSet.
Now all of the Archive API is implemented to avoid possibly inconsistent behavior when an ArchiveMan object is accessed via a class type higher in the class hierachy.
Diffstat (limited to 'engines')
-rw-r--r--engines/agos/agos.h4
-rw-r--r--engines/agos/res.cpp18
2 files changed, 22 insertions, 0 deletions
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 9b9cbce94f..d9f982a0fa 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -198,6 +198,10 @@ public:
#endif
virtual bool hasFile(const Common::String &name) const;
+ virtual int listMatchingMembers(Common::ArchiveMemberList &list, const Common::String &pattern) const;
+ virtual int listMembers(Common::ArchiveMemberList &list) const;
+
+ virtual const Common::ArchiveMemberPtr getMember(const Common::String &name) const;
virtual Common::SeekableReadStream *createReadStreamForMember(const Common::String &filename) const;
private:
diff --git a/engines/agos/res.cpp b/engines/agos/res.cpp
index 03acb0a161..0305879390 100644
--- a/engines/agos/res.cpp
+++ b/engines/agos/res.cpp
@@ -54,6 +54,24 @@ bool ArchiveMan::hasFile(const Common::String &name) const {
return Common::SearchSet::hasFile(name);
}
+int ArchiveMan::listMatchingMembers(Common::ArchiveMemberList &list, const Common::String &pattern) const {
+ const int matches = _fallBack ? SearchMan.listMatchingMembers(list, pattern) : 0;
+ return matches + Common::SearchSet::listMatchingMembers(list, pattern);
+}
+
+int ArchiveMan::listMembers(Common::ArchiveMemberList &list) const {
+ const int matches = _fallBack ? SearchMan.listMembers(list) : 0;
+ return matches + Common::SearchSet::listMembers(list);
+}
+
+const Common::ArchiveMemberPtr ArchiveMan::getMember(const Common::String &name) const {
+ Common::ArchiveMemberPtr ptr = _fallBack ? SearchMan.getMember(name) : Common::ArchiveMemberPtr();
+ if (ptr)
+ return ptr;
+
+ return Common::SearchSet::getMember(name);
+}
+
Common::SeekableReadStream *ArchiveMan::createReadStreamForMember(const Common::String &filename) const {
if (_fallBack && SearchMan.hasFile(filename)) {
return SearchMan.createReadStreamForMember(filename);