/* -*-c-*-
*
- * $Id: arena.h,v 1.1 2000/06/17 10:37:53 mdw Exp $
+ * $Id$
*
* Abstraction for memory allocation arenas
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: arena.h,v $
- * Revision 1.1 2000/06/17 10:37:53 mdw
- * Basic arena management.
- *
- */
-
#ifndef MLIB_ARENA_H
#define MLIB_ARENA_H
/* --- An arena structure --- */
typedef struct arena {
- struct arena_ops *ops;
+ const struct arena_ops *ops;
} arena;
typedef struct arena_ops {
void *(*alloc)(arena */*a*/, size_t /*sz*/);
- void *(*realloc)(arena */*a*/, void */*p*/, size_t /*sz*/);
+ void *(*realloc)(arena */*a*/, void */*p*/, size_t /*sz*/, size_t /*osz*/);
void (*free)(arena */*a*/, void */*p*/);
void (*purge)(arena */*a*/);
} arena_ops;
* Arguments: @arena *a@ = pointer to arena block
* @void *p@ = pointer to memory block to resize
* @size_t sz@ = size desired for the block
+ * @size_t osz@ = size of the old block
*
* Returns: ---
*
* support @realloc@ properly.
*/
-extern void *arena_fakerealloc(arena */*a*/, void */*p*/, size_t /*sz*/);
+extern void *arena_fakerealloc(arena */*a*/, void */*p*/,
+ size_t /*sz*/, size_t /*osz*/);
/* --- Useful macros --- */
#define A_ALLOC(a, sz) (((a)->ops->alloc)((a), (sz)))
-#define A_REALLOC(a, p, sz) (((a)->ops->realloc)((a), (p), (sz)))
+#define A_REALLOC(a, p, sz, osz) (((a)->ops->realloc)((a), (p), (sz), (osz)))
#define A_FREE(a, p) (((a)->ops->free)((a), (p)))
/* --- Simple function equivalents --- */
extern void *a_alloc(arena */*a*/, size_t /*sz*/);
-extern void *a_realloc(arena */*a*/, void */*p*/, size_t /*sz*/);
+extern void *a_realloc(arena */*a*/, void */*p*/,
+ size_t /*sz*/, size_t /*osz*/);
extern void a_free(arena */*a*/, void */*p*/);
/*----- That's all, folks -------------------------------------------------*/