From e44c7600846ae992533f2d594f08a8e9b7ca7df3 Mon Sep 17 00:00:00 2001 From: rubidium Date: Thu, 2 Aug 2007 10:47:00 +0000 Subject: (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. --- src/oldpool.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/oldpool.h') diff --git a/src/oldpool.h b/src/oldpool.h index 5e5b53c59..6802cb63e 100644 --- a/src/oldpool.h +++ b/src/oldpool.h @@ -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)); -- cgit v1.2.3-70-g09d2