(svn r10768) -Codechange: allow to specify from which index to search for a free pool item.
authorrubidium
Fri, 03 Aug 2007 18:34:47 +0000
changeset 7397 d39548123fbd
parent 7396 6b9f010b31ea
child 7398 b933416cf32b
(svn r10768) -Codechange: allow to specify from which index to search for a free pool item.
src/oldpool.h
--- a/src/oldpool.h	Fri Aug 03 12:29:56 2007 +0000
+++ b/src/oldpool.h	Fri Aug 03 18:34:47 2007 +0000
@@ -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;
 	}