ldmud-3.3.719/
ldmud-3.3.719/doc/
ldmud-3.3.719/doc/efun.de/
ldmud-3.3.719/doc/efun/
ldmud-3.3.719/doc/man/
ldmud-3.3.719/doc/other/
ldmud-3.3.719/mud/
ldmud-3.3.719/mud/heaven7/
ldmud-3.3.719/mud/lp-245/
ldmud-3.3.719/mud/lp-245/banish/
ldmud-3.3.719/mud/lp-245/doc/
ldmud-3.3.719/mud/lp-245/doc/examples/
ldmud-3.3.719/mud/lp-245/doc/sefun/
ldmud-3.3.719/mud/lp-245/log/
ldmud-3.3.719/mud/lp-245/obj/Go/
ldmud-3.3.719/mud/lp-245/players/lars/
ldmud-3.3.719/mud/lp-245/room/death/
ldmud-3.3.719/mud/lp-245/room/maze1/
ldmud-3.3.719/mud/lp-245/room/sub/
ldmud-3.3.719/mud/lp-245/secure/
ldmud-3.3.719/mud/sticklib/
ldmud-3.3.719/mud/sticklib/src/
ldmud-3.3.719/mudlib/deprecated/
ldmud-3.3.719/mudlib/uni-crasher/
ldmud-3.3.719/pkg/
ldmud-3.3.719/pkg/debugger/
ldmud-3.3.719/pkg/diff/
ldmud-3.3.719/pkg/misc/
ldmud-3.3.719/src/
ldmud-3.3.719/src/autoconf/
ldmud-3.3.719/src/ptmalloc/
ldmud-3.3.719/src/util/
ldmud-3.3.719/src/util/erq/
ldmud-3.3.719/src/util/indent/hosts/next/
ldmud-3.3.719/src/util/xerq/
ldmud-3.3.719/src/util/xerq/lpc/
ldmud-3.3.719/src/util/xerq/lpc/www/
ldmud-3.3.719/test/generic/
ldmud-3.3.719/test/inc/
ldmud-3.3.719/test/t-0000398/
ldmud-3.3.719/test/t-0000548/
ldmud-3.3.719/test/t-030925/
ldmud-3.3.719/test/t-040413/
ldmud-3.3.719/test/t-041124/
ldmud-3.3.719/test/t-language/
#ifndef MEMPOOLS_H__
#define MEMPOOLS_H__ 1

#include <sys/types.h>

#include "typedefs.h" /* strbuf_t */

/* --- Types --- */

/* --- enum membuffer_e: Memory buffer IDs ---
 */

typedef enum membuffer {
    mbFile     /* read_file(), restore_(), read_bytes() */
  , mbSwap     /* Swapper buffer */
  , mbMax
} membuffer_e;

/* --- Mempool, struct mempool_s: a memory pool ---
 *
 * The structure contains no public data.
 */

struct mempool_s;
typedef struct mempool_s mempool_t;
typedef struct mempool_s * Mempool;

/* --- Prototypes --- */

extern Mempool new_mempool (size_t iSize);
extern Mempool new_lifopool (size_t iSize);
extern size_t  size_mempool (size_t elemsize);
extern size_t  size_lifopool (size_t elemsize);
extern void    mempool_depend_on (Mempool pSub, Mempool pSuper);
extern void *  mempool_alloc (Mempool pPool, size_t iSize);
extern void    mempool_free (Mempool pPool, void * adr);
extern void    mempool_reset (Mempool pPool);
extern void    mempool_delete (Mempool pPool);
extern size_t  mempool_size (Mempool pPool);

extern void   mb_init(void);
extern void   mb_release(void);
extern void * mb_alloc(membuffer_e buf, size_t size);
extern void * mb_realloc(membuffer_e buf, size_t size);
extern size_t mb_status (strbuf_t * sbuf, Bool verbose);
extern void   mb_dinfo_status (svalue_t *svp, int value);

#define mb_free(buf) NOOP
  /* Use the above macro to 'free' the memory.
   * While it may redundant, use of the macro improves the readability
   * of the code!
   */

#ifdef GC_SUPPORT

extern void mempool_clear_refs (Mempool pPool);
extern void mempool_note_refs (Mempool pPool);
extern void mb_clear_refs (void);
extern void mb_note_refs (void);

#endif /* GC_SUPPORT */

#endif /* MEMPOOLS_H__ */