00001
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "CTBexceptionIndexRange.hxx"
00015
00021
00023
00034 template <class T, CTBint DIM1, CTBint DIM2>
00035 inline CTBcarray2d<T,DIM1,DIM2>::CTBcarray2d()
00036 {}
00037
00038
00040
00041 template <class T, CTBint DIM1, CTBint DIM2>
00042 inline CTBcarray2d<T,DIM1,DIM2>::CTBcarray2d(T rhs)
00043 {
00044 operator=(rhs);
00045 }
00046
00047
00049
00050 template <class T, CTBint DIM1, CTBint DIM2>
00051 inline CTBcarray2d<T,DIM1,DIM2>::CTBcarray2d(
00052 const CTBcarray2d<T,DIM1,DIM2>& rhs)
00053 {
00054 operator=(rhs);
00055 }
00056
00057
00059
00060 template <class T, CTBint DIM1, CTBint DIM2>
00061 inline T* CTBcarray2d<T,DIM1,DIM2>::operator[](CTBint i_row)
00062 {
00063 #ifdef CTB__IndexCheck
00064 CTBindexRangeCheck(i_row,DIM1,"CTBcarray2d::operator[]");
00065 #endif
00066 return m_data[i_row];
00067 }
00068
00069
00071
00072 template <class T, CTBint DIM1, CTBint DIM2>
00073 inline const T* CTBcarray2d<T,DIM1,DIM2>::operator[](CTBint i_row) const
00074 {
00075 #ifdef CTB__IndexCheck
00076 CTBindexRangeCheck(i_row,DIM1,"CTBcarray2d::operator[]");
00077 #endif
00078 return m_data[i_row];
00079 }
00080
00081
00083
00084 template <class T, CTBint DIM1, CTBint DIM2>
00085 inline T& CTBcarray2d<T,DIM1,DIM2>::operator()(CTBint i_row, CTBint i_col)
00086 {
00087 #ifdef CTB__IndexCheck
00088 CTBindexRangeCheck(i_row,DIM1,"CTBcarray2d::operator(row,...)");
00089 CTBindexRangeCheck(i_col,DIM2,"CTBcarray2d::operator(...,col)");
00090 #endif
00091 return m_data[i_row][i_col];
00092 }
00093
00094
00096
00097 template <class T, CTBint DIM1, CTBint DIM2>
00098 inline const T& CTBcarray2d<T,DIM1,DIM2>::operator()(CTBint i_row,
00099 CTBint i_col) const
00100 {
00101 #ifdef CTB__IndexCheck
00102 CTBindexRangeCheck(i_row,DIM1,"CTBcarray2d::operator(row,...)");
00103 CTBindexRangeCheck(i_col,DIM2,"CTBcarray2d::operator(...,col)");
00104 #endif
00105 return m_data[i_row][i_col];
00106 }
00107
00108
00109 #ifdef never
00110
00112
00113 template <class T, CTBint DIM1, CTBint DIM2>
00114 inline CTBcarray2d<T,DIM1,DIM2>::operator T*()
00115 {
00116 return m_data;
00117 }
00118
00119
00121
00122 template <class T, CTBint DIM1, CTBint DIM2>
00123 inline CTBcarray2d<T,DIM1,DIM2>::operator const T*() const
00124 {
00125 return m_data;
00126 }
00127 #endif
00128
00130
00131 template <class T, CTBint DIM1, CTBint DIM2>
00132 inline CTBcarray2d<T,DIM1,DIM2>::operator CTBmatrixDsc<T>()
00133 {
00134 return CTBmatrixDsc<T>(m_data,DIM1,DIM2);
00135 }
00136
00137
00139
00140 template <class T, CTBint DIM1, CTBint DIM2>
00141 inline CTBcarray2d<T,DIM1,DIM2>::operator CTBmatrixCDsc<T>() const
00142 {
00143 return CTBmatrixCDsc<T>(m_data,DIM1,DIM2);
00144 }
00145
00146
00148
00149 template <class T, CTBint DIM1, CTBint DIM2>
00150 inline CTBcarray2d<T,DIM1,DIM2>& CTBcarray2d<T,DIM1,DIM2>::operator=(T rhs)
00151 {
00152 for (CTBint i = 0; i < DIM1; i++) {
00153 for (CTBint j = 0; j < DIM2; j++) m_data[i][j] = rhs;
00154 }
00155 return *this;
00156 }
00157
00158
00160
00161 template <class T, CTBint DIM1, CTBint DIM2>
00162 inline CTBcarray2d<T,DIM1,DIM2>& CTBcarray2d<T,DIM1,DIM2>::operator=(
00163 const CTBcarray2d<T,DIM1,DIM2>& rhs)
00164 {
00165 for (CTBint i = 0; i < DIM1; i++) {
00166 for (CTBint j = 0; j < DIM2; j++) m_data[i][j] = rhs.m_data[i][j];
00167 }
00168
00169 return *this;
00170 }
00171
00172
00178 template <class T, CTBint DIM1, CTBint DIM2>
00179 inline ostream& operator<<(ostream& os, const CTBcarray2d<T,DIM1,DIM2>& obj)
00180 {
00181 int i_width = os.width();
00182
00183 os << setw(0) << "{";
00184 for (CTBint i = 0; i < DIM1; i++) {
00185 if (i > 0) os << ",";
00186 os << "{";
00187 for (CTBint j = 0; j < DIM2; j++) {
00188 if (j > 0) os << ",";
00189 os << setw(i_width) << obj(i,j);
00190 }
00191 os << "}";
00192 }
00193 os << "}";
00194 return os;
00195 }