changeset 8611:6992dec7779c draft

(svn r12193) -Codechange: Rename a magic variable, give it a decent type, and remove a 'goto'.
author frosch <frosch@openttd.org>
date Wed, 20 Feb 2008 15:13:42 +0000
parents a3db627f77b6
children 3171ca9f0252
files src/ai/default/default.cpp src/pathfind.cpp src/pathfind.h src/roadveh_cmd.cpp src/ship_cmd.cpp
diffstat 5 files changed, 21 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/src/ai/default/default.cpp
+++ b/src/ai/default/default.cpp
@@ -1902,7 +1902,7 @@
 	bool flag;
 };
 
-static bool AiEnumFollowTrack(TileIndex tile, AiRailPathFindData *a, int track, uint length, byte *state)
+static bool AiEnumFollowTrack(TileIndex tile, AiRailPathFindData *a, int track, uint length)
 {
 	if (a->flag) return true;
 
@@ -2848,7 +2848,7 @@
 }
 
 
-static bool AiEnumFollowRoad(TileIndex tile, AiRoadEnum *a, int track, uint length, byte *state)
+static bool AiEnumFollowRoad(TileIndex tile, AiRoadEnum *a, int track, uint length)
 {
 	uint dist = DistanceManhattan(tile, a->dest);
 
--- a/src/pathfind.cpp
+++ b/src/pathfind.cpp
@@ -140,7 +140,6 @@
 
 static void TPFMode2(TrackPathFinder* tpf, TileIndex tile, DiagDirection direction)
 {
-	uint bits;
 	RememberData rd;
 
 	assert(tpf->tracktype == TRANSPORT_WATER);
@@ -153,43 +152,35 @@
 	if (++tpf->rd.cur_length > 50)
 		return;
 
-	bits = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
-	bits = (byte)((bits | (bits >> 8)) & _bits_mask[direction]);
-	if (bits == 0)
-		return;
+	uint32 ts = GetTileTrackStatus(tile, tpf->tracktype, tpf->sub_type);
+	TrackBits bits = (TrackBits)((byte)((ts | (ts >> 8)) & _bits_mask[direction]));
+	if (bits == TRACK_BIT_NONE) return;
 
 	assert(TileX(tile) != MapMaxX() && TileY(tile) != MapMaxY());
 
-	uint i = 0;
-	/* only one direction */
-	if (KillFirstBit(bits) == 0) {
-		i = FindFirstBit(bits);
-		rd = tpf->rd;
-		goto continue_here;
-	}
-	/* several directions */
+	bool only_one_track = true;
 	do {
-		i = FindFirstBit(bits);
+		Track track = RemoveFirstTrack(&bits);
+		if (bits != TRACK_BIT_NONE) only_one_track = false;
 		rd = tpf->rd;
 
 		/* Change direction 4 times only */
-		if ((byte)i != tpf->rd.pft_var6) {
+		if (!only_one_track && track != tpf->rd.last_choosen_track) {
 			if (++tpf->rd.depth > 4) {
 				tpf->rd = rd;
 				return;
 			}
-			tpf->rd.pft_var6 = (byte)i;
+			tpf->rd.last_choosen_track = track;
 		}
 
-continue_here:
-		tpf->the_dir = (Trackdir)(i + (HasBit(_otherdir_mask[direction], i) ? 8 : 0));
+		tpf->the_dir = (Trackdir)(track + (HasBit(_otherdir_mask[direction], track) ? 8 : 0));
 
-		if (!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, NULL)) {
+		if (!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length)) {
 			TPFMode2(tpf, tile, _tpf_new_direction[tpf->the_dir]);
 		}
 
 		tpf->rd = rd;
-	} while (ClrBit(bits, i) != 0);
+	} while (bits != TRACK_BIT_NONE);
 
 }
 
@@ -289,7 +280,7 @@
 
 				/* make sure we are not leaving from invalid side */
 				if (TPFSetTileBit(tpf, tile, tpf->the_dir) && CanAccessTileInDir(tile, TrackdirToExitdir(tpf->the_dir), tpf->tracktype) &&
-						!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length, &tpf->rd.pft_var6) ) {
+						!tpf->enum_proc(tile, tpf->userdata, tpf->the_dir, tpf->rd.cur_length) ) {
 					TPFMode1(tpf, tile, _tpf_new_direction[tpf->the_dir]);
 				}
 				tpf->rd = rd;
@@ -312,7 +303,7 @@
 
 	tpf.rd.cur_length = 0;
 	tpf.rd.depth = 0;
-	tpf.rd.pft_var6 = 0;
+	tpf.rd.last_choosen_track = INVALID_TRACK;
 
 	tpf.var2 = HasBit(flags, 15) ? 0x43 : 0xFF; // 0x8000
 
@@ -323,8 +314,7 @@
 	tpf.sub_type = sub_type;
 
 	if (HasBit(flags, 11)) {
-		tpf.rd.pft_var6 = 0xFF;
-		tpf.enum_proc(tile, data, INVALID_TRACKDIR, 0, 0);
+		tpf.enum_proc(tile, data, INVALID_TRACKDIR, 0);
 		TPFMode2(&tpf, tile, direction);
 	} else {
 		/* clear the hash_heads */
--- a/src/pathfind.h
+++ b/src/pathfind.h
@@ -16,7 +16,7 @@
 //supported on all archs)
 
 struct TrackPathFinder;
-typedef bool TPFEnumProc(TileIndex tile, void *data, Trackdir trackdir, uint length, byte *state);
+typedef bool TPFEnumProc(TileIndex tile, void *data, Trackdir trackdir, uint length);
 typedef void TPFAfterProc(TrackPathFinder *tpf);
 
 typedef bool NTPEnumProc(TileIndex tile, void *data, int track, uint length);
@@ -40,7 +40,7 @@
 struct RememberData {
 	uint16 cur_length;
 	byte depth;
-	byte pft_var6;
+	Track last_choosen_track;
 };
 
 struct TrackPathFinder {
--- a/src/roadveh_cmd.cpp
+++ b/src/roadveh_cmd.cpp
@@ -398,7 +398,7 @@
 	DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NW, DIAGDIR_SW, DIAGDIR_NW, DIAGDIR_NE, INVALID_DIAGDIR, INVALID_DIAGDIR
 };
 
-static bool EnumRoadSignalFindDepot(TileIndex tile, void* data, Trackdir trackdir, uint length, byte* state)
+static bool EnumRoadSignalFindDepot(TileIndex tile, void* data, Trackdir trackdir, uint length)
 {
 	RoadFindDepotData* rfdd = (RoadFindDepotData*)data;
 
@@ -1119,7 +1119,7 @@
 	uint mindist;
 };
 
-static bool EnumRoadTrackFindDist(TileIndex tile, void* data, Trackdir trackdir, uint length, byte* state)
+static bool EnumRoadTrackFindDist(TileIndex tile, void* data, Trackdir trackdir, uint length)
 {
 	FindRoadToChooseData* frd = (FindRoadToChooseData*)data;
 	uint dist = DistanceManhattan(tile, frd->dest);
--- a/src/ship_cmd.cpp
+++ b/src/ship_cmd.cpp
@@ -428,7 +428,7 @@
 	uint best_length;
 };
 
-static bool ShipTrackFollower(TileIndex tile, PathFindShip *pfs, int track, uint length, byte *state)
+static bool ShipTrackFollower(TileIndex tile, PathFindShip *pfs, int track, uint length)
 {
 	/* Found dest? */
 	if (tile == pfs->dest_coords) {