changeset 13226:5c4fb8258742 draft

(svn r17733) -Codechange: store the 'days in transit' cache as the sum of the days in transit instead of the average; the variable isn't requested that often (primarily station NewGRFs) that the dividing/testing for dividing by 0 step needs to be cached.
author rubidium <rubidium@openttd.org>
date Tue, 06 Oct 2009 21:24:03 +0000
parents a90c47f6d7f0
children f5a7cee9edd1
files src/cargopacket.cpp src/cargopacket.h
diffstat 2 files changed, 14 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/cargopacket.cpp
+++ b/src/cargopacket.cpp
@@ -78,14 +78,13 @@
 
 void CargoList::AgeCargo()
 {
-	if (this->Empty()) return;
+	for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) {
+		/* If we're at the maximum, then we can't increase no more. */
+		if ((*it)->days_in_transit == 0xFF) continue;
 
-	uint dit = 0;
-	for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) {
-		if ((*it)->days_in_transit != 0xFF) (*it)->days_in_transit++;
-		dit += (*it)->days_in_transit * (*it)->count;
+		(*it)->days_in_transit++;
+		this->cargo_days_in_transit += (*it)->count;
 	}
-	this->days_in_transit = dit / count;
 }
 
 void CargoList::Append(CargoPacket *cp)
@@ -216,15 +215,11 @@
 {
 	this->count = 0;
 	this->feeder_share = 0;
-	this->days_in_transit = 0;
+	this->cargo_days_in_transit = 0;
 
-	if (this->packets.empty()) return;
-
-	uint dit = 0;
 	for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) {
-		this->count        += (*it)->count;
-		dit                += (*it)->days_in_transit * (*it)->count;
-		this->feeder_share += (*it)->feeder_share;
+		this->count                 += (*it)->count;
+		this->cargo_days_in_transit += (*it)->days_in_transit * (*it)->count;
+		this->feeder_share          += (*it)->feeder_share;
 	}
-	this->days_in_transit = dit / count;
 }
--- a/src/cargopacket.h
+++ b/src/cargopacket.h
@@ -161,11 +161,11 @@
 	};
 
 private:
-	Money feeder_share;   ///< Cache for the feeder share
-	uint count;           ///< Cache for the number of cargo entities
-	uint days_in_transit; ///< Cache for the number of days in transit
+	Money feeder_share;         ///< Cache for the feeder share
+	uint count;                 ///< Cache for the number of cargo entities
+	uint cargo_days_in_transit; ///< Cache for the sum of number of days in transit of each entity; comparable to man-hours
 
-	List packets;         ///< The cargo packets in this list
+	List packets;               ///< The cargo packets in this list
 
 public:
 	/** The GoodsEntry has a CargoList. */
@@ -232,7 +232,7 @@
 	 */
 	FORCEINLINE uint DaysInTransit() const
 	{
-		return this->days_in_transit;
+		return this->count == 0 ? 0 : this->cargo_days_in_transit / this->count;
 	}