diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..7b8120b --- /dev/null +++ b/src/util.c @@ -0,0 +1,39 @@ +#include <stdlib.h> + +#include <kalmia.h> +#include "util.h" + +void * kai_next_array_element(void **array, size_t *count, size_t *max, size_t sz) +{ + void *array_new = NULL; + if (*max == 0) { + array_new = malloc(sz); + *count = 1; + *max = 1; + } + else if (*count == *max) { + array_new = realloc(*array, 2*(*max)*sz); + *count += 1; + *max *= 2; + } + else { + array_new = *array; + *count += 1; + } + + if (array_new == NULL) + return NULL; + + *array = array_new; + return array_new + ((*count-1) * sz); +} + + +ka_node_t * kai_next_node(kalmia_t *k) +{ + return kai_next_array_element( + (void**) &(k->node), + &(k->n_nodes), &(k->n_nodes_max), + sizeof(ka_node_t) + ); +} |