Mercurial > hg > openttd
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; }