Mercurial > hg > openttd
changeset 7397:4143cc4d4d8c draft
(svn r10768) -Codechange: allow to specify from which index to search for a free pool item.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Fri, 03 Aug 2007 18:34:47 +0000 |
parents | 57ff3c1c55de |
children | 6324d82f421d |
files | src/oldpool.h |
diffstat | 1 files changed, 16 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/oldpool.h +++ b/src/oldpool.h @@ -254,16 +254,28 @@ return false; } -private: +protected: /** * Allocate a pool item; possibly allocate a new block in the pool. * @return the allocated pool item (or NULL when the pool is full). */ static T *AllocateRaw() { - for (T *t = Tpool->Get(Tpool->first_free_index); t != NULL; t = (t->index + 1U < Tpool->GetSize()) ? Tpool->Get(t->index + 1U) : NULL) { + return AllocateRaw(Tpool->first_free_index); + } + + /** + * Allocate a pool item; possibly allocate a new block in the pool. + * @param first the first pool item to start searching + * @return the allocated pool item (or NULL when the pool is full). + */ + static T *AllocateRaw(uint &first) + { + uint last_minus_one = Tpool->GetSize(); + + for (T *t = Tpool->Get(first); t != NULL; t = (t->index < last_minus_one) ? Tpool->Get(t->index + 1U) : NULL) { if (!t->IsValid()) { - Tpool->first_free_index = t->index; + first = t->index; Tid index = t->index; memset(t, 0, Tpool->item_size); @@ -273,7 +285,7 @@ } /* Check if we can add a block to the pool */ - if (Tpool->AddBlockToPool()) return AllocateRaw(); + if (Tpool->AddBlockToPool()) return AllocateRaw(first); return NULL; }