/* -*-c-*-
*
- * $Id: arena.h,v 1.1 2000/06/17 10:37:53 mdw Exp $
+ * $Id: arena.h,v 1.2 2000/07/16 12:29:16 mdw Exp $
*
* Abstraction for memory allocation arenas
*
/*----- Revision history --------------------------------------------------*
*
* $Log: arena.h,v $
+ * Revision 1.2 2000/07/16 12:29:16 mdw
+ * Change to arena `realloc' interface, to fix a design bug.
+ *
* Revision 1.1 2000/06/17 10:37:53 mdw
* Basic arena management.
*
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 -------------------------------------------------*/