aboutsummaryrefslogtreecommitdiff
path: root/engines/pink/archive.h
diff options
context:
space:
mode:
authorwhiterandrek2018-04-06 10:03:56 +0300
committerEugene Sandulenko2018-06-28 23:51:32 +0200
commit78c4ed85ab7a84b18c8c7fd2e93c6bf2798acab6 (patch)
treeca77eaa6eb335e6eb57fcbd50e2515d26eb7fffe /engines/pink/archive.h
parentc29b1d1112b70fcb017359f9a28eb8b7de49a5ab (diff)
downloadscummvm-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.h54
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