changeset 13309:f571faf401af draft

(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.
author rubidium <rubidium@openttd.org>
date Tue, 20 Oct 2009 16:36:35 +0000
parents e44c31238b3c
children aa1ec5b3bac4
files src/cargopacket.cpp
diffstat 1 files changed, 2 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/cargopacket.cpp
+++ b/src/cargopacket.cpp
@@ -109,14 +109,14 @@
 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 @@
 
 	/* The packet could not be merged with another one */
 	this->packets.push_back(cp);
-	static_cast<Tinst *>(this)->AddToCache(cp);
 }