16 Array array_new(int elem_len)
22 if ((a = malloc(sizeof (*a))))
24 a->data = malloc(elem_len);
27 a->elem_len = elem_len;
28 a->data_len = elem_len;
34 void array_free(Array a)
42 void *array_add(Array a)
46 if ((a->elem_num + 1) * a->elem_len > a->data_len)
47 a->data = realloc(a->data, (a->data_len *= 2));
49 return &a->data[a->elem_num++ * a->elem_len];
52 void array_del(Array a)
55 assert(a->elem_num > 0);
57 if (a->elem_num-- * a->elem_len < a->data_len / 4)
58 a->data = realloc(a->data, (a->data_len /= 4));
61 void *array_get(Array a, int i)
64 assert(i >= 0 && i < a->elem_num);
66 return &a->data[i * a->elem_len];
69 void *array_rnd(Array a)
73 return a->elem_num ? array_get(a, rand_between(0, a->elem_num - 1)) : NULL;
76 int array_len(Array a)
83 void array_sort(Array a, int (*cmp)(const void *, const void *))
87 qsort(a->data, a->elem_num, a->elem_len, cmp);