typedef struct Array { uint total; uint capacity; void **elements; } Array; /** constructor */ Array *array_new(void); Array *array_new_size(uint size); /** * destructor. Frees the associated array which should only be called on arrays * that have been allocated by array_new. */ void array_free(Array *self); void array_free_with(Array *self, functionunary free_each); /** Remove all the items in the array */ void array_clear(Array *self); void array_clear_with(Array *self, functionunary clear); /** return element at index */ void *array_at(Array *self, uint index); /** put the particular pointer at the index */ void array_put(Array *self, uint index, void *p); /** add a new entry to the array */ void array_add(Array *self, void *p); /** gets the number of elements in self */ uint array_size(Array *self); /** resize the array to the new size */ void array_resize(Array *self, uint size); /** resize with default value for newly allocated storage if any */ void array_resize_with(Array *self, uint size, generator default_value); /** internal iteration. */ void array_do(Array *self, collectioneach each, void *arg); void array_unary_do(Array *self, functionunary each); /** finds the first element such that detect(item, arg) returns true */ bool array_detect(Array *self, collectiondetect detect, void **result, void *arg); void *array_last(Array *self); void array_push(Array *self, void *p); void *array_pop(Array *self); bool array_isempty(Array *self); bool array_notempty(Array *self);