changeset 18153:ca071969f8d7 draft

(svn r22978) -Codechange: Replace IncreaseGroupNumVehicle() and DecreaseGroupNumVehicle() with GroupStatistics::CountVehicle().
author frosch <frosch@openttd.org>
date Mon, 03 Oct 2011 17:21:41 +0000
parents 545be3b5f43e
children ebcb3f30bd4a
files src/group.h src/group_cmd.cpp src/train_cmd.cpp src/vehicle.cpp
diffstat 4 files changed, 59 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/src/group.h
+++ b/src/group.h
@@ -31,6 +31,11 @@
 
 	void Clear();
 
+	static GroupStatistics &Get(CompanyID company, GroupID id_g, VehicleType type);
+	static GroupStatistics &Get(const Vehicle *v);
+
+	static void CountVehicle(const Vehicle *v, int delta);
+
 	static void UpdateAfterLoad();
 };
 
@@ -81,27 +86,6 @@
 
 uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
 
-/**
- * Increase the number of vehicles by one in a group.
- * @param id_g Group id.
- */
-static inline void IncreaseGroupNumVehicle(GroupID id_g)
-{
-	Group *g = Group::GetIfValid(id_g);
-	if (g != NULL) g->statistics.num_vehicle++;
-}
-
-/**
- * Decrease the number of vehicles by one in a group.
- * @param id_g Group id.
- */
-static inline void DecreaseGroupNumVehicle(GroupID id_g)
-{
-	Group *g = Group::GetIfValid(id_g);
-	if (g != NULL) g->statistics.num_vehicle--;
-}
-
-
 void SetTrainGroupID(Train *v, GroupID grp);
 void UpdateTrainGroupID(Train *v);
 void RemoveVehicleFromGroup(const Vehicle *v);
--- a/src/group_cmd.cpp
+++ b/src/group_cmd.cpp
@@ -55,6 +55,35 @@
 }
 
 /**
+ * Returns the GroupStatistics for a specific group.
+ * @param company Owner of the group.
+ * @param id_g    GroupID of the group.
+ * @param type    VehicleType of the vehicles in the group.
+ * @return Statistics for the group.
+ */
+/* static */ GroupStatistics &GroupStatistics::Get(CompanyID company, GroupID id_g, VehicleType type)
+{
+	if (Group::IsValidID(id_g)) {
+		Group *g = Group::Get(id_g);
+		assert(g->owner == company);
+		assert(g->vehicle_type == type);
+		return g->statistics;
+	}
+
+	NOT_REACHED();
+}
+
+/**
+ * Returns the GroupStatistic for the group of a vehicle.
+ * @param v Vehicle.
+ * @return GroupStatistics for the group of the vehicle.
+ */
+/* static */ GroupStatistics &GroupStatistics::Get(const Vehicle *v)
+{
+	return GroupStatistics::Get(v->owner, v->group_id, v->type);
+}
+
+/**
  * Update all caches after loading a game, changing NewGRF etc..
  */
 /* static */ void GroupStatistics::UpdateAfterLoad()
@@ -89,10 +118,25 @@
 		assert(v->owner == g->owner);
 
 		g->statistics.num_engines[v->engine_type]++;
-		if (v->IsPrimaryVehicle()) g->statistics.num_vehicle++;
+		if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(v, 1);
 	}
 }
 
+/**
+ * Update num_vehicle when adding or removing a vehicle.
+ * @param v Vehicle to count.
+ * @param delta +1 to add, -1 to remove.
+ */
+/* static */ void GroupStatistics::CountVehicle(const Vehicle *v, int delta)
+{
+	assert(delta == 1 || delta == -1);
+	if (!Group::IsValidID(v->group_id)) return;
+
+	GroupStatistics &stats = GroupStatistics::Get(v);
+
+	stats.num_vehicle += delta;
+}
+
 
 /**
  * Update the num engines of a groupID. Decrease the old one and increase the new one
@@ -276,8 +320,7 @@
 	if (v->owner != _current_company || !v->IsPrimaryVehicle()) return CMD_ERROR;
 
 	if (flags & DC_EXEC) {
-		DecreaseGroupNumVehicle(v->group_id);
-		IncreaseGroupNumVehicle(new_g);
+		GroupStatistics::CountVehicle(v, -1);
 
 		switch (v->type) {
 			default: NOT_REACHED();
@@ -292,6 +335,8 @@
 				break;
 		}
 
+		GroupStatistics::CountVehicle(v, 1);
+
 		/* Update the Replace Vehicle Windows */
 		SetWindowDirty(WC_REPLACE_VEHICLE, v->type);
 		InvalidateWindowData(GetWindowClassForVehicleType(v->type), VehicleListIdentifier(VL_GROUP_LIST, v->type, _current_company).Pack());
@@ -412,7 +457,7 @@
 {
 	if (!v->IsPrimaryVehicle()) return;
 
-	if (!IsDefaultGroupID(v->group_id)) DecreaseGroupNumVehicle(v->group_id);
+	if (!IsDefaultGroupID(v->group_id)) GroupStatistics::CountVehicle(v, -1);
 }
 
 
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -1245,13 +1245,13 @@
 			/* We are going to be moved to a different train, and
 			 * we were the front engine of the original train. */
 			if (dst_head != NULL && dst_head != src && (src_head == NULL || !src_head->IsFrontEngine())) {
-				DecreaseGroupNumVehicle(src->group_id);
+				GroupStatistics::CountVehicle(src, -1);
 			}
 
 			/* The front engine is going to be moved later in the
 			 * current train, and it will not be a train anymore. */
 			if (dst_head == NULL && !src_head->IsFrontEngine()) {
-				DecreaseGroupNumVehicle(src->group_id);
+				GroupStatistics::CountVehicle(src, -1);
 			}
 
 			/* Delete orders, group stuff and the unit number as we're not the
@@ -1264,7 +1264,7 @@
 		/* We were a front engine and we are becoming one for a different train.
 		 * Increase the group counter accordingly. */
 		if (original_src_head == src && dst_head == src) {
-			IncreaseGroupNumVehicle(src->group_id);
+			GroupStatistics::CountVehicle(src, 1);
 		}
 
 		/* We weren't a front engine but are becoming one. So
@@ -1354,7 +1354,7 @@
 
 			/* Copy other important data from the front engine */
 			new_head->CopyVehicleConfigAndStatistics(first);
-			IncreaseGroupNumVehicle(new_head->group_id);
+			GroupStatistics::CountVehicle(new_head, 1);
 
 			/* If we deleted a window then open a new one for the 'new' train */
 			if (IsLocalCompany() && w != NULL) ShowVehicleViewWindow(new_head);
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -698,7 +698,7 @@
 
 		DeleteGroupHighlightOfVehicle(this);
 		if (Group::IsValidID(this->group_id)) Group::Get(this->group_id)->statistics.num_engines[this->engine_type]--;
-		if (this->IsPrimaryVehicle()) DecreaseGroupNumVehicle(this->group_id);
+		if (this->IsPrimaryVehicle()) GroupStatistics::CountVehicle(this, -1);
 	}
 
 	if (this->type == VEH_AIRCRAFT && this->IsPrimaryVehicle()) {