diff options
Diffstat (limited to 'externals/grill/flext/source/flcontainers.h')
-rw-r--r-- | externals/grill/flext/source/flcontainers.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/externals/grill/flext/source/flcontainers.h b/externals/grill/flext/source/flcontainers.h index ad32055a..a97df172 100644 --- a/externals/grill/flext/source/flcontainers.h +++ b/externals/grill/flext/source/flcontainers.h @@ -270,13 +270,14 @@ public: inline T *Pop() { return static_cast<T *>(Lifo::Pop()); }
};
-template <typename T>
+template <typename T,int M = 2,int O = 1>
class PooledLifo
: public TypedLifo<T>
{
public:
inline T *New() { T *n = reuse.Pop(); return n?n:new T; }
- inline Free(T *p) { if(reuse.Size() < Size()) reuse.Push(p); else delete p; }
+ inline size_t Size() const { return TypedLifo<T>::Size(); }
+ inline void Free(T *p) { if(reuse.Size() < Size()*M+O) reuse.Push(p); else delete p; }
private:
TypedLifo<T> reuse;
};
@@ -347,13 +348,14 @@ public: inline T *Clear() { return static_cast<T *>(Fifo::Clear()); }
};
-template <typename T>
+template <typename T,int M = 2,int O = 1>
class PooledFifo
: public TypedFifo<T>
{
public:
inline T *New() { T *n = reuse.Pop(); return n?n:new T; }
- inline Free(T *p) { if(reuse.Size() < Size()) reuse.Push(p); else delete p; }
+ inline size_t Size() const { return TypedFifo<T>::Size(); }
+ inline void Free(T *p) { if(reuse.Size() < Size()*M+O) reuse.Push(p); else delete p; }
private:
TypedLifo<T> reuse;
};
|