chiark / gitweb /
Version bump.
[mLib] / arena.h
diff --git a/arena.h b/arena.h
index 6ceef09701b121e8dffd47b4cbdc4cf9c269ef28..4b1dffe6ffd0c70231486f20183c13ce13e12632 100644 (file)
--- a/arena.h
+++ b/arena.h
@@ -1,6 +1,6 @@
 /* -*-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
  *
@@ -30,6 +30,9 @@
 /*----- 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.
  *
@@ -56,7 +59,7 @@ typedef struct 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;
@@ -73,6 +76,7 @@ extern arena arena_stdlib;            /* Arena based on @malloc@/@free@ */
  * 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:    ---
  *
@@ -80,18 +84,20 @@ extern arena arena_stdlib;          /* Arena based on @malloc@/@free@ */
  *             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 -------------------------------------------------*/