// Arrays
typedef struct {
void * p;
long max, len;
} Array;
Array * array_new()
{
Array * a = qmalloc (1, Array);
a->p = NULL;
a->max = a->len = 0;
return a;
}
void array_free (Array * a)
{
free (a->p);
free (a);
}
void * array_append (Array * a, void * elem, size_t size)
{
if (a->len + size >= a->max) {
a->max += max (size, 4096);
a->p = realloc (a->p, a->max);
}
memcpy (((char *)a->p) + a->len, elem, size);
a->len += size;
return (void *)(((char *)a->p) + a->len - size);
}
void * array_shrink (Array * a)
{
void * p = realloc (a->p, a->len);
free (a);
return p;
}