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 Array3D_H
00034 #define Array3D_H
00035
00036 #include "Array2D.h"
00037
00043 template <class T> class Array3D
00044 {
00045 private:
00049 int n_1;
00050
00054 int n_2;
00055
00059 int n_3;
00060
00064 T*** pArray;
00065
00066 public:
00067
00073 int dim1(){return n_1;}
00074
00080 int dim2(){return n_2;}
00081
00087 int dim3(){return n_3;}
00088
00094 int size(){return n_1*n_2*n_3;}
00095
00100 T*** array(){return pArray;}
00101
00109 void allocate(int i, int j, int k)
00110 {
00111 if( n_1 != i || n_2 != j || n_3 != k )
00112 {
00113 deallocate();
00114
00115 n_1 = i;
00116 n_2 = j;
00117 n_3 = k;
00118
00119 if(n_1 >= 1 && n_2 >= 1 && n_3 >= 1)
00120 {
00121 pArray = new T**[n_1];
00122 for(int ii=0; ii< n_1; ii++)
00123 {
00124 pArray[ii] = new T*[n_2];
00125 for(int jj=0; jj<n_2; jj++) pArray[ii][jj] = new T[n_3];
00126 }
00127 }
00128 else
00129 {
00130 pArray = 0;
00131 }
00132 }
00133 }
00134
00138 void deallocate()
00139 {
00140 for(int i=0; i<n_1; i++)
00141 {
00142 for(int j=0; j<n_2; j++) delete [] pArray[i][j];
00143 delete [] pArray[i];
00144 }
00145 delete [] pArray;
00146 pArray = 0;
00147
00148 n_1 = 0;
00149 n_2 = 0;
00150 n_3 = 0;
00151 }
00152
00156 void operator=(const Array3D & rhs)
00157 {
00158 if(n_1 != rhs.n_1 || n_2 != rhs.n_2 || n_3 != rhs.n_3)
00159 allocate(rhs.n_1,rhs.n_2,rhs.n_3);
00160
00161 for(int i=0; i<n_1;i++)
00162 for(int j=0; j<n_2;j++)
00163 for(int k=0; k<n_3;k++)
00164 pArray[i][j][k] = rhs.pArray[i][j][k];
00165 }
00166
00171 void operator=(const T C)
00172 {
00173 for(int i=0; i<n_1;i++)
00174 for(int j=0; j<n_2;j++)
00175 for(int k=0; k<n_3;k++)
00176 pArray[i][j][k] = C;
00177 }
00178
00182 Array3D(){pArray = 0; n_1 = 0; n_2 = 0; n_3 = 0;}
00183
00191 Array3D(int i, int j, int k)
00192 {pArray = 0; n_1 = 0; n_2 = 0; n_3 = 0; allocate(i,j, k);}
00193
00199 Array3D( const Array3D<T> & rhs)
00200 {
00201 n_1 = 0;
00202 n_2 = 0;
00203 n_3 = 0;
00204 pArray = 0;
00205 allocate(rhs.n_1, rhs.n_2, rhs.n_3);
00206
00207 for(int i=0; i<n_1; i++)
00208 for(int j=0; j<n_2; j++)
00209 for(int k=0; k<n_3; k++)
00210 pArray[i][j][k] = rhs.pArray[i][j][k];
00211 }
00212
00216 ~Array3D(){deallocate();}
00217
00221 T& operator()(int i,int j, int k){return pArray[i][j][k];}
00222
00223 friend ostream& operator<<(ostream & strm, const Array3D<T> & rhs)
00224 {
00225 for (int i=0; i<rhs.n_1; i++)
00226 {
00227 for (int j=0; j<rhs.n_2; j++)
00228 {
00229 for (int k=0; k<rhs.n_3; k++)
00230 {
00231 strm << rhs.pArray[i][j][k] << "\t";
00232 }
00233 strm << endl;
00234 }
00235 strm << endl << endl;
00236 }
00237 return strm;
00238 }
00239
00240 };
00241
00242 #endif