From 6af1fb2bdd32898d9456174d99413adf3e466797 Mon Sep 17 00:00:00 2001 From: smatz Date: Sun, 6 Apr 2008 23:49:45 +0000 Subject: (svn r12599) -Codechange: force AllocateSafeRaw() to be linked to simplify compiler's decisions about inlining --- src/oldpool_func.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/oldpool_func.h (limited to 'src/oldpool_func.h') diff --git a/src/oldpool_func.h b/src/oldpool_func.h new file mode 100644 index 000000000..e4d1c47d5 --- /dev/null +++ b/src/oldpool_func.h @@ -0,0 +1,34 @@ +/* $Id$ */ + +#ifndef OLDPOOL_FUNC_H + +#include "oldpool.h" + +/** + * Allocate a pool item; possibly allocate a new block in the pool. + * @param first the first pool item to start searching + * @pre first <= Tpool->GetSize() + * @return the allocated pool item (or NULL when the pool is full). + */ +template *Tpool> T *PoolItem::AllocateSafeRaw(uint &first) +{ + uint last_minus_one = Tpool->GetSize() - 1; + + for (T *t = Tpool->Get(first); t != NULL; t = (t->index < last_minus_one) ? Tpool->Get(t->index + 1U) : NULL) { + if (!t->IsValid()) { + first = t->index; + Tid index = t->index; + + memset(t, 0, Tpool->item_size); + t->index = index; + return t; + } + } + + /* Check if we can add a block to the pool */ + if (Tpool->AddBlockToPool()) return AllocateRaw(first); + + return NULL; +} + +#endif /* OLDPOOL_FUNC_H */ -- cgit v1.2.3-70-g09d2