+int inline_size
+array_nextsize (int elem, int cur, int cnt)
+{
+ int ncur = cur + 1;
+
+ do
+ ncur <<= 1;
+ while (cnt > ncur);
+
+ /* if size > 4096, round to 4096 - 4 * longs to accomodate malloc overhead */
+ if (elem * ncur > 4096)
+ {
+ ncur *= elem;
+ ncur = (ncur + elem + 4095 + sizeof (void *) * 4) & ~4095;
+ ncur = ncur - sizeof (void *) * 4;
+ ncur /= elem;
+ }
+
+ return ncur;
+}
+
+inline_speed void *
+array_realloc (int elem, void *base, int *cur, int cnt)
+{
+ *cur = array_nextsize (elem, *cur, cnt);
+ return ev_realloc (base, elem * *cur);
+}