diff options
author | rubidium <rubidium@openttd.org> | 2009-10-20 16:36:35 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-10-20 16:36:35 +0000 |
commit | 86031d434d11bb531a1a79239530e81f6627976b (patch) | |
tree | 48074ade0edb087574397938bf09c0db01529991 /src | |
parent | 06c55863ca6b5bff147c2b11f08f7193fc2a9f81 (diff) | |
download | openttd-86031d434d11bb531a1a79239530e81f6627976b.tar.xz |
(svn r17818) -Codechange: iterate the cargo list from the back when trying to merge packets. Chances are higher that the last packet (in the FIFO-ish queue) is mergeable with the to be added package. If a train gets loaded packets get split up and put into the different carriages, at unload they are unloaded in the same order so the last in the FIFO-ish queue is likely the packet it can merge with.
This results in a 5-10% performance improvement of CargoList's Append/MoveTo without performance degradation of AgeCargo.
Diffstat (limited to 'src')
-rw-r--r-- | src/cargopacket.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index 06a683d0c..e2dbf900d 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -109,14 +109,14 @@ template <class Tinst> void CargoList<Tinst>::Append(CargoPacket *cp) { assert(cp != NULL); + static_cast<Tinst *>(this)->AddToCache(cp); - for (Iterator it(this->packets.begin()); it != this->packets.end(); it++) { + for (List::reverse_iterator it(this->packets.rbegin()); it != this->packets.rend(); it++) { CargoPacket *icp = *it; if (Tinst::AreMergable(icp, cp) && icp->count + cp->count <= CargoPacket::MAX_COUNT) { icp->count += cp->count; icp->feeder_share += cp->feeder_share; - static_cast<Tinst *>(this)->AddToCache(cp); delete cp; return; } @@ -124,7 +124,6 @@ void CargoList<Tinst>::Append(CargoPacket *cp) /* The packet could not be merged with another one */ this->packets.push_back(cp); - static_cast<Tinst *>(this)->AddToCache(cp); } |