aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flcontainers.h
diff options
context:
space:
mode:
Diffstat (limited to 'externals/grill/flext/source/flcontainers.h')
-rw-r--r--externals/grill/flext/source/flcontainers.h10
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;
};