37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
|
/* $Id: mempool.h,v 1.2 1997/11/13 23:53:09 colin Exp $ */
|
||
|
|
||
|
#ifndef MEMPOOL_H
|
||
|
#define MEMPOOL_H
|
||
|
|
||
|
typedef struct MemPool {
|
||
|
struct PoolBuf *head;
|
||
|
char *freeptr;
|
||
|
unsigned freespace;
|
||
|
unsigned chunksize; /* Default starting point */
|
||
|
unsigned long totalsize;
|
||
|
int (*purge)(void *); /* Return non-zero to retry alloc */
|
||
|
void *purgearg;
|
||
|
} MemPool;
|
||
|
|
||
|
/* A global pool for miscellaneous stuff. */
|
||
|
extern struct MemPool MiscPool;
|
||
|
|
||
|
/*
|
||
|
* Nice clean interfaces
|
||
|
*/
|
||
|
void memPoolInit(struct MemPool *pool);
|
||
|
void memPoolSetPurge(struct MemPool *pool, int (*purge)(void *), void *arg);
|
||
|
void memPoolEmpty(struct MemPool *pool);
|
||
|
void memPoolCutBack(struct MemPool *dest, struct MemPool const *cutback);
|
||
|
void *memPoolAlloc(struct MemPool *pool, unsigned len, unsigned alignment);
|
||
|
#ifdef DEADCODE
|
||
|
char const *memPoolStore(struct MemPool *pool, char const *str);
|
||
|
#endif
|
||
|
|
||
|
/* Lookie here! An ASNI-compliant alignment finder! */
|
||
|
#define alignof(type) (sizeof(struct{type _x; char _y;}) - sizeof(type))
|
||
|
|
||
|
#define memPoolNew(pool, type) memPoolAlloc(pool, sizeof(type), alignof(type))
|
||
|
|
||
|
#endif /* MEMPOOL_H */
|