darray: add darray_shrink()
authorRan Benita <ran234@gmail.com>
Thu, 11 Sep 2014 21:31:40 +0000 (00:31 +0300)
committerRan Benita <ran234@gmail.com>
Thu, 2 Oct 2014 21:15:39 +0000 (00:15 +0300)
If we have a big array which can be finalized, on average we can give
back 1/4 of its size, which the allocator might be able to use.

Signed-off-by: Ran Benita <ran234@gmail.com>
src/darray.h

index d85edea..be0319f 100644 (file)
@@ -166,6 +166,12 @@ typedef darray (unsigned long)  darray_ulong;
                                               sizeof(*(arr).item))); \
 } while (0)
 
+#define darray_shrink(arr) do { \
+    if ((arr).size > 0) \
+        (arr).item = realloc((arr).item, \
+                             ((arr).alloc = (arr).size) * sizeof(*(arr).item)); \
+} while (0)
+
 static inline unsigned
 darray_next_alloc(unsigned alloc, unsigned need, unsigned itemSize)
 {