#include <stdio.h>
#include <stdlib.h>

struct collection {
	int* values;
	size_t size;
	size_t capacity;
};

void collection_print(struct collection * c, void(*f)(int)) {
	for (size_t i = 0; i < c->size; i++) {
		(*f)(c->values[i]);
	}
}

struct collection * new_random_collection() {
	struct collection* new = malloc(sizeof(struct collection));
	if (!new) {
		return NULL;
	}

	new->size = 50;
	new->capacity = 100;
	new->values = malloc(new->capacity * sizeof(int));
	if (!new->values) {
		free(new);
		return NULL;
	}

	for (size_t i = 0; i < new->size; i++) {
		new->values[i] = rand();
	}

	return new;
}

void collection_delete(struct collection *c) {
	free(c->values);
	free(c);
}

void pretty_print(int b) {
	printf("%d, ", b);
}

int main() {
	struct collection* c;
	c = new_random_collection();
	collection_print(c, pretty_print);
	collection_delete(c);
}
