diff utils.c @ 1900:5cde80c5d929 libavcodec

static allocation rewrite (old code was plain a broken mess) doesnt call realloc every time doesnt randomly overwrite memory after after 8-16 calls doesnt use ugly macro wraper fewer lines of code
author michael
date Sun, 21 Mar 2004 21:58:14 +0000
parents ea2a4058441c
children bc5039adb9af
line wrap: on
line diff
--- a/utils.c	Sat Mar 20 16:40:20 2004 +0000
+++ b/utils.c	Sun Mar 21 21:58:14 2004 +0000
@@ -66,41 +66,35 @@
 }
 
 
-/* allocation of static arrays - do not use for normal allocation */
 static unsigned int last_static = 0;
-static char*** array_static = NULL;
+static unsigned int allocated_static = 0;
+static void** array_static = NULL;
 static const unsigned int grow_static = 64; // ^2
-void *__av_mallocz_static(void** location, unsigned int size)
+
+/**
+ * allocation of static arrays - do not use for normal allocation.
+ */
+void *av_mallocz_static(unsigned int size)
 {
-    unsigned int l = (last_static + grow_static) & ~(grow_static - 1);
     void *ptr = av_mallocz(size);
-    if (!ptr)
-	return NULL;
 
-    if (location)
-    {
-	if (l > last_static)
-	    array_static = av_realloc(array_static, l);
-	array_static[last_static++] = (char**) location;
-	*location = ptr;
+    if(ptr){ 
+        array_static =av_fast_realloc(array_static, &allocated_static, last_static+1);
+        array_static[last_static++] = ptr;
     }
+
     return ptr;
 }
-/* free all static arrays and reset pointers to 0 */
+
+/**
+ * free all static arrays and reset pointers to 0.
+ */
 void av_free_static(void)
 {
-    if (array_static)
-    {
-	unsigned i;
-	for (i = 0; i < last_static; i++)
-	{
-	    av_free(*array_static[i]);
-            *array_static[i] = NULL;
-	}
-	av_free(array_static);
-	array_static = 0;
+    while(last_static){
+        av_freep(&array_static[--last_static]);
     }
-    last_static = 0;
+    av_freep(&array_static);
 }
 
 /**