[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