#include <stdlib.h>
+#include <stdio.h>
#include "array.h"
int* create_tab(int tab[], unsigned tab_size) {
tab = malloc(sizeof(int) * tab_size);
- if (tab == NULL) {
- return NULL;
- } else {
+ if (tab != NULL) {
/* initialize to zero the integer array */
for (unsigned i = 0; i < tab_size; i++) {
tab[i] = 0;
}
- return tab;
}
+ return tab;
}
void free_tab(int tab[]) {
static void copy_tab(int src_tab[], int dest_tab[], unsigned src_tab_size, unsigned index_offset) {
/* FIXME: I think it's worth doing some sanity checks on the array size:
* dest_tab_size >= src_tab_size */
+ if (src_tab == NULL || dest_tab == NULL) {
+ printf("please ensure you have created both arrays beforehand\n");
+ return;
+ }
for (unsigned i = 0; i < src_tab_size; i++) {
dest_tab[i + index_offset] = src_tab[i];
}
}
-int* concat_tab(int tab1[], unsigned tab_size1, int tab2[], unsigned tab_size2, int tab_dest[]) {
- int* rt = create_tab(tab_dest, tab_size1 + tab_size2);
+/* one must free the two source tabs in case they will be unused after to concatenation */
+int* concat_tab(int tab1[], unsigned tab_size1, int tab2[], unsigned tab_size2) {
+ int* tab_dest = NULL;
+ tab_dest = create_tab(tab_dest, tab_size1 + tab_size2);
copy_tab(tab1, tab_dest, tab_size1, 0);
copy_tab(tab2, tab_dest, tab_size2, tab_size1);
- return rt;
+ return tab_dest;
}
int* resize_tab(int tab[], unsigned new_tab_size) {
tab = realloc(tab, sizeof(int) * new_tab_size);
- if (tab == NULL) {
- return NULL;
- } else {
- return tab;
- }
+ return tab;
}
/* number of occurences of an element in an unsorted array */