mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-17 21:25:40 +00:00
(svn r10747) -Codechange: add a variable that points to some index in the pool that is not beyond the first free pool item. It does not necessarily point to the first free item, but it reduces allocation time as it does not have to start at the first item in the pool to find the first free item.
This commit is contained in:
parent
9378e5fd38
commit
9009f0aa20
@ -33,6 +33,7 @@ void OldMemoryPoolBase::CleanPool()
|
||||
this->total_items = 0;
|
||||
this->current_blocks = 0;
|
||||
this->blocks = NULL;
|
||||
this->first_free_index = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,6 +42,7 @@ protected:
|
||||
uint total_items; ///< How many items we now have in this pool
|
||||
|
||||
public:
|
||||
uint first_free_index; ///< The index of the first free pool item in this pool
|
||||
byte **blocks; ///< An array of blocks (one block hold all the items)
|
||||
|
||||
/**
|
||||
@ -170,6 +171,7 @@ struct PoolItem {
|
||||
*/
|
||||
virtual ~PoolItem()
|
||||
{
|
||||
if (this->index < Tpool->first_free_index) Tpool->first_free_index = this->index;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,8 +261,9 @@ private:
|
||||
*/
|
||||
static T *AllocateRaw()
|
||||
{
|
||||
for (T *t = Tpool->Get(0); t != NULL; t = (t->index + 1U < Tpool->GetSize()) ? Tpool->Get(t->index + 1U) : NULL) {
|
||||
for (T *t = Tpool->Get(Tpool->first_free_index); t != NULL; t = (t->index + 1U < Tpool->GetSize()) ? Tpool->Get(t->index + 1U) : NULL) {
|
||||
if (!t->IsValid()) {
|
||||
Tpool->first_free_index = t->index;
|
||||
Tid index = t->index;
|
||||
|
||||
memset(t, 0, sizeof(T));
|
||||
|
Loading…
Reference in New Issue
Block a user