summaryrefslogtreecommitdiff
path: root/blt/src/bltPool.h
diff options
context:
space:
mode:
Diffstat (limited to 'blt/src/bltPool.h')
-rw-r--r--blt/src/bltPool.h36
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 */