[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,2.149,2.150 imuse_internal.h,2.44,2.45 imuse_player.cpp,2.60,2.61 instrument.h,2.19,2.20

Max Horn fingolfin at users.sourceforge.net
Sat Oct 22 15:20:27 CEST 2005


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

Modified Files:
	imuse.cpp imuse_internal.h imuse_player.cpp instrument.h 
Log Message:
Switch iMuse to use Serialiazable, too (at least partially)

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.149
retrieving revision 2.150
diff -u -d -r2.149 -r2.150
--- imuse.cpp	21 Oct 2005 23:01:13 -0000	2.149
+++ imuse.cpp	22 Oct 2005 22:18:44 -0000	2.150
@@ -1549,29 +1549,6 @@
 		MKEND()
 	};
 
-	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)),
-		MKLINE(Part, _vol, sleUint8, VER(8)),
-		MKLINE(Part, _detune, sleInt8, VER(8)),
-		MKLINE(Part, _pan, sleInt8, VER(8)),
-		MKLINE(Part, _on, sleUint8, VER(8)),
-		MKLINE(Part, _modwheel, sleUint8, VER(8)),
-		MKLINE(Part, _pedal, sleUint8, VER(8)),
-		MK_OBSOLETE(Part, _program, sleUint8, VER(8), VER(16)),
-		MKLINE(Part, _pri, sleUint8, VER(8)),
-		MKLINE(Part, _chan, sleUint8, VER(8)),
-		MKLINE(Part, _effect_level, sleUint8, VER(8)),
-		MKLINE(Part, _chorus, sleUint8, VER(8)),
-		MKLINE(Part, _percussion, sleUint8, VER(8)),
-		MKLINE(Part, _bank, sleUint8, VER(8)),
-		MKEND()
-	};
-
 	int i;
 
 	ser->_ref_me = this;
@@ -1584,8 +1561,11 @@
 
 	// The players
 	for (i = 0; i < ARRAYSIZE(_players); ++i)
-		_players[i].save_or_load(ser);
-	ser->saveLoadArrayOf(_parts, ARRAYSIZE(_parts), sizeof(_parts[0]), partEntries);
+		_players[i].saveLoadWithSerializer(ser);
+	
+	// The parts
+	for (i = 0; i < ARRAYSIZE(_parts); ++i)
+		_parts[i].saveLoadWithSerializer(ser);
 
 	{ // Load/save the instrument definitions, which were revamped with V11.
 		Part *part = &_parts[0];
@@ -1600,6 +1580,8 @@
 	}
 
 	// VolumeFader has been replaced with the more generic ParameterFader.
+	// FIXME: replace this loop by something like
+	// if (loading && version <= 16)  ser->skip(XXX bytes);
 	for (i = 0; i < 8; ++i)
 		ser->saveLoadEntries(0, volumeFaderEntries);
 
@@ -1618,9 +1600,6 @@
 	return 0;
 }
 
-#undef MKLINE
-#undef MKEND
-
 void IMuseInternal::fix_parts_after_load() {
 	Part *part;
 	int i;
@@ -1645,6 +1624,63 @@
 	}
 }
 
+Part::Part() {
+	_slot = 0;
+	_next = 0;
+	_prev = 0;
+	_mc = 0;
+	_player = 0;
+	_pitchbend = 0;
+	_pitchbend_factor = 0;
+	_transpose = 0;
+	_transpose_eff = 0;
+	_vol = 0;
+	_vol_eff = 0;
+	_detune = 0;
+	_detune_eff = 0;
+	_pan = 0;
+	_pan_eff = 0;
+	_on = false;
+	_modwheel = 0;
+	_pedal = false;
+	_pri = 0;
+	_pri_eff = 0;
+	_chan = 0;
+	_effect_level = 0;
+	_chorus = 0;
+	_percussion = 0;
+	_bank = 0;
+	_unassigned_instrument = false;
+}
+
+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)),
+		MKLINE(Part, _vol, sleUint8, VER(8)),
+		MKLINE(Part, _detune, sleInt8, VER(8)),
+		MKLINE(Part, _pan, sleInt8, VER(8)),
+		MKLINE(Part, _on, sleUint8, VER(8)),
+		MKLINE(Part, _modwheel, sleUint8, VER(8)),
+		MKLINE(Part, _pedal, sleUint8, VER(8)),
+		MK_OBSOLETE(Part, _program, sleUint8, VER(8), VER(16)),
+		MKLINE(Part, _pri, sleUint8, VER(8)),
+		MKLINE(Part, _chan, sleUint8, VER(8)),
+		MKLINE(Part, _effect_level, sleUint8, VER(8)),
+		MKLINE(Part, _chorus, sleUint8, VER(8)),
+		MKLINE(Part, _percussion, sleUint8, VER(8)),
+		MKLINE(Part, _bank, sleUint8, VER(8)),
+		MKEND()
+	};
+
+	ser->saveLoadEntries(this, partEntries);
+}
+
 void Part::set_detune(int8 detune) {
 	_detune_eff = clamp((_detune = detune) + _player->getDetune(), -128, 127);
 	if (_mc)
@@ -1975,10 +2011,24 @@
 //
 ////////////////////////////////////////////////////////////
 
-IMuse::IMuse(OSystem *system, IMuseInternal *target) : _system(system), _target(target) { _mutex = system->createMutex(); }
-IMuse::~IMuse() { if (_mutex) _system->deleteMutex(_mutex); if (_target) delete _target; }
-inline void IMuse::in() const { _system->lockMutex(_mutex); }
-inline void IMuse::out() const { _system->unlockMutex(_mutex); }
+IMuse::IMuse(OSystem *system, IMuseInternal *target)
+	: _system(system), _target(target) {
+	_mutex = system->createMutex();
+}
+
+IMuse::~IMuse() {
+	if (_mutex)
+		_system->deleteMutex(_mutex);
+	if (_target)
+		delete _target;
+}
+
+inline void IMuse::in() const {
+	_system->lockMutex(_mutex);
+}
+inline void IMuse::out() const {
+	_system->unlockMutex(_mutex);
+}
 
 void IMuse::on_timer(MidiDriver *midi) { in(); _target->on_timer(midi); out(); }
 void IMuse::pause(bool paused) { in(); _target->pause(paused); out(); }

Index: imuse_internal.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_internal.h,v
retrieving revision 2.44
retrieving revision 2.45
diff -u -d -r2.44 -r2.45
--- imuse_internal.h	18 Oct 2005 01:30:20 -0000	2.44
+++ imuse_internal.h	22 Oct 2005 22:18:44 -0000	2.45
@@ -24,6 +24,7 @@
 
 #include "common/scummsys.h"
 #include "scumm/instrument.h"
+#include "scumm/saveload.h"
 #include "sound/mididrv.h"
 
 class MidiParser;
@@ -245,7 +246,7 @@
 	void onTimer();
 	void removePart(Part *part);
 	int scan(uint totrack, uint tobeat, uint totick);
-	int save_or_load(Serializer *ser);
+	void saveLoadWithSerializer(Serializer *ser);
 	int setHook(byte cls, byte value, byte chan) { return _hook.set(cls, value, chan); }
 	void setDetune(int detune);
 	bool setLoop(uint count, uint tobeat, uint totick, uint frombeat, uint fromtick);
@@ -271,7 +272,7 @@
 	MidiChannel *getPercussionChannel() { return 0; }
 };
 
-struct Part {
+struct Part : public Serializable {
 	int _slot;
 	Part *_next, *_prev;
 	MidiChannel *_mc;
@@ -333,9 +334,9 @@
 	void sendPitchBend();
 	bool clearToTransmit();
 
-	Part() {
-		memset(this,0,sizeof(Part));
-	}
+	Part();
+
+	void saveLoadWithSerializer(Serializer *ser);
 };
 
 // WARNING: This is the internal variant of the IMUSE class.

Index: imuse_player.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_player.cpp,v
retrieving revision 2.60
retrieving revision 2.61
diff -u -d -r2.60 -r2.61
--- imuse_player.cpp	20 Oct 2005 14:08:35 -0000	2.60
+++ imuse_player.cpp	22 Oct 2005 22:18:44 -0000	2.61
@@ -1176,7 +1176,8 @@
 	TYPE_PLAYER = 2
 };
 
-int Player::save_or_load(Serializer *ser) {
+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)),
@@ -1232,7 +1233,7 @@
 	ser->saveLoadEntries(this, playerEntries);
 	ser->saveLoadArrayOf(_parameterFaders, ARRAYSIZE(_parameterFaders),
 						sizeof(ParameterFader), parameterFaderEntries);
-	return 0;
+	return;
 }
 
 } // End of namespace Scumm

Index: instrument.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/instrument.h,v
retrieving revision 2.19
retrieving revision 2.20
diff -u -d -r2.19 -r2.20
--- instrument.h	18 Oct 2005 01:30:20 -0000	2.19
+++ instrument.h	22 Oct 2005 22:18:44 -0000	2.20
@@ -34,7 +34,7 @@
 
 class InstrumentInternal {
 public:
-	virtual ~InstrumentInternal() {};
+	virtual ~InstrumentInternal() {}
 	virtual void saveOrLoad (Serializer *s) = 0;
 	virtual void send (MidiChannel *mc) = 0;
 	virtual void copy_to (Instrument *dest) = 0;





More information about the Scummvm-git-logs mailing list