[Scummvm-cvs-logs] SF.net SVN: scummvm:[40714] scummvm/trunk/engines/sci/engine
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Tue May 19 02:34:10 CEST 2009
Revision: 40714
http://scummvm.svn.sourceforge.net/scummvm/?rev=40714&view=rev
Author: fingolfin
Date: 2009-05-19 00:34:10 +0000 (Tue, 19 May 2009)
Log Message:
-----------
SCI: Introduce a new subclass StringFrag of MemObject (does nothing right now); switched MemObject to subclass Common::Serializable
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/savegame.cpp
scummvm/trunk/engines/sci/engine/seg_manager.cpp
scummvm/trunk/engines/sci/engine/vm.h
scummvm/trunk/engines/sci/engine/vm_types.h
Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp 2009-05-19 00:33:48 UTC (rev 40713)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp 2009-05-19 00:34:10 UTC (rev 40714)
@@ -271,9 +271,9 @@
sync_sfx_state_t(s, sound);
}
-static void sync_LocalVariables(Common::Serializer &s, LocalVariables &obj) {
- s.syncAsSint32LE(obj.script_id);
- syncArray<reg_t>(s, obj._locals);
+void LocalVariables::saveLoadWithSerializer(Common::Serializer &s) {
+ s.syncAsSint32LE(script_id);
+ syncArray<reg_t>(s, _locals);
}
template <>
@@ -319,30 +319,48 @@
syncArray<typename T::Entry>(s, obj._table);
}
-static void sync_Script(Common::Serializer &s, Script &obj) {
- s.syncAsSint32LE(obj.nr);
- s.syncAsUint32LE(obj.buf_size);
- s.syncAsUint32LE(obj.script_size);
- s.syncAsUint32LE(obj.heap_size);
+void CloneTable::saveLoadWithSerializer(Common::Serializer &s) {
+ sync_Table<CloneTable>(s, *this);
+}
+void NodeTable::saveLoadWithSerializer(Common::Serializer &s) {
+ sync_Table<NodeTable>(s, *this);
+}
+
+void ListTable::saveLoadWithSerializer(Common::Serializer &s) {
+ sync_Table<ListTable>(s, *this);
+}
+
+void HunkTable::saveLoadWithSerializer(Common::Serializer &s) {
+ if (s.isLoading()) {
+ initTable();
+ }
+}
+
+void Script::saveLoadWithSerializer(Common::Serializer &s) {
+ s.syncAsSint32LE(nr);
+ s.syncAsUint32LE(buf_size);
+ s.syncAsUint32LE(script_size);
+ s.syncAsUint32LE(heap_size);
+
// FIXME: revamp obj_indices handling
- if (!obj.obj_indices) {
+ if (!obj_indices) {
assert(s.isLoading());
- obj.obj_indices = new IntMapper();
+ obj_indices = new IntMapper();
}
- obj.obj_indices->saveLoadWithSerializer(s);
+ obj_indices->saveLoadWithSerializer(s);
- s.syncAsSint32LE(obj.exports_nr);
- s.syncAsSint32LE(obj.synonyms_nr);
- s.syncAsSint32LE(obj.lockers);
+ s.syncAsSint32LE(exports_nr);
+ s.syncAsSint32LE(synonyms_nr);
+ s.syncAsSint32LE(lockers);
- syncArray<Object>(s, obj._objects);
+ syncArray<Object>(s, _objects);
- s.syncAsSint32LE(obj.locals_offset);
- s.syncAsSint32LE(obj.locals_segment);
+ s.syncAsSint32LE(locals_offset);
+ s.syncAsSint32LE(locals_segment);
- s.syncAsSint32LE(obj._markedAsDeleted);
+ s.syncAsSint32LE(_markedAsDeleted);
}
static void sync_SystemString(Common::Serializer &s, SystemString &obj) {
@@ -354,29 +372,33 @@
syncCStr(s, (char **)&obj.value);
}
-static void sync_SystemStrings(Common::Serializer &s, SystemStrings &obj) {
+void SystemStrings::saveLoadWithSerializer(Common::Serializer &s) {
for (int i = 0; i < SYS_STRINGS_MAX; ++i)
- sync_SystemString(s, obj.strings[i]);
+ sync_SystemString(s, strings[i]);
}
-static void sync_DynMem(Common::Serializer &s, DynMem &obj) {
- s.syncAsSint32LE(obj._size);
- syncCStr(s, &obj._description);
- if (!obj._buf && obj._size) {
- obj._buf = (byte *)calloc(obj._size, 1);
+void DynMem::saveLoadWithSerializer(Common::Serializer &s) {
+ s.syncAsSint32LE(_size);
+ syncCStr(s, &_description);
+ if (!_buf && _size) {
+ _buf = (byte *)calloc(_size, 1);
}
- if (obj._size)
- s.syncBytes(obj._buf, obj._size);
+ if (_size)
+ s.syncBytes(_buf, _size);
}
-static void sync_DataStack(Common::Serializer &s, DataStack &obj) {
- s.syncAsUint32LE(obj.nr);
+void DataStack::saveLoadWithSerializer(Common::Serializer &s) {
+ s.syncAsUint32LE(nr);
if (s.isLoading()) {
- //free(obj.entries);
- obj.entries = (reg_t *)calloc(obj.nr, sizeof(reg_t));
+ //free(entries);
+ entries = (reg_t *)calloc(nr, sizeof(reg_t));
}
}
+void StringFrag::saveLoadWithSerializer(Common::Serializer &s) {
+ // TODO
+}
+
#pragma mark -
static void sync_songlib_t(Common::Serializer &s, songlib_t &obj) {
@@ -422,42 +444,7 @@
}
s.syncAsSint32LE(mobj->_segmgrId);
- switch (type) {
- case MEM_OBJ_SCRIPT:
- sync_Script(s, *(Script *)mobj);
- break;
- case MEM_OBJ_CLONES:
- sync_Table<CloneTable>(s, *(CloneTable *)mobj);
- break;
- case MEM_OBJ_LOCALS:
- sync_LocalVariables(s, *(LocalVariables *)mobj);
- break;
- case MEM_OBJ_SYS_STRINGS:
- sync_SystemStrings(s, *(SystemStrings *)mobj);
- break;
- case MEM_OBJ_STACK:
- sync_DataStack(s, *(DataStack *)mobj);
- break;
- case MEM_OBJ_HUNK:
- if (s.isLoading()) {
- (*(HunkTable *)mobj).initTable();
- }
- break;
- case MEM_OBJ_STRING_FRAG:
- break;
- case MEM_OBJ_LISTS:
- sync_Table<ListTable>(s, *(ListTable *)mobj);
- break;
- case MEM_OBJ_NODES:
- sync_Table<NodeTable>(s, *(NodeTable *)mobj);
- break;
- case MEM_OBJ_DYNMEM:
- sync_DynMem(s, *(DynMem *)mobj);
- break;
- default:
- error("Unknown MemObject type %d", type);
- break;
- }
+ mobj->saveLoadWithSerializer(s);
}
Modified: scummvm/trunk/engines/sci/engine/seg_manager.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/seg_manager.cpp 2009-05-19 00:33:48 UTC (rev 40713)
+++ scummvm/trunk/engines/sci/engine/seg_manager.cpp 2009-05-19 00:34:10 UTC (rev 40714)
@@ -254,7 +254,7 @@
mem = new HunkTable();
break;
case MEM_OBJ_STRING_FRAG:
- mem = new MemObject(); // FIXME: This is a temporary hack until MEM_OBJ_STRING_FRAG is implemented
+ mem = new StringFrag();
break;
case MEM_OBJ_LISTS:
mem = new ListTable();
Modified: scummvm/trunk/engines/sci/engine/vm.h
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.h 2009-05-19 00:33:48 UTC (rev 40713)
+++ scummvm/trunk/engines/sci/engine/vm.h 2009-05-19 00:34:10 UTC (rev 40714)
@@ -28,7 +28,7 @@
/* VM and kernel declarations */
-//#include "common/serializer.h"
+#include "common/serializer.h"
#include "sci/engine/vm_types.h" // for reg_t
#include "common/util.h"
@@ -55,7 +55,7 @@
MEM_OBJ_MAX // For sanity checking
};
-struct MemObject /* : public Common::Serializable */ {
+struct MemObject : public Common::Serializable {
MemObjectType _type;
int _segmgrId; /**< Internal value used by the seg_manager's hash map */
@@ -103,6 +103,11 @@
};
+// TODO: Implement the following class
+struct StringFrag : public MemObject {
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
+};
+
struct IntMapper;
enum {
@@ -144,7 +149,7 @@
virtual byte *dereference(reg_t pointer, int *size);
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
/** Number of bytes to be allocated for the stack */
@@ -255,7 +260,7 @@
virtual reg_t findCanonicAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
/** Clone has been marked as 'freed' */
@@ -366,7 +371,7 @@
virtual void listAllDeallocatable(SegmentId segId, void *param, NoteCallback note);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
// script lock operations
@@ -479,7 +484,7 @@
virtual reg_t findCanonicAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
#define CLONE_USED -1
@@ -560,8 +565,6 @@
}
virtual void listAllDeallocatable(SegmentId segId, void *param, NoteCallback note);
-
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
@@ -569,6 +572,8 @@
struct CloneTable : public Table<Clone> {
virtual void freeAtAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
+
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
@@ -576,6 +581,8 @@
struct NodeTable : public Table<Node> {
virtual void freeAtAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
+
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
@@ -583,6 +590,8 @@
struct ListTable : public Table<List> {
virtual void freeAtAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllOutgoingReferences(EngineState *s, reg_t object, void *param, NoteCallback note);
+
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
@@ -593,6 +602,8 @@
free(_table[idx].mem);
}
+
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
@@ -615,7 +626,7 @@
virtual reg_t findCanonicAddress(SegManager *segmgr, reg_t sub_addr);
virtual void listAllDeallocatable(SegmentId segId, void *param, NoteCallback note);
-// virtual void saveLoadWithSerializer(Common::Serializer &ser);
+ virtual void saveLoadWithSerializer(Common::Serializer &ser);
};
/** Contains selector IDs for a few selected selectors */
Modified: scummvm/trunk/engines/sci/engine/vm_types.h
===================================================================
--- scummvm/trunk/engines/sci/engine/vm_types.h 2009-05-19 00:33:48 UTC (rev 40713)
+++ scummvm/trunk/engines/sci/engine/vm_types.h 2009-05-19 00:34:10 UTC (rev 40714)
@@ -63,9 +63,6 @@
#define PSTK "ST:%04x"
#define PRINT_STK(v) (unsigned) (v - s->stack_base)
-// String fragment
-typedef reg_t *StringFrag;
-
static inline reg_t make_reg(int segment, int offset) {
reg_t r;
r.offset = offset;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list