#ifndef muscatt_alloc_h #define muscatt_alloc_h //[Included Headers] #include #include //[included Functions] // ---- memory allocation ---- #define alloc_error_check(p) { \ if ((p) == NULL) { \ fprintf(stderr, "Allocation Failure!\n"); \ exit(1); \ } \ } int *alloc_1d_int(int n1) { int *i; i = (int *) malloc(sizeof(int) * n1); alloc_error_check(i); return i; } void free_1d_int(int *i) { free(i); } double *alloc_1d_double(int n1) { double *d; d = (double *) malloc(sizeof(double) * n1); alloc_error_check(d); return d; } void free_1d_double(double *d) { free(d); } int **alloc_2d_int(int n1, int n2) { int **ii, *i; int j; ii = (int **) malloc(sizeof(int *) * n1); alloc_error_check(ii); i = (int *) malloc(sizeof(int) * n1 * n2); alloc_error_check(i); ii[0] = i; for (j = 1; j < n1; j++) { ii[j] = ii[j - 1] + n2; } return ii; } void free_2d_int(int **ii) { free(ii[0]); free(ii); } double **alloc_2d_double(int n1, int n2) { double **dd, *d; int j; dd = (double **) malloc(sizeof(double *) * n1); alloc_error_check(dd); d = (double *) malloc(sizeof(double) * n1 * n2); alloc_error_check(d); dd[0] = d; for (j = 1; j < n1; j++) { dd[j] = dd[j - 1] + n2; } return dd; } void free_2d_double(double **dd) { free(dd[0]); free(dd); } int ***alloc_3d_int(int n1, int n2, int n3) { int ***iii, **ii, *i; int j; iii = (int ***) malloc(sizeof(int **) * n1); alloc_error_check(iii); ii = (int **) malloc(sizeof(int *) * n1 * n2); alloc_error_check(ii); iii[0] = ii; for (j = 1; j < n1; j++) { iii[j] = iii[j - 1] + n2; } i = (int *) malloc(sizeof(int) * n1 * n2 * n3); alloc_error_check(i); ii[0] = i; for (j = 1; j < n1 * n2; j++) { ii[j] = ii[j - 1] + n3; } return iii; } void free_3d_int(int ***iii) { free(iii[0][0]); free(iii[0]); free(iii); } double ***alloc_3d_double(int n1, int n2, int n3) { double ***ddd, **dd, *d; int j; ddd = (double ***) malloc(sizeof(double **) * n1); alloc_error_check(ddd); dd = (double **) malloc(sizeof(double *) * n1 * n2); alloc_error_check(dd); ddd[0] = dd; for (j = 1; j < n1; j++) { ddd[j] = ddd[j - 1] + n2; } d = (double *) malloc(sizeof(double) * n1 * n2 * n3); alloc_error_check(d); dd[0] = d; for (j = 1; j < n1 * n2; j++) { dd[j] = dd[j - 1] + n3; } return ddd; } void free_3d_double(double ***ddd) { free(ddd[0][0]); free(ddd[0]); free(ddd); } //[end] #endif