From 0432ca6d0f4240b7e5640197f4fbce6d512b0f4b Mon Sep 17 00:00:00 2001 From: Sven Hesse Date: Tue, 25 Jan 2011 12:14:05 +0000 Subject: GOB: Add a FakeFileHandler For temporarily storing save "files" svn-id: r55528 --- engines/gob/save/savehandler.cpp | 44 ++++++++++++++++++++++++++++++++++++++++ engines/gob/save/savehandler.h | 20 +++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) (limited to 'engines/gob') diff --git a/engines/gob/save/savehandler.cpp b/engines/gob/save/savehandler.cpp index 68f1f22b78..83f6e51cc5 100644 --- a/engines/gob/save/savehandler.cpp +++ b/engines/gob/save/savehandler.cpp @@ -489,4 +489,48 @@ bool NotesHandler::save(int16 dataVar, int32 size, int32 offset) { return writer.writePart(0, &vars); } + +FakeFileHandler::FakeFileHandler(GobEngine *vm) : SaveHandler(vm) { +} + +FakeFileHandler::~FakeFileHandler() { +} + +int32 FakeFileHandler::getSize() { + if (_data.empty()) + return -1; + + return _data.size(); +} + +bool FakeFileHandler::load(int16 dataVar, int32 size, int32 offset) { + if (size <= 0) + return false; + + if ((uint32)(offset + size) > _data.size()) + return false; + + _vm->_inter->_variables->copyFrom(dataVar, &_data[0] + offset, size); + + return true; +} + +bool FakeFileHandler::save(int16 dataVar, int32 size, int32 offset) { + if (size <= 0) + return false; + + if ((uint32)(offset + size) > _data.size()) + _data.resize(offset + size); + + _vm->_inter->_variables->copyTo(dataVar, &_data[0] + offset, size); + + return true; +} + +bool FakeFileHandler::deleteFile() { + _data.clear(); + + return true; +} + } // End of namespace Gob diff --git a/engines/gob/save/savehandler.h b/engines/gob/save/savehandler.h index a5ae1f5c21..d12d6bca0d 100644 --- a/engines/gob/save/savehandler.h +++ b/engines/gob/save/savehandler.h @@ -27,7 +27,9 @@ #define GOB_SAVE_SAVEHANDLER_H #include "common/savefile.h" -#include "engines/gob/video.h" // for SurfacePtr +#include "common/array.h" + +#include "engines/gob/video.h" // for SurfacePtr namespace Gob { @@ -180,6 +182,22 @@ private: SavePartVars *_notes; }; +/** A handler that behaves like a file but keeps the contents in memory. */ +class FakeFileHandler : public SaveHandler { +public: + FakeFileHandler(GobEngine *vm); + ~FakeFileHandler(); + + int32 getSize(); + bool load(int16 dataVar, int32 size, int32 offset); + bool save(int16 dataVar, int32 size, int32 offset); + + bool deleteFile(); + +private: + Common::Array _data; +}; + } // End of namespace Gob #endif // GOB_SAVE_SAVEHANDLER_H -- cgit v1.2.3