34 #define Alloc2(M, N, x) \ 35 double **x=new double*[M]; x[0]=new double[(M)*(N)]; for (int _z=1; _z<M; _z++) x[_z]=&x[0][_z*(N)]; 36 #define Alloc2L(M, N, x, LIST) Alloc2(M, N, x); if (LIST) LIST->Add(x, 2); 38 #define Allocate2(INT, M, N, x) \ 39 x=new INT*[M]; x[0]=new INT[(M)*(N)]; for (int _z=1; _z<M; _z++) x[_z]=&x[0][_z*(N)]; 40 #define Allocate2L(INT, M, N, x, LIST) Allocate2(INT, M, N, x); if (LIST) LIST->Add(x, 2); 42 #define DeAlloc2(x) {if (x) {delete[] (char*)(x[0]); delete[] x; x=0;}} 45 #define Alloc3(L, M, N, x) \ 46 double*** x=new double**[L]; x[0]=new double*[(L)*(M)]; x[0][0]=new double[(L)*(M)*(N)]; \ 47 for (int _z=0; _z<L; _z++) {x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; \ 48 for (int __z=1; __z<M; __z++) x[_z][__z]=&x[_z][0][__z*(N)]; } 50 #define Allocate3(INT, L, M, N, x) \ 51 x=new INT**[L]; x[0]=new INT*[(L)*(M)]; x[0][0]=new INT[(L)*(M)*(N)]; \ 52 for (int _z=0; _z<L; _z++) {x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; \ 53 for (int __z=1; __z<M; __z++) x[_z][__z]=&x[_z][0][__z*(N)]; } 54 #define Allocate3L(INT, M, N, O, x, LIST) Allocate3(INT, M, N, O, x); if (LIST) LIST->Add(x, 3); 56 #define DeAlloc3(x) {if (x) {delete[] (char*)(x[0][0]); delete[] x[0]; delete[] x; x=0;}} 59 #define Alloc4(L, M, N, O, x) \ 60 double**** x=new double***[L]; x[0]=new double**[(L)*(M)]; \ 61 x[0][0]=new double*[(L)*(M)*(N)]; x[0][0][0]=new double[(L)*(M)*(N)*(O)]; \ 62 for (int _z=0; _z<L; _z++){ \ 63 x[_z]=&x[0][_z*(M)]; x[_z][0]=&x[0][0][_z*(M)*(N)]; x[_z][0][0]=&x[0][0][0][_z*(M)*(N)*(O)]; \ 64 for (int __z=0; __z<M; __z++){ \ 65 x[_z][__z]=&x[_z][0][__z*(N)]; x[_z][__z][0]=&x[_z][0][0][__z*(N)*(O)]; \ 66 for (int ___z=1; ___z<N; ___z++) x[_z][__z][___z]=&d[_z][__z][0][___z*(O)]; }} 68 #define DeAlloc4(x) {if (x) {delete[] (char*)(x[0][0][0]); delete[] x[0][0]; delete[] x[0]; delete[] x; x=0;}} 89 MList(){
for (
int i=0; i<4; i++) cap[i]=64, count[i]=0, List[i]=(
void**)malloc(
sizeof(
void*)*cap[i]);}
91 for (
int i=0; i<count[0]; i++){
delete[] (
char*)(List[0][i]); List[0][i]=0;} free(List[0]);
92 for (
int i=0; i<count[1]; i++){
void** tmp=(
void**)List[1][i]; DeAlloc2(tmp); List[1][i]=0;} free(List[1]);
93 for (
int i=0; i<count[2]; i++){
void*** tmp=(
void***)List[2][i]; DeAlloc3(tmp); List[2][i]=0;} free(List[2]);
94 for (
int i=0; i<count[3]; i++){
void**** tmp=(
void****)List[3][i]; DeAlloc4(tmp); List[3][i]=0;} free(List[3]);}
95 void __fastcall Add(
void* item,
int Dim){
96 int Gr=Dim-1;
if (count[Gr]==cap[Gr]) IncCap(Gr); List[Gr][count[Gr]++]=item;}
97 void IncCap(
int Gr){cap[Gr]+=64; List[Gr]=(
void**)realloc(List[Gr],
sizeof(
void*)*cap[Gr]);}
Definition: arrayalloc.h:83