diff options
author | Colin Snover | 2017-11-14 22:30:35 -0600 |
---|---|---|
committer | Eugene Sandulenko | 2017-11-18 22:35:12 +0100 |
commit | e2367f3ed2060b273559200b3e40f75a98bb6a6f (patch) | |
tree | cfea744f09c075bedb9b3f4a3e9489bf5b14d829 /engines/fullpipe/utils.h | |
parent | 39ea2f66ac635613c3a817c16f80b11ac207d320 (diff) | |
download | scummvm-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.h | 32 |
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 { |