Changeset - r7033:4eb48f2ed5ed
[Not reviewed]
master
0 1 0
rubidium - 17 years ago 2007-06-23 20:38:28
rubidium@openttd.org
(svn r10297) -Codechange: increase the performance of CargoPacket::AllocateRaw using a very simple "caching" system.
1 file changed with 7 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/cargopacket.cpp
Show inline comments
 
@@ -8,6 +8,9 @@
 
#include "cargopacket.h"
 
#include "saveload.h"
 

	
 
/** Cache for speeding up lookups in AllocateRaw */
 
static uint _first_free_cargo_packet_index;
 

	
 
/**
 
 * Called if a new block is added to the station-pool
 
 */
 
@@ -31,6 +34,7 @@ DEFINE_OLD_POOL(CargoPacket, CargoPacket
 

	
 
void InitializeCargoPackets()
 
{
 
	_first_free_cargo_packet_index = 0;
 
	/* Clean the cargo packet pool and create 1 block in it */
 
	CleanPool(&_CargoPacket_pool);
 
	AddBlockToPool(&_CargoPacket_pool);
 
@@ -55,6 +59,7 @@ CargoPacket::CargoPacket(StationID sourc
 

	
 
CargoPacket::~CargoPacket()
 
{
 
	if (this->index < _first_free_cargo_packet_index) _first_free_cargo_packet_index = this->index;
 
	this->count = 0;
 
}
 

	
 
@@ -92,12 +97,13 @@ void CargoPacket::operator delete(void *
 

	
 
	/* We don't use FOR_ALL here, because FOR_ALL skips invalid items.
 
	 * TODO - This is just a temporary stage, this will be removed. */
 
	for (cp = GetCargoPacket(0); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) {
 
	for (cp = GetCargoPacket(_first_free_cargo_packet_index); cp != NULL; cp = (cp->index + 1U < GetCargoPacketPoolSize()) ? GetCargoPacket(cp->index + 1U) : NULL) {
 
		if (!cp->IsValid()) {
 
			CargoPacket::ID index = cp->index;
 

	
 
			memset(cp, 0, sizeof(CargoPacket));
 
			cp->index = index;
 
			_first_free_cargo_packet_index = cp->index;
 
			return cp;
 
		}
 
	}
0 comments (0 inline, 0 general)