27#ifndef _UCOMMON_REUSE_H_
28#define _UCOMMON_REUSE_H_
30#ifndef _UCOMMON_THREAD_H_
36typedef unsigned short vectorsize_t;
45class __EXPORT ArrayReuse :
public ReusableAllocator
49 unsigned count, limit, used;
52 __DELETE_DEFAULTS(ArrayReuse);
55 ArrayReuse(
size_t objsize,
unsigned c);
56 ArrayReuse(
size_t objsize,
unsigned c,
void *memory);
65 bool avail(
void)
const;
79class __EXPORT PagerReuse :
protected __PROTOCOL MemoryRedirect,
protected ReusableAllocator
82 unsigned limit, count;
85 __DELETE_DEFAULTS(PagerReuse);
91 bool avail(
void)
const;
104class array_reuse :
protected ArrayReuse
107 __DELETE_DEFAULTS(array_reuse);
115 ArrayReuse(sizeof(T), count) {}
123 ArrayReuse(sizeof(T), count, memory) {}
129 inline operator bool()
const {
146 return static_cast<T*
>(ArrayReuse::request());
155 return static_cast<T*
>(ArrayReuse::get());
164 return init<T>(
static_cast<T*
>(ArrayReuse::get()));
173 inline T*
get(timeout_t timeout) {
174 return static_cast<T*
>(ArrayReuse::get(timeout));
184 return init<T>(
static_cast<T*
>(ArrayReuse::get(timeout)));
200 inline operator T*() {
221class paged_reuse :
protected PagerReuse
224 __DELETE_DEFAULTS(paged_reuse);
235 PagerReuse(
pager, sizeof(T), count) {}
241 inline operator bool()
const {
242 return PagerReuse::avail();
250 return !PagerReuse::avail();
259 return static_cast<T*
>(PagerReuse::get());
269 return init<T>(
static_cast<T*
>(PagerReuse::get()));
278 inline T *
get(timeout_t timeout) {
279 return static_cast<T*
>(PagerReuse::get(timeout));
290 return init<T>(
static_cast<T*
>(PagerReuse::get(timeout)));
298 return static_cast<T*
>(PagerReuse::request());
323 inline operator T*() {
T * init(T *memory)
Template function to initialize memory by invoking default constructor.
Common namespace for all ucommon objects.
Reusable objects for forming private heaps.
A managed private heap for small allocations.
Mempager managed type factory for pager pool objects.
~ArrayReuse()
Destroy reusable private heap array.
T * request(void)
Request immediately next available typed object from the heap.
array_reuse(unsigned count, void *memory)
Create reusable objects of specific type in preallocated memory.
T * create(timeout_t timeout)
Create a typed object from the heap.
T * create(void)
Create a typed object from the heap.
T * get(void)
Get a typed object from the heap.
array_reuse(unsigned count)
Create private heap of reusable objects of specified type.
void release(T *object)
Release (return) a typed object back to the heap for re-use.
bool operator!() const
Test if the entire heap has been allocated.
T * operator*()
Get a typed object from the heap by pointer reference.
T * get(timeout_t timeout)
Get a typed object from the heap.
T * create(void)
Get a typed object from the pager heap.
void release(T *object)
Release (return) a typed object back to the pager heap for re-use.
T * create(timeout_t timeout)
Create a typed object from the heap.
T * get(void)
Get a typed object from the pager heap.
T * operator*()
Get a typed object from the pager heap by type casting reference.
bool operator!() const
Test if no objects are available for reuse or the pager.
T * get(timeout_t timeout)
Get a typed object from the heap.
paged_reuse(mempager *pager, unsigned count)
Create a managed reusable typed object pool.
T * request(void)
Request immediately next available typed object from the pager heap.
void release(ReusableObject *object)
Release resuable object.
Thread classes and sychronization objects.