(svn r14351) -Codechange: call CFollowTrackT::GetSingleTramBit() only if we know it is a tram, so compiler doesn't generate code for trains and ships
authorsmatz
Wed, 17 Sep 2008 00:32:35 +0000
changeset 10160 8608d357e0dd
parent 10159 ed8755ed3810
child 10161 1343bc8e2c57
(svn r14351) -Codechange: call CFollowTrackT::GetSingleTramBit() only if we know it is a tram, so compiler doesn't generate code for trains and ships
src/yapf/follow_track.hpp
--- a/src/yapf/follow_track.hpp	Tue Sep 16 22:56:43 2008 +0000
+++ b/src/yapf/follow_track.hpp	Wed Sep 17 00:32:35 2008 +0000
@@ -82,7 +82,9 @@
 	/** Tests if a tile is a road tile with a single tramtrack (tram can reverse) */
 	FORCEINLINE DiagDirection GetSingleTramBit(TileIndex tile)
 	{
-		if (IsTram() && IsNormalRoadTile(tile)) {
+		assert(IsTram()); // this function shouldn't be called in other cases
+
+		if (IsNormalRoadTile(tile)) {
 			RoadBits rb = GetRoadBits(tile, ROADTYPE_TRAM);
 			switch (rb) {
 				case ROAD_NW: return DIAGDIR_NW;
@@ -103,7 +105,7 @@
 		m_old_td = old_td;
 		m_err = EC_NONE;
 		assert(((TrackStatusToTrackdirBits(GetTileTrackStatus(m_old_tile, TT(), m_veh ? m_veh->u.road.compatible_roadtypes : 0)) & TrackdirToTrackdirBits(m_old_td)) != 0) ||
-		       (GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR)); // Disable the assertion for single tram bits
+		       (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR)); // Disable the assertion for single tram bits
 		m_exitdir = TrackdirToExitdir(m_old_td);
 		if (ForcedReverse()) return true;
 		if (!CanExitOldTile()) return false;
@@ -205,7 +207,7 @@
 		} else {
 			m_new_td_bits = TrackStatusToTrackdirBits(GetTileTrackStatus(m_new_tile, TT(), m_veh != NULL ? m_veh->u.road.compatible_roadtypes : 0));
 
-			if (m_new_td_bits == 0) {
+			if (IsTram() && m_new_td_bits == 0) {
 				/* GetTileTrackStatus() returns 0 for single tram bits.
 				 * As we cannot change it there (easily) without breaking something, change it here */
 				switch (GetSingleTramBit(m_new_tile)) {
@@ -239,10 +241,12 @@
 		}
 
 		/* single tram bits can only be left in one direction */
-		DiagDirection single_tram = GetSingleTramBit(m_old_tile);
-		if (single_tram != INVALID_DIAGDIR && single_tram != m_exitdir) {
-			m_err = EC_NO_WAY;
-			return false;
+		if (IsTram()) {
+			DiagDirection single_tram = GetSingleTramBit(m_old_tile);
+			if (single_tram != INVALID_DIAGDIR && single_tram != m_exitdir) {
+				m_err = EC_NO_WAY;
+				return false;
+			}
 		}
 
 		// road depots can be also left in one direction only
@@ -269,10 +273,12 @@
 		}
 
 		/* single tram bits can only be entered from one direction */
-		DiagDirection single_tram = GetSingleTramBit(m_new_tile);
-		if (single_tram != INVALID_DIAGDIR && single_tram != ReverseDiagDir(m_exitdir)) {
-			m_err = EC_NO_WAY;
-			return false;
+		if (IsTram()) {
+			DiagDirection single_tram = GetSingleTramBit(m_new_tile);
+			if (single_tram != INVALID_DIAGDIR && single_tram != ReverseDiagDir(m_exitdir)) {
+				m_err = EC_NO_WAY;
+				return false;
+			}
 		}
 
 		// road and rail depots can also be entered from one direction only
@@ -369,7 +375,7 @@
 		}
 
 		// single tram bits cause reversing
-		if (GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) {
+		if (IsTram() && GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) {
 			// reverse
 			m_new_tile = m_old_tile;
 			m_new_td_bits = TrackdirToTrackdirBits(ReverseTrackdir(m_old_td));