diff options
Diffstat (limited to 'blt/src/bltPool.h')
-rw-r--r-- | blt/src/bltPool.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/blt/src/bltPool.h b/blt/src/bltPool.h new file mode 100644 index 00000000000..2c36550cde5 --- /dev/null +++ b/blt/src/bltPool.h @@ -0,0 +1,36 @@ +#ifndef BLT_POOL_H +#define BLT_POOL_H + +typedef struct Blt_PoolChainStruct { + struct Blt_PoolChainStruct *nextPtr; +} Blt_PoolChain; + +#define BLT_STRING_ITEMS 0 +#define BLT_FIXED_SIZE_ITEMS 1 +#define BLT_VARIABLE_SIZE_ITEMS 2 + +typedef struct Blt_PoolStruct *Blt_Pool; + +typedef void *(Blt_PoolAllocProc) _ANSI_ARGS_((Blt_Pool pool, size_t size)); +typedef void (Blt_PoolFreeProc) _ANSI_ARGS_((Blt_Pool pool, void *item)); + +struct Blt_PoolStruct { + Blt_PoolChain *headPtr; /* Chain of malloc'ed chunks. */ + Blt_PoolChain *freePtr; /* List of deleted items. This is only used + * for fixed size items. */ + size_t poolSize; /* Log2 of # of items in the current block. */ + size_t itemSize; /* Size of an item. */ + size_t bytesLeft; /* # of bytes left in the current chunk. */ + size_t waste; + + Blt_PoolAllocProc *allocProc; + Blt_PoolFreeProc *freeProc; +}; + +EXTERN Blt_Pool Blt_PoolCreate _ANSI_ARGS_((int type)); +EXTERN void Blt_PoolDestroy _ANSI_ARGS_((Blt_Pool pool)); + +#define Blt_PoolAllocItem(poolPtr, n) (*((poolPtr)->allocProc))(poolPtr, n) +#define Blt_PoolFreeItem(poolPtr, item) (*((poolPtr)->freeProc))(poolPtr, item) + +#endif /* BLT_POOL_H */ |