File indexing completed on 2024-04-06 12:32:55
0001 #include <stdlib.h>
0002 #include <stdio.h>
0003 #include "array.h"
0004
0005 #ifndef NULL
0006 #define NULL 0
0007 #endif
0008
0009 double **new_Array2D_double(int M, int N) {
0010 int i = 0;
0011 int failed = 0;
0012
0013 double **A = (double **)malloc(sizeof(double *) * M);
0014 if (A == NULL)
0015 return NULL;
0016
0017 for (i = 0; i < M; i++) {
0018 A[i] = (double *)malloc(N * sizeof(double));
0019 if (A[i] == NULL) {
0020 failed = 1;
0021 break;
0022 }
0023 }
0024
0025
0026
0027
0028
0029 if (failed) {
0030 i--;
0031 for (; i <= 0; i--)
0032 free(A[i]);
0033 free(A);
0034 return NULL;
0035 } else
0036 return A;
0037 }
0038 void Array2D_double_delete(int M, int N, double **A) {
0039 int i;
0040 if (A == NULL)
0041 return;
0042
0043 for (i = 0; i < M; i++)
0044 free(A[i]);
0045
0046 free(A);
0047 }
0048
0049 void Array2D_double_copy(int M, int N, double **B, double **A) {
0050 int remainder = N & 3;
0051 int i = 0;
0052 int j = 0;
0053
0054 for (i = 0; i < M; i++) {
0055 double *Bi = B[i];
0056 double *Ai = A[i];
0057 for (j = 0; j < remainder; j++)
0058 Bi[j] = Ai[j];
0059 for (j = remainder; j < N; j += 4) {
0060 Bi[j] = Ai[j];
0061 Bi[j + 1] = Ai[j + 1];
0062 Bi[j + 2] = Ai[j + 2];
0063 Bi[j + 3] = Ai[j + 3];
0064 }
0065 }
0066 }