(svn r13077) -Codechange: move function that updates cached num_engines to engine.cpp, make it run only 1 loop
authorsmatz
Tue, 13 May 2008 21:36:09 +0000
changeset 10533 24b0b6e1e8e9
parent 10532 d95aa7f84bc8
child 10534 da1bea97f733
(svn r13077) -Codechange: move function that updates cached num_engines to engine.cpp, make it run only 1 loop
src/engine.cpp
src/engine_func.h
src/openttd.cpp
--- a/src/engine.cpp	Tue May 13 21:16:23 2008 +0000
+++ b/src/engine.cpp	Tue May 13 21:36:09 2008 +0000
@@ -27,6 +27,7 @@
 #include "settings_type.h"
 #include "oldpool_func.h"
 #include "core/alloc_func.hpp"
+#include "vehicle_func.h"
 #include "map"
 
 #include "table/strings.h"
@@ -140,6 +141,42 @@
 	qsort(&((*el)[begin]), num_items, sizeof(EngineID), compare);
 }
 
+void SetCachedEngineCounts()
+{
+	uint engines = GetEnginePoolSize();
+
+	/* Set up the engine count for all players */
+	Player *p;
+	FOR_ALL_PLAYERS(p) {
+		free(p->num_engines);
+		p->num_engines = CallocT<EngineID>(engines);
+	}
+
+	/* Recalculate */
+	Group *g;
+	FOR_ALL_GROUPS(g) {
+		free(g->num_engines);
+		g->num_engines = CallocT<EngineID>(engines);
+	}
+
+	const Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		if (!IsEngineCountable(v)) continue;
+
+		assert(v->engine_type < engines);
+
+		GetPlayer(v->owner)->num_engines[v->engine_type]++;
+
+		if (v->group_id == DEFAULT_GROUP) continue;
+
+		g = GetGroup(v->group_id);
+		assert(v->type == g->vehicle_type);
+		assert(v->owner == g->owner);
+
+		g->num_engines[v->engine_type]++;
+	}
+}
+
 void SetupEngines()
 {
 	_Engine_pool.CleanPool();
--- a/src/engine_func.h	Tue May 13 21:16:23 2008 +0000
+++ b/src/engine_func.h	Tue May 13 21:36:09 2008 +0000
@@ -27,6 +27,7 @@
 
 bool IsEngineBuildable(EngineID engine, VehicleType type, PlayerID player);
 CargoID GetEngineCargoType(EngineID engine);
+void SetCachedEngineCounts();
 
 typedef int CDECL EngList_SortTypeFunction(const void*, const void*); ///< argument type for EngList_Sort()
 void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare);  ///< qsort of the engine list
--- a/src/openttd.cpp	Tue May 13 21:16:23 2008 +0000
+++ b/src/openttd.cpp	Tue May 13 21:36:09 2008 +0000
@@ -1335,42 +1335,17 @@
 	UpdateAllTownVirtCoords();
 	UpdateAllWaypointSigns();
 
-	/* Recalculate */
-	Group *g;
-	FOR_ALL_GROUPS(g) {
-		g->num_engines = CallocT<uint16>(GetEnginePoolSize());
-
-		const Vehicle *v;
-		FOR_ALL_VEHICLES(v) {
-			if (!IsEngineCountable(v)) continue;
-
-			if (v->group_id != g->index || v->type != g->vehicle_type || v->owner != g->owner) continue;
-
-			g->num_engines[v->engine_type]++;
+	Player *p;
+	FOR_ALL_PLAYERS(p) {
+		/* For each player, verify (while loading a scenario) that the inauguration date is the current year and set it
+		 * accordingly if it is not the case.  No need to set it on players that are not been used already,
+		 * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */
+		if (_file_to_saveload.filetype == FT_SCENARIO && p->inaugurated_year != MIN_YEAR) {
+			p->inaugurated_year = _cur_year;
 		}
 	}
 
-	/* Set up the engine count for all players */
-	Player *players[MAX_PLAYERS];
-	const Vehicle *v;
-
-	for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
-		players[i] = GetPlayer(i);
-
-		/* For each player, verify (while loading a scenario) that the inauguration date is the current year and set it
-		 * accordingly if it is not the case.  No need to set it on players that are not been used already,
-		 * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */
-		if (_file_to_saveload.filetype == FT_SCENARIO && players[i]->inaugurated_year != MIN_YEAR)
-			players[i]->inaugurated_year = _cur_year;
-
-		free(players[i]->num_engines);
-		players[i]->num_engines = CallocT<uint16>(GetEnginePoolSize());
-	}
-
-	FOR_ALL_VEHICLES(v) {
-		if (!IsEngineCountable(v)) continue;
-		players[v->owner]->num_engines[v->engine_type]++;
-	}
+	SetCachedEngineCounts();
 
 	return true;
 }