00001
00002
00003
00004
00005 #ifndef _util_container_carray_h
00006 #define _util_container_carray_h
00007
00008 namespace sc {
00009
00010 template <class T>
00011 T **
00012 new_c_array2(int l, int m, T)
00013 {
00014 T *a = 0;
00015 T **b = 0;
00016 if (l*m) a = new T[l*m];
00017 if (l) b = new T*[l];
00018 for (int i=0; i<l; i++) b[i] = &a[i*m];
00019 return b;
00020 }
00021
00022 template <class T>
00023 T **
00024 new_zero_c_array2(int l, int m, T)
00025 {
00026 T *a = 0;
00027 T **b = 0;
00028 if (l*m) a = new T[l*m];
00029 if (l) b = new T*[l];
00030 for (int i=0; i<l; i++) {
00031 b[i] = &a[i*m];
00032 for (int j=0; j<m; j++) {
00033 b[i][j] = 0;
00034 }
00035 }
00036 return b;
00037 }
00038
00039 template <class T>
00040 void
00041 delete_c_array2(T**b)
00042 {
00043 if (b) delete[] b[0];
00044 delete[] b;
00045 }
00046
00047 template <class T>
00048 T ***
00049 new_c_array3(int l, int m, int n, T)
00050 {
00051 T *a = 0;
00052 T **b = 0;
00053 T ***c = 0;
00054 if (l*m*n) a = new T[l*m*n];
00055 if (l*m) b = new T*[l*m];
00056 if (l) c = new T**[l];
00057 for (int i=0,ij=0; i<l; i++) {
00058 c[i] = &b[i*m];
00059 for (int j=0; j<m; j++,ij++) {
00060 c[i][j] = &a[ij*n];
00061 }
00062 }
00063 return c;
00064 }
00065
00066 template <class T>
00067 T ***
00068 new_zero_c_array3(int l, int m, int n, T)
00069 {
00070 T *a = 0;
00071 T **b = 0;
00072 T ***c = 0;
00073 if (l*m*n) a = new T[l*m*n];
00074 if (l*m) b = new T*[l*m];
00075 if (l) c = new T**[l];
00076 for (int i=0,ij=0; i<l; i++) {
00077 c[i] = &b[i*m];
00078 for (int j=0; j<m; j++,ij++) {
00079 c[i][j] = &a[ij*n];
00080 for (int k=0; k<n; k++) {
00081 c[i][j][k] = 0;
00082 }
00083 }
00084 }
00085 return c;
00086 }
00087
00088 template <class T>
00089 void
00090 delete_c_array3(T***b)
00091 {
00092 if (b && b[0]) delete[] b[0][0];
00093 if (b) delete[] b[0];
00094 delete[] b;
00095 }
00096
00097 }
00098
00099 #endif
00100
00101
00102
00103
00104
00105
00106