aboutsummaryrefslogtreecommitdiff
path: root/engines/fullpipe/utils.h
diff options
context:
space:
mode:
authorColin Snover2017-11-14 22:30:35 -0600
committerEugene Sandulenko2017-11-18 22:35:12 +0100
commite2367f3ed2060b273559200b3e40f75a98bb6a6f (patch)
treecfea744f09c075bedb9b3f4a3e9489bf5b14d829 /engines/fullpipe/utils.h
parent39ea2f66ac635613c3a817c16f80b11ac207d320 (diff)
downloadscummvm-rg350-e2367f3ed2060b273559200b3e40f75a98bb6a6f.tar.gz
scummvm-rg350-e2367f3ed2060b273559200b3e40f75a98bb6a6f.tar.bz2
scummvm-rg350-e2367f3ed2060b273559200b3e40f75a98bb6a6f.zip
FULLPIPE: Remove unnecessary and unsafe C-style casts
Diffstat (limited to 'engines/fullpipe/utils.h')
-rw-r--r--engines/fullpipe/utils.h32
1 files changed, 29 insertions, 3 deletions
diff --git a/engines/fullpipe/utils.h b/engines/fullpipe/utils.h
index 2b97ab6480..8966ceb8ba 100644
--- a/engines/fullpipe/utils.h
+++ b/engines/fullpipe/utils.h
@@ -58,7 +58,17 @@ public:
int readCount();
double readDouble();
CObject *parseClass(bool *isCopyReturned);
- CObject *readClass();
+
+ template <typename T>
+ T *readClass() {
+ CObject *obj = readBaseClass();
+ if (!obj)
+ return nullptr;
+
+ T *res = dynamic_cast<T *>(obj);
+ assert(res);
+ return res;
+ }
void writeObject(CObject *obj);
@@ -76,6 +86,7 @@ public:
private:
void init();
+ CObject *readBaseClass();
};
enum ObjType {
@@ -106,9 +117,24 @@ public:
bool loadFile(const Common::String &fname);
};
-class ObList : public Common::List<CObject *>, public CObject {
+template <class T>
+class ObList : public Common::List<T *>, public CObject {
public:
- virtual bool load(MfcArchive &file);
+ virtual bool load(MfcArchive &file) {
+ debugC(5, kDebugLoading, "ObList::load()");
+ int count = file.readCount();
+
+ debugC(9, kDebugLoading, "ObList::count: %d:", count);
+
+ for (int i = 0; i < count; i++) {
+ debugC(9, kDebugLoading, "ObList::[%d]", i);
+ T *t = file.readClass<T>();
+
+ this->push_back(t);
+ }
+
+ return true;
+ }
};
class MemoryObject : CObject {