13 #ifndef __FLCONTAINERS_H 14 #define __FLCONTAINERS_H 18 #include "lockfree/stack.hpp" 19 #include "lockfree/fifo.hpp" 23 class LifoCell:
public lockfree::stack_node {};
26 :
public lockfree::intrusive_stack<LifoCell>
31 inline bool Avail()
const {
return !this->empty(); }
71 template <
typename T,
int M = 2,
int O = 1>
94 if(resz < sz*M+O) { reuse.Push(p); ++resz; }
106 :
public lockfree::intrusive_fifo<FifoCell>
111 inline bool Avail()
const {
return !this->empty(); }
115 template <
typename T>
125 template <
typename T>
134 template <
typename T>
154 template <
typename T,
int M = 2,
int O = 1>
159 ~PooledFifo() { T *n;
while((n = reuse.Get()) != NULL)
delete n; }
161 inline T *
New() { T *n = reuse.Get();
return n?n:
new T; }
162 inline void Free(T *p) {
if(resz < sz*M+O) reuse.Put(p);
else delete p; }
void Put(T *c)
Definition: flcontainers.h:120
T Pop()
Definition: flcontainers.h:62
size_t sz
Definition: flcontainers.h:99
T * Pop()
Definition: flcontainers.h:40
T * New()
Definition: flcontainers.h:161
TypedLifo< T > reuse
Definition: flcontainers.h:98
T * Pop()
Definition: flcontainers.h:79
T value
Definition: flcontainers.h:49
void Free(T *p)
Definition: flcontainers.h:92
ValueFifoCell(T v)
Definition: flcontainers.h:130
~PooledFifo()
Definition: flcontainers.h:159
FifoCell * Get()
Definition: flcontainers.h:110
T * Get()
Definition: flcontainers.h:121
Definition: flcontainers.h:105
ValueLifoCell(T v)
Definition: flcontainers.h:48
TypedFifo< T > reuse
Definition: flcontainers.h:164
void Free(T *p)
Definition: flcontainers.h:162
Try to find out the platform.
void Push(LifoCell *cell)
Definition: flcontainers.h:29
Definition: flcontainers.h:35
bool Avail() const
Definition: flcontainers.h:111
void Push(T v)
Definition: flcontainers.h:57
T value
Definition: flcontainers.h:131
void Put(T v)
Definition: flcontainers.h:139
Definition: flcontainers.h:44
Definition: flcontainers.h:103
Definition: flcontainers.h:25
Definition: flcontainers.h:155
Definition: flcontainers.h:53
void Push(T *c)
Definition: flcontainers.h:78
Definition: flcontainers.h:135
PooledLifo()
Definition: flcontainers.h:76
Definition: flcontainers.h:116
T Get()
Definition: flcontainers.h:144
T * New()
Definition: flcontainers.h:81
bool Avail() const
Definition: flcontainers.h:31
Definition: flcontainers.h:23
void Put(FifoCell *cl)
Definition: flcontainers.h:109
LifoCell * Pop()
Definition: flcontainers.h:30
void Push(T *c)
Definition: flcontainers.h:39
Definition: flcontainers.h:72
size_t sz
Definition: flcontainers.h:165
Definition: flcontainers.h:126