[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.150,2.151 imuse_internal.h,2.45,2.46 imuse_player.cpp,2.61,2.62 saveload.cpp,1.248,1.249 saveload.h,1.69,1.70

Max Horn fingolfin at users.sourceforge.net
Sat Oct 22 16:43:29 CEST 2005


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13477

Modified Files:
	imuse.cpp imuse_internal.h imuse_player.cpp saveload.cpp 
	saveload.h 
Log Message:
Got rid of 'ref' code (or rather: hack) in the save/load system

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.150
retrieving revision 2.151
diff -u -d -r2.150 -r2.151
--- imuse.cpp	22 Oct 2005 22:18:44 -0000	2.150
+++ imuse.cpp	22 Oct 2005 23:42:12 -0000	2.151
@@ -323,6 +323,7 @@
 
 	for (i = 0, part = _parts; i != ARRAYSIZE(_parts); i++, part++) {
 		part->init();
+		part->_se = this;
 		part->_slot = i;
 	}
 }
@@ -1477,35 +1478,6 @@
 //
 ////////////////////////////////////////////////////////////
 
-enum {
-	TYPE_PART = 1,
-	TYPE_PLAYER = 2
-};
-
-int IMuseInternal::saveReference(void *me_ref, byte type, void *ref) {
-	IMuseInternal *me = (IMuseInternal *)me_ref;
-	switch (type) {
-	case TYPE_PART:
-		return (Part *)ref - me->_parts;
-	case TYPE_PLAYER:
-		return (Player *)ref - me->_players;
-	default:
-		error("saveReference: invalid type");
-	}
-}
-
-void *IMuseInternal::loadReference(void *me_ref, byte type, int ref) {
-	IMuseInternal *me = (IMuseInternal *)me_ref;
-	switch (type) {
-	case TYPE_PART:
-		return &me->_parts[ref];
-	case TYPE_PLAYER:
-		return &me->_players[ref];
-	default:
-		error("loadReference: invalid type");
-	}
-}
-
 int IMuseInternal::save_or_load(Serializer *ser, ScummEngine *scumm) {
 	const SaveLoadEntry mainEntries[] = {
 		MKLINE(IMuseInternal, _queue_end, sleUint8, VER(8)),
@@ -1529,7 +1501,7 @@
 
 	// VolumeFader is obsolete.
 	const SaveLoadEntry volumeFaderEntries[] = {
-		MK_OBSOLETE_REF(VolumeFader, player, TYPE_PLAYER, VER(8), VER(16)),
+		MK_OBSOLETE(VolumeFader, player, sleUint16, VER(8), VER(16)),
 		MK_OBSOLETE(VolumeFader, active, sleUint8, VER(8), VER(16)),
 		MK_OBSOLETE(VolumeFader, curvol, sleUint8, VER(8), VER(16)),
 		MK_OBSOLETE(VolumeFader, speed_lo_max, sleUint16, VER(8), VER(16)),
@@ -1551,10 +1523,6 @@
 
 	int i;
 
-	ser->_ref_me = this;
-	ser->_save_ref = saveReference;
-	ser->_load_ref = loadReference;
-
 	ser->saveLoadEntries(this, mainEntries);
 	ser->saveLoadArrayOf(_cmd_queue, ARRAYSIZE(_cmd_queue), sizeof(_cmd_queue[0]), cmdQueueEntries);
 	ser->saveLoadArrayOf(_snm_triggers, ARRAYSIZE(_snm_triggers), sizeof(_snm_triggers[0]), snmTriggerEntries);
@@ -1654,11 +1622,7 @@
 }
 
 void Part::saveLoadWithSerializer(Serializer *ser) {
-	// TODO: Get rid of MKREF usage!
 	const SaveLoadEntry partEntries[] = {
-		MKREF(Part, _next, TYPE_PART, VER(8)),
-		MKREF(Part, _prev, TYPE_PART, VER(8)),
-		MKREF(Part, _player, TYPE_PLAYER, VER(8)),
 		MKLINE(Part, _pitchbend, sleInt16, VER(8)),
 		MKLINE(Part, _pitchbend_factor, sleUint8, VER(8)),
 		MKLINE(Part, _transpose, sleInt8, VER(8)),
@@ -1678,6 +1642,26 @@
 		MKEND()
 	};
 
+	int num;
+	if (ser->isSaving()) {
+		num = (_next ? (_next - _se->_parts + 1) : 0);
+		ser->saveUint16(num);
+
+		num = (_prev ? (_prev - _se->_parts + 1) : 0);
+		ser->saveUint16(num);
+
+		num = (_player ? (_player - _se->_players + 1) : 0);
+		ser->saveUint16(num);
+	} else {
+		num = ser->loadUint16();
+		_next = (num ? &_se->_parts[num - 1] : 0);
+
+		num = ser->loadUint16();
+		_prev = (num ? &_se->_parts[num - 1] : 0);
+
+		num = ser->loadUint16();
+		_player = (num ? &_se->_players[num - 1] : 0);
+	}
 	ser->saveLoadEntries(this, partEntries);
 }
 

Index: imuse_internal.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_internal.h,v
retrieving revision 2.45
retrieving revision 2.46
diff -u -d -r2.45 -r2.46
--- imuse_internal.h	22 Oct 2005 22:18:44 -0000	2.45
+++ imuse_internal.h	22 Oct 2005 23:42:12 -0000	2.46
@@ -273,6 +273,7 @@
 };
 
 struct Part : public Serializable {
+	IMuseInternal *_se;
 	int _slot;
 	Part *_next, *_prev;
 	MidiChannel *_mc;
@@ -344,6 +345,7 @@
 // the public version, only contains a set of methods.
 class IMuseInternal {
 	friend class Player;
+	friend class Part;
 
 protected:
 	bool _native_mt32;
@@ -430,9 +432,6 @@
 	void fix_parts_after_load();
 	void fix_players_after_load(ScummEngine *scumm);
 
-	static int saveReference(void *me_ref, byte type, void *ref);
-	static void *loadReference(void *me_ref, byte type, int ref);
-
 	static void midiTimerCallback(void *data);
 
 public:

Index: imuse_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_player.cpp,v
retrieving revision 2.61
retrieving revision 2.62
diff -u -d -r2.61 -r2.62
--- imuse_player.cpp	22 Oct 2005 22:18:44 -0000	2.61
+++ imuse_player.cpp	22 Oct 2005 23:42:12 -0000	2.62
@@ -1171,15 +1171,8 @@
 //
 ////////////////////////////////////////
 
-enum {
-	TYPE_PART = 1,
-	TYPE_PLAYER = 2
-};
-
 void Player::saveLoadWithSerializer(Serializer *ser) {
-	// TODO: Get rid of MKREF usage!
 	static const SaveLoadEntry playerEntries[] = {
-		MKREF(Player, _parts, TYPE_PART, VER(8)),
 		MKLINE(Player, _active, sleByte, VER(8)),
 		MKLINE(Player, _id, sleUint16, VER(8)),
 		MKLINE(Player, _priority, sleByte, VER(8)),
@@ -1230,6 +1223,14 @@
 	}
 	_music_tick = _parser ? _parser->getTick() : 0;
 
+	int num;
+	if (ser->isSaving()) {
+		num = (_parts ? (_parts - _se->_parts + 1) : 0);
+		ser->saveUint16(num);
+	} else {
+		num = ser->loadUint16();
+		_parts = (num ? &_se->_parts[num - 1] : 0);
+	}
 	ser->saveLoadEntries(this, playerEntries);
 	ser->saveLoadArrayOf(_parameterFaders, ARRAYSIZE(_parameterFaders),
 						sizeof(ParameterFader), parameterFaderEntries);

Index: saveload.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.cpp,v
retrieving revision 1.248
retrieving revision 1.249
diff -u -d -r1.248 -r1.249
--- saveload.cpp	22 Oct 2005 23:08:14 -0000	1.248
+++ saveload.cpp	22 Oct 2005 23:42:12 -0000	1.249
@@ -1547,10 +1547,6 @@
 			// Skip obsolete entries
 			if (type & 128)
 				sle++;
-		} else if (size == 0xFF) {
-			// save reference
-			void *ptr = *((void **)at);
-			saveUint16(ptr ? ((*_save_ref) (_ref_me, type, ptr) + 1) : 0);
 		} else {
 			// save entry
 			int columns = 1;
@@ -1586,12 +1582,6 @@
 			// Skip entries which are not present in this save game version
 			if (type & 128)
 				sle++;
-		} else if (size == 0xFF) {
-			// load reference...
-			int num = loadUint16();
-			// ...but only use it if it's still there in CURRENT_VER
-			if (sle->maxVersion == CURRENT_VER)
-				*((void **)at) = num ? (*_load_ref) (_ref_me, type, num - 1) : NULL;
 		} else {
 			// load entry
 			int columns = 1;

Index: saveload.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/saveload.h,v
retrieving revision 1.69
retrieving revision 1.70
diff -u -d -r1.69 -r1.70
--- saveload.h	22 Oct 2005 04:08:48 -0000	1.69
+++ saveload.h	22 Oct 2005 23:42:12 -0000	1.70
@@ -98,12 +98,6 @@
 // End marker
 #define MKEND() {0xFFFF,0xFF,0xFF,0,0}
 
-// A reference
-#define MKREF(type,item,refid,minVer) {OFFS(type,item),refid,0xFF,minVer,CURRENT_VER}
-
-// An obsolete reference.
-#define MK_OBSOLETE_REF(type,item,refid,minVer,maxVer) {0,sleUint16,0,minVer,maxVer}
-
 
 enum {
 	sleByte = 1,
@@ -123,22 +117,13 @@
 	uint8 maxVersion;
 };
 
-typedef int SerializerSaveReference(void *me, byte type, void *ref);
-typedef void *SerializerLoadReference(void *me, byte type, int ref);
-
 class Serializer {
 public:
 	Serializer(Common::InSaveFile *in, Common::OutSaveFile *out, uint32 savegameVersion)
-		: _loadStream(in), _saveStream(out), _save_ref(0), _load_ref(0), _ref_me(0),
+		: _loadStream(in), _saveStream(out),
 		  _savegameVersion(savegameVersion)
 	{ }
 
-	// FIXME: Try to get rid of the _save_ref / _load_ref / _ref_me HACK !!!
-	// This is used by imuse...
-	SerializerSaveReference *_save_ref;
-	SerializerLoadReference *_load_ref;
-	void *_ref_me;
-
 	void saveLoadArrayOf(void *b, int len, int datasize, byte filetype);
 	void saveLoadArrayOf(void *b, int num, int datasize, const SaveLoadEntry *sle);
 	void saveLoadEntries(void *d, const SaveLoadEntry *sle);





More information about the Scummvm-git-logs mailing list