(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.

pull/155/head
rubidium 15 years ago
parent 0a621eae7e
commit 702deb8366

@ -78,14 +78,13 @@ CargoList::~CargoList()
void CargoList::AgeCargo() void CargoList::AgeCargo()
{ {
if (this->Empty()) return;
uint dit = 0;
for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) { for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) {
if ((*it)->days_in_transit != 0xFF) (*it)->days_in_transit++; /* If we're at the maximum, then we can't increase no more. */
dit += (*it)->days_in_transit * (*it)->count; if ((*it)->days_in_transit == 0xFF) continue;
(*it)->days_in_transit++;
this->cargo_days_in_transit += (*it)->count;
} }
this->days_in_transit = dit / count;
} }
void CargoList::Append(CargoPacket *cp) void CargoList::Append(CargoPacket *cp)
@ -216,15 +215,11 @@ void CargoList::InvalidateCache()
{ {
this->count = 0; this->count = 0;
this->feeder_share = 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++) { for (List::const_iterator it = this->packets.begin(); it != this->packets.end(); it++) {
this->count += (*it)->count; this->count += (*it)->count;
dit += (*it)->days_in_transit * (*it)->count; this->cargo_days_in_transit += (*it)->days_in_transit * (*it)->count;
this->feeder_share += (*it)->feeder_share; this->feeder_share += (*it)->feeder_share;
} }
this->days_in_transit = dit / count;
} }

@ -161,11 +161,11 @@ public:
}; };
private: private:
Money feeder_share; ///< Cache for the feeder share Money feeder_share; ///< Cache for the feeder share
uint count; ///< Cache for the number of cargo entities uint count; ///< Cache for the number of cargo entities
uint days_in_transit; ///< Cache for the number of days in transit 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: public:
/** The GoodsEntry has a CargoList. */ /** The GoodsEntry has a CargoList. */
@ -232,7 +232,7 @@ public:
*/ */
FORCEINLINE uint DaysInTransit() const FORCEINLINE uint DaysInTransit() const
{ {
return this->days_in_transit; return this->count == 0 ? 0 : this->cargo_days_in_transit / this->count;
} }

Loading…
Cancel
Save