[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
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.384,1.385 intern.h,2.536,2.537 saveload.cpp,1.247,1.248 script_v100he.cpp,2.179,2.180 script_v90he.cpp,2.286,2.287 scumm.cpp,1.611,1.612
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm saveload.cpp,1.249,1.250
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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);
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.384,1.385 intern.h,2.536,2.537 saveload.cpp,1.247,1.248 script_v100he.cpp,2.179,2.180 script_v90he.cpp,2.286,2.287 scumm.cpp,1.611,1.612
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm saveload.cpp,1.249,1.250
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list