00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef Array4D_H
00034 #define Array4D_H
00035
00036
00043 template <class T> class Array4D
00044 {
00045 private:
00050 int n_1;
00051
00052
00057 int n_2;
00058
00059
00064 int n_3;
00065
00066
00071 int n_4;
00072
00073
00074
00079 T**** pArray;
00080
00081 public:
00087 int dim1(){return n_1;}
00088
00094 int dim2(){return n_2;}
00095
00101 int dim3(){return n_3;}
00102
00108 int dim4(){return n_4;}
00109
00115 int size(){return n_1*n_2*n_3;}
00116
00121 T**** array(){return pArray;}
00122
00132 void allocate(int i, int j, int k, int l)
00133 {
00134 if( n_1 != i || n_2 != j || n_3 != k || n_4 != l )
00135 {
00136 deallocate();
00137
00138 n_1 = i;
00139 n_2 = j;
00140 n_3 = k;
00141 n_4 = l;
00142
00143 if(n_1 >= 1 && n_2 >= 1 && n_3 >= 1 && n_4 >= 1)
00144 {
00145 pArray = new T***[n_1];
00146 for(int ii=0; ii< n_1; ii++)
00147 {
00148 pArray[ii] = new T**[n_2];
00149 for(int jj=0; jj<n_2; jj++)
00150 {
00151 pArray[ii][jj] = new T*[n_3];
00152 for(int kk=0; kk<n_3; kk++)
00153 {
00154 pArray[ii][jj][kk] = new T[n_4];
00155 }
00156 }
00157 }
00158 }
00159 else
00160 {
00161 pArray = 0;
00162 }
00163 }
00164 }
00165
00166
00171 void deallocate()
00172 {
00173 for(int i=0; i<n_1; i++)
00174 {
00175 for(int j=0; j<n_2; j++)
00176 {
00177 for(int k=0; k<n_3; k++) delete [] pArray[i][j][k];
00178 delete [] pArray[i][j];
00179 }
00180 delete [] pArray[i];
00181 }
00182 delete [] pArray;
00183 pArray = 0;
00184
00185 n_1 = 0;
00186 n_2 = 0;
00187 n_3 = 0;
00188 }
00189
00190
00195 void operator=(const Array4D & rhs)
00196 {
00197 if(n_1 != rhs.n_1 || n_2 != rhs.n_2 || n_3 != rhs.n_3 || n_4 != rhs.n_4)
00198 allocate(rhs.n_1,rhs.n_2,rhs.n_3, rhs.n_4);
00199
00200 for(int i=0; i<n_1;i++)
00201 for(int j=0; j<n_2;j++)
00202 for(int k=0; k<n_3;k++)
00203 for(int l=0; l<n_4; l++)
00204 pArray[i][j][k][l] = rhs.pArray[i][j][k][l];
00205 return *this;
00206 }
00207
00208
00213 Array4D(){pArray = 0; n_1 = 0; n_2 = 0; n_3 = 0; n_4 = 0;}
00214
00215
00225 Array4D(int i, int j, int k, int l)
00226 {pArray = 0; n_1 = 0; n_2 = 0; n_3 = 0; n_4 = 0; allocate(i,j,k,l);}
00227
00228
00235 Array4D( const Array4D & rhs)
00236 {
00237 n_1 = 0;
00238 n_2 = 0;
00239 n_3 = 0;
00240 n_4 = 0;
00241 pArray = 0;
00242 allocate(rhs.n_1, rhs.n_2, rhs.n_3, rhs.n_4);
00243
00244 for(int i=0; i<n_1; i++)
00245 for(int j=0; j<n_2; j++)
00246 for(int k=0; k<n_3; k++)
00247 for(int l=0; l<n_4; l++)
00248 pArray[i][j][k][l] = rhs.pArray[i][j][k][l];
00249 }
00250
00251
00256 ~Array4D(){deallocate();}
00257
00261 T& operator()(int i,int j, int k, int l){return pArray[i][j][k][l];}
00262
00263 };
00264
00265 #endif