From 294335e194035a37f02d51c0f9357adfa7d3f20c Mon Sep 17 00:00:00 2001 From: Per Inge Mathisen Date: Sun, 6 Feb 2011 16:14:20 +0100 Subject: [PATCH] Clean up the IdToNN() functions. Patch reviewed by Cyp. --- src/multibot.cpp | 29 ++++++------ src/multigifts.cpp | 4 +- src/multiplay.cpp | 106 +++++++++++++++++--------------------------- src/multiplay.h | 2 +- src/multistruct.cpp | 4 +- src/multisync.cpp | 3 +- 6 files changed, 62 insertions(+), 86 deletions(-) diff --git a/src/multibot.cpp b/src/multibot.cpp index a05c96d4a2c..485aa4187a0 100644 --- a/src/multibot.cpp +++ b/src/multibot.cpp @@ -159,7 +159,8 @@ BOOL recvDroidSecondary(NETQUEUE queue) NETenum(&state); // If we can not find the droid should we not ask for it? - if (!IdToDroid(droid, player, &psDroid)) + psDroid = IdToDroid(droid, player); + if (!psDroid) { NETend(); return false; @@ -218,14 +219,16 @@ BOOL recvDroidEmbark(NETQUEUE queue) NETuint32_t(&transporterID); // we have to find the droid on our (local) list first. - if (!IdToDroid(droidID, player, &psDroid)) + psDroid = IdToDroid(droidID, player); + if (!psDroid) { NETend(); // Possible it already died? (sync error?) debug(LOG_WARNING, "player's %d droid %d wasn't found?", player,droidID); return false; } - if (!IdToDroid(transporterID, player, &psTransporterDroid)) + psTransporterDroid = IdToDroid(transporterID, player); + if (!psTransporterDroid) { NETend(); // Possible it already died? (sync error?) @@ -310,7 +313,8 @@ BOOL recvDroidDisEmbark(NETQUEUE queue) NETend(); // find the transporter first - if (!IdToDroid(transporterID, player, &psTransporterDroid)) + psTransporterDroid = IdToDroid(transporterID, player); + if (!psTransporterDroid) { // Possible it already died? (sync error?) debug(LOG_WARNING, "player's %d transport droid %d wasn't found?", player, transporterID); @@ -676,8 +680,8 @@ BOOL recvDroidInfo(NETQUEUE queue) NETuint32_t(&deltaDroidId); info.droidId += deltaDroidId; - DROID *psDroid = NULL; - if (!IdToDroid(info.droidId, ANYPLAYER, &psDroid)) + DROID *psDroid = IdToDroid(info.droidId, ANYPLAYER); + if (!psDroid) { debug(LOG_NEVER, "Packet from %d refers to non-existent droid %u, [%s : p%d]", queue.index, info.droidId, isHumanPlayer(info.player) ? "Human" : "AI", info.player); @@ -734,21 +738,17 @@ static BASE_OBJECT *processDroidTarget(OBJECT_TYPE desttype, uint32_t destid) else { BASE_OBJECT *psObj = NULL; - DROID *pD; switch (desttype) { case OBJ_DROID: - if (IdToDroid(destid, ANYPLAYER, &pD)) - { - psObj = (BASE_OBJECT*)pD; - } + psObj = IdToDroid(destid, ANYPLAYER); break; case OBJ_STRUCTURE: - psObj = (BASE_OBJECT*)IdToStruct(destid,ANYPLAYER); + psObj = IdToStruct(destid, ANYPLAYER); break; case OBJ_FEATURE: - psObj = (BASE_OBJECT*)IdToFeature(destid,ANYPLAYER); + psObj = IdToFeature(destid, ANYPLAYER); break; // We should not get this! @@ -804,7 +804,8 @@ BOOL recvDestroyDroid(NETQUEUE queue) // Retrieve the droid NETuint32_t(&id); - if (!IdToDroid(id, ANYPLAYER, &psDroid)) + psDroid = IdToDroid(id, ANYPLAYER); + if (!psDroid) { debug(LOG_DEATH, "droid %d on request from player %d can't be found? Must be dead already?", id, queue.index ); diff --git a/src/multigifts.cpp b/src/multigifts.cpp index 20b014614af..0bf5e75b2e9 100644 --- a/src/multigifts.cpp +++ b/src/multigifts.cpp @@ -182,9 +182,9 @@ void giftRadar(uint8_t from, uint8_t to, BOOL send) // \param to :player that should be getting the droid static void recvGiftDroids(uint8_t from, uint8_t to, uint32_t droidID) { - DROID *psDroid; + DROID *psDroid = IdToDroid(droidID, from); - if (IdToDroid(droidID, from, &psDroid)) + if (psDroid) { syncDebugDroid(psDroid, '<'); giftSingleDroid(psDroid, to); diff --git a/src/multiplay.cpp b/src/multiplay.cpp index 1e192f90cea..0debaa6f404 100644 --- a/src/multiplay.cpp +++ b/src/multiplay.cpp @@ -290,110 +290,82 @@ BOOL multiPlayerLoop(void) // quikie functions. // to get droids ... -BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid) +DROID *IdToDroid(UDWORD id, UDWORD player) { - UDWORD i; - DROID *d; - - if(player == ANYPLAYER) + if (player == ANYPLAYER) { - for(i=0;iid !=id) )d=d->psNext; - if(d) + for (DROID *d = apsDroidLists[i]; d; d = d->psNext) { - *psDroid = d; - return true; + if (d->id == id) + { + return d; + } } } - return false; } - else // find the droid, given player + else if (player < MAX_PLAYERS) { - if (player >= MAX_PLAYERS) + for (DROID *d = apsDroidLists[player]; d; d = d->psNext) { - debug(LOG_FEATURE, "Feature detected"); - // feature hack, player = PLAYER_FEATURE are features - return false; - } - d = apsDroidLists[player]; - while( (d != NULL ) && (d->id !=id))d=d->psNext; - if(d) - { - *psDroid = d; - return true; + if (d->id == id) + { + return d; + } } - return false; } + return NULL; } // //////////////////////////////////////////////////////////////////////////// // find a structure -STRUCTURE *IdToStruct(UDWORD id,UDWORD player) +STRUCTURE *IdToStruct(UDWORD id, UDWORD player) { - STRUCTURE *psStr = NULL; - UDWORD i; - - if(player == ANYPLAYER) + if (player == ANYPLAYER) { - for(i=0;iid != id)); psStr=psStr->psNext) {} - if(psStr) + for (STRUCTURE *d = apsStructLists[i]; d; d = d->psNext) { - return psStr; + if (d->id == id) + { + return d; + } } } } - else + else if (player < MAX_PLAYERS) { - if (player >= MAX_PLAYERS) + for (STRUCTURE *d = apsStructLists[player]; d; d = d->psNext) { - debug(LOG_FEATURE, "Feature detected"); - // feature hack, player = PLAYER_FEATURE are features - return NULL; + if (d->id == id) + { + return d; + } } - for (psStr=apsStructLists[player];((psStr != NULL )&&(psStr->id != id) );psStr=psStr->psNext) {} } - return psStr; + return NULL; } // //////////////////////////////////////////////////////////////////////////// // find a feature -FEATURE *IdToFeature(UDWORD id,UDWORD player) +FEATURE *IdToFeature(UDWORD id, UDWORD player) { - FEATURE *psF =NULL; - UDWORD i; - - STATIC_ASSERT(MAX_PLAYERS + 2 < ANYPLAYER); - if(player == ANYPLAYER) - { - for(i=0;iid != id)); psF=psF->psNext) {} - if(psF) - { - return psF; - } - } - } - else + (void)player; // unused, all features go into player 0 + for (FEATURE *d = apsFeatureLists[0]; d; d = d->psNext) { - if (player >= MAX_PLAYERS) + if (d->id == id) { - debug(LOG_FEATURE, "Feature detected"); - // feature hack, player = PLAYER_FEATURE are features - but we're in a function called IdTo **Feature**... - return NULL; + return d; } - for(psF=apsFeatureLists[player];((psF != NULL )&&(psF->id != id) );psF=psF->psNext) {} } - return psF; + return NULL; } // //////////////////////////////////////////////////////////////////////////// -DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player) +DROID_TEMPLATE *IdToTemplate(UDWORD tempId, UDWORD player) { DROID_TEMPLATE *psTempl = NULL; UDWORD i; @@ -428,7 +400,9 @@ BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player) STRUCTURE *pS; FEATURE *pF; // droids. - if (IdToDroid(id,player,&pD)) + + pD = IdToDroid(id, player); + if (pD) { return (BASE_OBJECT*)pD; } diff --git a/src/multiplay.h b/src/multiplay.h index c503ccdbc07..292f0e2a13e 100644 --- a/src/multiplay.h +++ b/src/multiplay.h @@ -149,7 +149,7 @@ extern UBYTE bDisplayMultiJoiningStatus; // draw load progress? extern WZ_DECL_WARN_UNUSED_RESULT BASE_OBJECT *IdToPointer(UDWORD id,UDWORD player); extern WZ_DECL_WARN_UNUSED_RESULT STRUCTURE *IdToStruct(UDWORD id,UDWORD player); -extern WZ_DECL_WARN_UNUSED_RESULT BOOL IdToDroid(UDWORD id, UDWORD player, DROID **psDroid); +extern WZ_DECL_WARN_UNUSED_RESULT DROID *IdToDroid(UDWORD id, UDWORD player); extern WZ_DECL_WARN_UNUSED_RESULT FEATURE *IdToFeature(UDWORD id,UDWORD player); extern WZ_DECL_WARN_UNUSED_RESULT DROID_TEMPLATE *IdToTemplate(UDWORD tempId,UDWORD player); diff --git a/src/multistruct.cpp b/src/multistruct.cpp index d91fd09d8cb..be83d223229 100644 --- a/src/multistruct.cpp +++ b/src/multistruct.cpp @@ -173,12 +173,12 @@ BOOL recvDemolishFinished(NETQUEUE queue) NETend(); psStruct = IdToStruct(structID, ANYPLAYER); - if (!IdToDroid(droidID, ANYPLAYER, &psDroid)) + psDroid = IdToDroid(droidID, ANYPLAYER); + if (!psDroid) { debug(LOG_ERROR, "recvDemolishFinished: Packet with bad droid ID received. Discarding!"); return false; } - if (psStruct) { // Demolish it diff --git a/src/multisync.cpp b/src/multisync.cpp index b90e0d9af6e..686174e1e1b 100644 --- a/src/multisync.cpp +++ b/src/multisync.cpp @@ -347,7 +347,8 @@ BOOL recvDroidCheck(NETQUEUE queue) NETauto(&pc); // Find the droid in question - if (!IdToDroid(pc.droidID, pc.player, &pD)) + pD = IdToDroid(pc.droidID, pc.player); + if (!pD) { NETlogEntry("Recvd Unknown droid info. val=player", SYNC_FLAG, pc.player); debug(LOG_SYNC, "Received checking info for an unknown (as yet) droid. player:%d ref:%d", pc.player, pc.droidID);