diff options
author | whiterandrek | 2018-04-06 10:03:56 +0300 |
---|---|---|
committer | Eugene Sandulenko | 2018-06-28 23:51:32 +0200 |
commit | 78c4ed85ab7a84b18c8c7fd2e93c6bf2798acab6 (patch) | |
tree | ca77eaa6eb335e6eb57fcbd50e2515d26eb7fffe /engines/pink/archive.h | |
parent | c29b1d1112b70fcb017359f9a28eb8b7de49a5ab (diff) | |
download | scummvm-rg350-78c4ed85ab7a84b18c8c7fd2e93c6bf2798acab6.tar.gz scummvm-rg350-78c4ed85ab7a84b18c8c7fd2e93c6bf2798acab6.tar.bz2 scummvm-rg350-78c4ed85ab7a84b18c8c7fd2e93c6bf2798acab6.zip |
PINK: implemented page state saving
Diffstat (limited to 'engines/pink/archive.h')
-rw-r--r-- | engines/pink/archive.h | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/engines/pink/archive.h b/engines/pink/archive.h index 5e6c091c99..45554b8553 100644 --- a/engines/pink/archive.h +++ b/engines/pink/archive.h @@ -25,6 +25,8 @@ #include <engines/pink/objects/object.h> #include <common/str-array.h> +#include "common/stream.h" +#include "common/hash-str.h" namespace Common { @@ -36,7 +38,8 @@ namespace Pink { class Archive { public: - Archive(Common::File &file); + Archive(Common::SeekableReadStream *stream); + Archive(Common::WriteStream *stream); ~Archive(); void mapObject(Object *obj); @@ -45,8 +48,12 @@ public: uint32 readDWORD(); uint16 readWORD(); + void writeDWORD(uint32 val); + void writeWORD(uint16 val); + Object *readObject(); Common::String readString(); + void writeString(const Common::String &string); private: uint findObjectId(const char *name); @@ -55,7 +62,8 @@ private: Common::Array<Object *> _objectMap; Common::Array<uint> _objectIdMap; - Common::File &_file; + Common::SeekableReadStream *_readStream; + Common::WriteStream *_writeStream; }; template <typename T> @@ -63,7 +71,8 @@ inline Archive &operator>>(Archive &archive, Common::Array<T> &arr){ uint size = archive.readCount(); arr.resize(size); for (uint i = 0; i < size; ++i) { - arr[i] = reinterpret_cast<T> (archive.readObject()); + arr[i] = dynamic_cast<T>(archive.readObject()); + assert(arr[i]); } return archive; } @@ -98,6 +107,45 @@ inline Archive &operator>>(Archive &archive, Common::StringArray &array){ return archive; } +inline Archive &operator>>(Archive &archive, Common::StringMap &map){ + archive.readCount(); + map.setVal(archive.readString(), archive.readString()); + return archive; +} + +inline Archive &operator<<(Archive &archive, Common::String &string){ + archive.writeString(string); + return archive; +} + +inline Archive &operator<<(Archive &archive, uint32 &num){ + archive.writeDWORD(num); + return archive; +} + +inline Archive &operator<<(Archive &archive, uint16 &num){ + archive.writeWORD(num); + return archive; +} + +inline Archive &operator<<(Archive &archive, Common::StringArray &array){ + archive.writeWORD(array.size()); + for (uint i = 0; i < array.size(); ++i) { + archive.writeString(array[i]); + } + return archive; +} + +inline Archive &operator<<(Archive &archive, Common::StringMap &map){ + archive.writeWORD(map.size()); + for (auto &pair : map) { + archive.writeString(pair._key); + archive.writeString(pair._value); + } + map.setVal(archive.readString(), archive.readString()); + return archive; +} + } // End of namespace Pink #endif |