44 lines
818 B
C
44 lines
818 B
C
#include "dynarray.h"
|
|
|
|
struct dyn_array {
|
|
char **array;
|
|
size_t size;
|
|
size_t capacity;
|
|
};
|
|
|
|
DynArray *dynarray_init(size_t initial_capacity) {
|
|
DynArray *da = malloc(sizeof(DynArray));
|
|
da->size = 0;
|
|
da->capacity = initial_capacity;
|
|
|
|
return da;
|
|
}
|
|
|
|
void dynarray_add(DynArray *da, const char *s) {
|
|
// An empty dynarray does not have an allocated internal array yet
|
|
if (da->size == 0) {
|
|
da->array = malloc(sizeof(char*) * da->capacity);
|
|
}
|
|
// Double array size if it's full
|
|
else if (da->size == da->capacity) {
|
|
da->array = realloc(da->array, da->capacity * 2);
|
|
da->capacity *= 2;
|
|
}
|
|
|
|
da->array[da->size] = strdup(s);
|
|
da->size++;
|
|
}
|
|
|
|
void dynarray_free(DynArray **ptp) {
|
|
DynArray *da = *ptp;
|
|
|
|
for (size_t i = 0; i < da->size; i++) {
|
|
free(da->array[i]);
|
|
}
|
|
|
|
free(da->array);
|
|
free(da);
|
|
|
|
*ptp = NULL;
|
|
}
|