chiark / gitweb /
Expunge revision histories in files.
[mLib] / darray.c
index 83150f7c12ec52088213f1c1a4245f41b7b0d9c2..f376ee57ef72eb1bf5f7401e096f7e84023ea99f 100644 (file)
--- a/darray.c
+++ b/darray.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: darray.c,v 1.4 1999/11/06 12:40:45 mdw Exp $
+ * $Id: darray.c,v 1.7 2004/04/08 01:36:11 mdw Exp $
  *
  * Dynamically growing dense arrays
  *
  * MA 02111-1307, USA.
  */
 
-/*----- Revision history --------------------------------------------------* 
- *
- * $Log: darray.c,v $
- * Revision 1.4  1999/11/06 12:40:45  mdw
- * Minor changes to allocation strategy.
- *
- * Revision 1.3  1999/10/29 22:59:22  mdw
- * New array adjustment macros for unsigned arguments.
- *
- * Revision 1.2  1999/10/28 22:05:28  mdw
- * Modify and debug allocation routines.
- *
- * Revision 1.1  1999/10/22 22:37:26  mdw
- * New dynamic array implementation replaces `dynarray.h'.
- *
- */
-
 /*----- Header files ------------------------------------------------------*/
 
 #include <stdio.h>
@@ -51,6 +34,7 @@
 #include <stdlib.h>
 
 #include "alloc.h"
+#include "arena.h"
 #include "darray.h"
 
 /*----- Magic numbers -----------------------------------------------------*/
@@ -140,14 +124,14 @@ void *da_ensure(da_base *b, void *v, size_t sz, size_t n)
    */
 
   if (p && slots == b->off) {
-    q = xrealloc(p - b->off * sz, nsz * sz);
+    q = x_realloc(b->a, p - b->off * sz, nsz * sz, b->sz + b->off);
     q += slots * sz;
   } else {
-    q = xmalloc(nsz * sz);
+    q = x_alloc(b->a, nsz * sz);
     q += slots * sz;
     if (p) {
       memcpy(q, p, b->len * sz);
-      free(p - b->off * sz);
+      x_free(b->a, p - b->off * sz);
     }
   }
 
@@ -246,11 +230,11 @@ void *da_shunt(da_base *b, void *v, size_t sz, size_t n)
    * almost all the time -- that's the whole point of this routine!
    */
 
-  q = xmalloc(nsz * sz);
+  q = x_alloc(b->a, nsz * sz);
   q += (nsz - slots) * sz;
   if (p) {
     memcpy(q, p, b->len * sz);
-    free(p - b->off * sz);
+    x_free(b->a, p - b->off * sz);
   }
 
   /* --- Fill in the other parts of the base structure --- */
@@ -286,13 +270,13 @@ void *da_tidy(da_base *b, void *v, size_t sz)
     return (p);
 
   if (!b->len) {
-    free(p - b->off * sz);
+    xfree(p - b->off * sz);
     return (0);
   }
 
-  q = xmalloc(b->len * sz);
+  q = x_alloc(b->a, b->len * sz);
   memcpy(q, p, b->len * sz);
-  free(p - b->off * sz);
+  x_free(b->a, p - b->off * sz);
   b->sz = b->len;
   b->off = 0;
   return (q);