diff options
author | whitertandrek | 2018-03-17 17:36:18 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-06-28 23:51:32 +0200 |
commit | 5d1c4af5f6b1f197eb4c3af7dbc05b591047406d (patch) | |
tree | 9e30e98fc569aaf17ce97259ef7bf2255a07927a /engines/pink/archive.h | |
parent | d058e5dfe6b146373ce89c5710b6e723de687da5 (diff) | |
download | scummvm-rg350-5d1c4af5f6b1f197eb4c3af7dbc05b591047406d.tar.gz scummvm-rg350-5d1c4af5f6b1f197eb4c3af7dbc05b591047406d.tar.bz2 scummvm-rg350-5d1c4af5f6b1f197eb4c3af7dbc05b591047406d.zip |
PINK: Implemented MFC archive, some pink objects and their initialization
Thanks fullpipe engine developer for MFC archive
Diffstat (limited to 'engines/pink/archive.h')
-rw-r--r-- | engines/pink/archive.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/engines/pink/archive.h b/engines/pink/archive.h new file mode 100644 index 0000000000..6971b0f1bb --- /dev/null +++ b/engines/pink/archive.h @@ -0,0 +1,80 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef PINK_ARCHIVE_H +#define PINK_ARCHIVE_H + +#include <common/array.h> +#include <engines/pink/objects/object.h> + +namespace Common { + +class File; + +} + +namespace Pink { + +class Archive { +public: + Archive(Common::File &file); + ~Archive(); + + void mapObject(Object *obj); + int readCount(); + Object *readObject(); + Common::String readString(); + +private: + uint findObjectId(const char *name); + + Object *parseObject(bool &isCopyReturned); + + Common::Array<Object *> _objectMap; + Common::Array<uint> _objectIdMap; + Common::File &_file; +}; + +template <typename T> +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()); // hack; doesn't know better approach + } + return archive; +} + +template <typename T> +inline Archive &operator>>(Archive &archive, Object &obj){ + obj.load(archive); + return archive; +} + +inline Archive &operator>>(Archive &archive, Common::String &string){ + string = archive.readString(); + return archive; +} + +} // End of namespace Pink + +#endif |