C-XSC - A C++ Class Library for Extended Scientific Computing
2.5.4
|
00001 /* 00002 ** CXSC is a C++ library for eXtended Scientific Computing (V 2.5.4) 00003 ** 00004 ** Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik, 00005 ** Universitaet Karlsruhe, Germany 00006 ** (C) 2000-2014 Wiss. Rechnen/Softwaretechnologie 00007 ** Universitaet Wuppertal, Germany 00008 ** 00009 ** This library is free software; you can redistribute it and/or 00010 ** modify it under the terms of the GNU Library General Public 00011 ** License as published by the Free Software Foundation; either 00012 ** version 2 of the License, or (at your option) any later version. 00013 ** 00014 ** This library is distributed in the hope that it will be useful, 00015 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 ** Library General Public License for more details. 00018 ** 00019 ** You should have received a copy of the GNU Library General Public 00020 ** License along with this library; if not, write to the Free 00021 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00022 */ 00023 00024 /* CVS $Id: l_rmatrix.inl,v 1.21 2014/01/30 17:23:46 cxsc Exp $ */ 00025 00026 #ifndef _CXSC_LRMATRIX_INL_INCLUDED 00027 #define _CXSC_LRMATRIX_INL_INCLUDED 00028 00029 namespace cxsc { 00030 00031 INLINE l_rmatrix::l_rmatrix() throw():dat(NULL),lb1(1),ub1(0),lb2(1),ub2(0),xsize(0),ysize(0) 00032 { 00033 } 00034 00035 INLINE l_rmatrix::l_rmatrix(const l_real &r) throw():lb1(1),ub1(1),lb2(1),ub2(1),xsize(1),ysize(1) 00036 { 00037 dat=new l_real[1]; 00038 *dat=r; 00039 } 00040 00041 INLINE l_rmatrix::l_rmatrix(const real &r) throw():lb1(1),ub1(1),lb2(1),ub2(1),xsize(1),ysize(1) 00042 { 00043 dat=new l_real[1]; 00044 *dat=r; 00045 } 00046 00047 INLINE l_rmatrix::l_rmatrix(const l_rmatrix &rm) throw():lb1(rm.lb1),ub1(rm.ub1),lb2(rm.lb2),ub2(rm.ub2),xsize(rm.xsize),ysize(rm.ysize) 00048 { 00049 dat=new l_real[xsize*ysize]; 00050 for(int i=0;i<xsize*ysize;i++) 00051 dat[i]=rm.dat[i]; 00052 } 00053 00054 INLINE l_rmatrix::l_rmatrix(const rmatrix &rm) throw():lb1(rm.lb1),ub1(rm.ub1),lb2(rm.lb2),ub2(rm.ub2),xsize(rm.xsize),ysize(rm.ysize) 00055 { 00056 dat=new l_real[xsize*ysize]; 00057 for(int i=0;i<xsize*ysize;i++) 00058 dat[i]=rm.dat[i]; 00059 } 00060 00061 INLINE l_rmatrix::l_rmatrix(const int &m, const int &n) 00062 #if(CXSC_INDEX_CHECK) 00063 throw(ERROR_LRMATRIX_WRONG_BOUNDARIES):lb1(1),ub1(m),lb2(1),ub2(n),xsize(n),ysize(m) 00064 #else 00065 throw():lb1(1),ub1(m),lb2(1),ub2(n),xsize(n),ysize(m) 00066 #endif 00067 { 00068 #if(CXSC_INDEX_CHECK) 00069 if((n<0)||(m<0)) cxscthrow(ERROR_LRMATRIX_WRONG_BOUNDARIES("l_rmatrix::l_rmatrix(const int &m, const int &n)")); 00070 #endif 00071 dat=new l_real[m*n]; 00072 } 00073 00074 INLINE l_rmatrix::l_rmatrix(const int &m1, const int &m2, const int &n1, const int &n2) 00075 #if(CXSC_INDEX_CHECK) 00076 throw(ERROR_LRMATRIX_WRONG_BOUNDARIES):lb1(m1),ub1(m2),lb2(n1),ub2(n2),xsize(n2-n1+1),ysize(m2-m1+1) 00077 #else 00078 throw():lb1(m1),ub1(m2),lb2(n1),ub2(n2),xsize(n2-n1+1),ysize(m2-m1+1) 00079 #endif 00080 { 00081 #if(CXSC_INDEX_CHECK) 00082 if((m2<m1)||(n2<n1)) cxscthrow(ERROR_LRMATRIX_WRONG_BOUNDARIES("l_rmatrix::l_rmatrix(const int &m1, const int &n1, const int &m2, const int &n2)")); 00083 #endif 00084 dat=new l_real[xsize*ysize]; 00085 } 00086 00087 INLINE l_rvector::l_rvector(const l_rmatrix_subv &v) throw():l(v.lb),u(v.ub),size(v.size) 00088 { 00089 dat=new l_real[size]; 00090 for (int i=0, j=v.start;i<v.size;i++,j+=v.offset) 00091 dat[i]=v.dat[j]; 00092 } 00093 00094 INLINE l_rvector_slice & l_rvector_slice::operator =(const l_rmatrix &m) 00095 #if(CXSC_INDEX_CHECK) 00096 throw(ERROR__OP_WITH_WRONG_DIM<l_rvector>,ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00097 #else 00098 throw() 00099 #endif 00100 { return _vsvassign(*this,l_rvector(m)); } 00101 00102 INLINE l_rvector _l_rvector(const rmatrix_subv &rs) throw() { return l_rvector(rs); } 00103 00104 INLINE l_rmatrix::l_rmatrix(const l_rvector &v) throw():lb1(v.l),ub1(v.u),lb2(1),ub2(1),xsize(1),ysize(v.size) 00105 { 00106 dat=new l_real[v.size]; 00107 for(int i=0;i<v.size;i++) 00108 dat[i]=v.dat[i]; 00109 } 00110 00111 INLINE l_rmatrix::l_rmatrix(const rvector &v) throw():lb1(v.l),ub1(v.u),lb2(1),ub2(1),xsize(1),ysize(v.size) 00112 { 00113 dat=new l_real[v.size]; 00114 for(int i=0;i<v.size;i++) 00115 dat[i]=v.dat[i]; 00116 } 00117 00118 INLINE l_rmatrix::l_rmatrix(const l_rvector_slice &v) throw():lb1(v.start),ub1(v.end),lb2(1),ub2(1),xsize(1),ysize(v.size) 00119 { 00120 dat=new l_real[v.size]; 00121 for(int i=0,j=v.start-v.l;i<v.size;i++,j++) 00122 dat[i]=v.dat[j]; 00123 } 00124 00125 INLINE l_rmatrix::l_rmatrix(const rvector_slice &v) throw():lb1(v.start),ub1(v.end),lb2(1),ub2(1),xsize(1),ysize(v.size) 00126 { 00127 dat=new l_real[v.size]; 00128 for(int i=0,j=v.start-v.l;i<v.size;i++,j++) 00129 dat[i]=v.dat[j]; 00130 } 00131 00132 INLINE l_real &l_rmatrix_subv::operator [](const int &i) const 00133 #if(CXSC_INDEX_CHECK) 00134 throw(ERROR_LRVECTOR_ELEMENT_NOT_IN_VEC) 00135 #else 00136 throw() 00137 #endif 00138 { 00139 #if(CXSC_INDEX_CHECK) 00140 if((i<lb)||(i>ub)) cxscthrow(ERROR_LRVECTOR_ELEMENT_NOT_IN_VEC("l_real &l_rmatrix_subv::operator [](const int &i)")); 00141 #endif 00142 return dat[start+((i-lb)*offset)]; 00143 } 00144 00145 INLINE l_rmatrix::l_rmatrix(const l_rmatrix_slice &sl) throw():lb1(sl.start1),ub1(sl.end1),lb2(sl.start2),ub2(sl.end2),xsize(sl.sxsize),ysize(sl.sysize) 00146 { 00147 int i,j; 00148 00149 dat=new l_real[xsize*ysize]; 00150 for (i=0;i<ysize;i++) 00151 { 00152 for(j=0;j<xsize;j++) 00153 { 00154 dat[i*xsize+j]=sl.dat[(sl.offset1+i)*sl.mxsize+sl.offset2+j]; 00155 } 00156 } 00157 } 00158 00159 INLINE l_rmatrix::l_rmatrix(const rmatrix_slice &sl) throw():lb1(sl.start1),ub1(sl.end1),lb2(sl.start2),ub2(sl.end2),xsize(sl.sxsize),ysize(sl.sysize) 00160 { 00161 int i,j; 00162 00163 dat=new l_real[xsize*ysize]; 00164 for (i=0;i<ysize;i++) 00165 { 00166 for(j=0;j<xsize;j++) 00167 { 00168 dat[i*xsize+j]=sl.dat[(sl.offset1+i)*sl.mxsize+sl.offset2+j]; 00169 } 00170 } 00171 } 00172 00173 INLINE l_rmatrix_subv Row(l_rmatrix &m,const int &i) 00174 #if(CXSC_INDEX_CHECK) 00175 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00176 #else 00177 throw() 00178 #endif 00179 00180 { 00181 return m[i]; 00182 } 00183 00184 INLINE l_rmatrix_subv Col(l_rmatrix &m,const int &i) 00185 #if(CXSC_INDEX_CHECK) 00186 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00187 #else 00188 throw() 00189 #endif 00190 00191 { 00192 return m[Col(i)]; 00193 } 00194 00195 INLINE l_rmatrix_subv Row(const l_rmatrix &m,const int &i) 00196 #if(CXSC_INDEX_CHECK) 00197 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00198 #else 00199 throw() 00200 #endif 00201 00202 { 00203 return m[i]; 00204 } 00205 00206 INLINE l_rmatrix_subv Col(const l_rmatrix &m,const int &i) 00207 #if(CXSC_INDEX_CHECK) 00208 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00209 #else 00210 throw() 00211 #endif 00212 00213 { 00214 return m[Col(i)]; 00215 } 00216 00217 INLINE l_rmatrix_subv l_rmatrix::operator [](const int &i) const 00218 #if(CXSC_INDEX_CHECK) 00219 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00220 #else 00221 throw() 00222 #endif 00223 { 00224 #if(CXSC_INDEX_CHECK) 00225 if((i<lb1)||(i>ub1)) cxscthrow(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT("l_rmatrix_subv l_rmatrix::operator [](const int &i)")); 00226 #endif 00227 return l_rmatrix_subv(dat, lb2, ub2, xsize, xsize*(i-lb1),1); 00228 } 00229 00230 INLINE l_rmatrix_subv l_rmatrix::operator [](const cxscmatrix_column &i) const 00231 #if(CXSC_INDEX_CHECK) 00232 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00233 #else 00234 throw() 00235 #endif 00236 { 00237 #if(CXSC_INDEX_CHECK) 00238 if((i.col()<lb2)||(i.col()>ub2)) cxscthrow(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT("l_rmatrix_subv l_rmatrix::operator [](const cxscmatrix_column &i)")); 00239 #endif 00240 return l_rmatrix_subv(dat, lb1, ub1, ysize, i.col()-lb2, xsize); 00241 } 00242 00243 INLINE l_rmatrix_slice l_rmatrix::operator ()(const int &m, const int &n) 00244 #if(CXSC_INDEX_CHECK) 00245 throw(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG) 00246 #else 00247 throw() 00248 #endif 00249 { 00250 #if(CXSC_INDEX_CHECK) 00251 if((m<1)||(n<1)||(m<lb1)||(n<lb2)||(m>ub1)||(n>ub2)) cxscthrow(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG("l_rmatrix_slice l_rmatrix::operator ()(const int &m, const int &n)")); 00252 #endif 00253 return l_rmatrix_slice(*this,1,m,1,n); 00254 } 00255 00256 INLINE l_rmatrix_slice l_rmatrix::operator ()(const int &m1, const int &m2, const int &n1, const int &n2) 00257 #if(CXSC_INDEX_CHECK) 00258 throw(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG) 00259 #else 00260 throw() 00261 #endif 00262 { 00263 #if(CXSC_INDEX_CHECK) 00264 if((m1<lb1)||(n1<lb2)||(m2>ub1)||(n2>ub2)) cxscthrow(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG("l_rmatrix_slice l_rmatrix::operator ()(const int &m1, const int &n1, const int &m2, const int &n2)")); 00265 #endif 00266 return l_rmatrix_slice(*this,m1,m2,n1,n2); 00267 } 00268 00269 INLINE l_rmatrix_subv l_rmatrix_slice::operator [](const int &i) const 00270 #if(CXSC_INDEX_CHECK) 00271 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00272 #else 00273 throw() 00274 #endif 00275 { 00276 #if(CXSC_INDEX_CHECK) 00277 if((i<start1)||(i>end1)) cxscthrow(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT("l_rmatrix_subv l_rmatrix_slice::operator [](const int &i)")); 00278 #endif 00279 return l_rmatrix_subv(dat, start2, end2, sxsize, mxsize*(i-start1+offset1)+offset2,1); 00280 } 00281 00282 INLINE l_rmatrix_subv l_rmatrix_slice::operator [](const cxscmatrix_column &i) const 00283 #if(CXSC_INDEX_CHECK) 00284 throw(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT) 00285 #else 00286 throw() 00287 #endif 00288 { 00289 #if(CXSC_INDEX_CHECK) 00290 if((i.col()<start2)||(i.col()>end2)) cxscthrow(ERROR_LRMATRIX_ROW_OR_COL_NOT_IN_MAT("l_rmatrix_subv l_rmatrix_slice::operator [](const cxscmatrix_column &i)")); 00291 #endif 00292 return l_rmatrix_subv(dat, start1, end1, sysize, offset1*mxsize+i.col()-start2+offset2, mxsize); 00293 } 00294 00295 INLINE l_rmatrix_slice l_rmatrix_slice::operator ()(const int &m, const int &n) 00296 #if(CXSC_INDEX_CHECK) 00297 throw(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG) 00298 #else 00299 throw() 00300 #endif 00301 { 00302 #if(CXSC_INDEX_CHECK) 00303 if((m<1)||(n<1)||(m<start1)||(n<start2)||(m>end1)||(n>end2)) cxscthrow(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG("l_rmatrix_slice l_rmatrix_slice::operator ()(const int &m, const int &n)")); 00304 #endif 00305 return l_rmatrix_slice(*this,1,m,1,n); 00306 } 00307 00308 INLINE l_rmatrix_slice l_rmatrix_slice::operator ()(const int &m1, const int &m2, const int &n1, const int &n2) 00309 #if(CXSC_INDEX_CHECK) 00310 throw(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG) 00311 #else 00312 throw() 00313 #endif 00314 { 00315 #if(CXSC_INDEX_CHECK) 00316 if((m1<start1)||(n1<start2)||(m2>end1)||(n2>end2)) cxscthrow(ERROR_LRMATRIX_SUB_ARRAY_TOO_BIG("l_rmatrix_slice l_rmatrix_slice::operator ()(const int &m1, const int &m2, const int &n1, const int &n2)")); 00317 #endif 00318 return l_rmatrix_slice(*this,m1,m2,n1,n2); 00319 } 00320 00321 INLINE l_rmatrix_subv l_rmatrix_subv::operator ()(const int &i) 00322 #if(CXSC_INDEX_CHECK) 00323 throw(ERROR_LRVECTOR_SUB_ARRAY_TOO_BIG) 00324 #else 00325 throw() 00326 #endif 00327 { 00328 #if(CXSC_INDEX_CHECK) 00329 if(1<lb||i>ub) cxscthrow(ERROR_LRVECTOR_SUB_ARRAY_TOO_BIG("l_rmatrix_subv l_rmatrix_subv::operator ()(const int &i)")); 00330 #endif 00331 return l_rmatrix_subv(dat,1,i,i,start+(1-lb)*offset,offset); 00332 } 00333 00334 INLINE l_rmatrix_subv l_rmatrix_subv::operator ()(const int &i1,const int &i2) 00335 #if(CXSC_INDEX_CHECK) 00336 throw(ERROR_LRVECTOR_SUB_ARRAY_TOO_BIG) 00337 #else 00338 throw() 00339 #endif 00340 { 00341 #if(CXSC_INDEX_CHECK) 00342 if(i1<lb||i2>ub) cxscthrow(ERROR_LRVECTOR_SUB_ARRAY_TOO_BIG("l_rmatrix_subv l_rmatrix_subv::operator ()(const int &i1,const int &i2)")); 00343 #endif 00344 return l_rmatrix_subv(dat,i1,i2,i2-i1+1,start+(i1-lb)*offset,offset); 00345 } 00346 00347 00348 00349 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_rmatrix_subv &rv) throw() { return _mvmvassign(*this,rv); } 00350 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_real &r) throw() { return _mvsassign(*this,r); } 00351 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_rvector &v) 00352 #if(CXSC_INDEX_CHECK) 00353 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00354 #else 00355 throw() 00356 #endif 00357 { return _mvvassign(*this,v); } 00358 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_rvector_slice &v) 00359 #if(CXSC_INDEX_CHECK) 00360 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00361 #else 00362 throw() 00363 #endif 00364 { return _mvvassign(*this,l_rvector(v)); } 00365 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const rmatrix_subv &rv) throw() { return _mvvassign(*this,rvector(rv)); } 00366 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const real &r) throw() { return _mvsassign(*this,r); } 00367 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const rvector &v) 00368 #if(CXSC_INDEX_CHECK) 00369 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00370 #else 00371 throw() 00372 #endif 00373 { return _mvvassign(*this,v); } 00374 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const rvector_slice &v) 00375 #if(CXSC_INDEX_CHECK) 00376 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00377 #else 00378 throw() 00379 #endif 00380 { return _mvvassign(*this,l_rvector(v)); } 00381 INLINE l_rmatrix &l_rmatrix::operator =(const l_real &r) throw() { return _msassign(*this,r); } 00382 INLINE l_rmatrix &l_rmatrix::operator =(const l_rmatrix &m) throw() { return _mmassign<l_rmatrix,l_rmatrix,l_real>(*this,m, l_real(0)); } 00383 INLINE l_rmatrix &l_rmatrix::operator =(const l_rmatrix_slice &ms) throw() { return _mmsassign<l_rmatrix,l_rmatrix_slice,l_real>(*this,ms); } 00384 INLINE l_rmatrix &l_rmatrix::operator =(const l_rvector &v) throw() { return _mvassign<l_rmatrix,l_rvector,l_real>(*this,v); } 00385 INLINE l_rmatrix &l_rmatrix::operator =(const l_rvector_slice &v) throw() { return _mvassign<l_rmatrix,l_rvector,l_real>(*this,l_rvector(v)); } 00386 INLINE l_rmatrix &l_rmatrix::operator =(const real &r) throw() { return _msassign(*this,l_real(r)); } 00387 INLINE l_rmatrix &l_rmatrix::operator =(const rmatrix &m) throw() { return _mmassign<l_rmatrix,rmatrix,l_real>(*this,m, l_real(0)); } 00388 INLINE l_rmatrix &l_rmatrix::operator =(const rmatrix_slice &ms) throw() { return _mmsassign<l_rmatrix,rmatrix_slice,l_real>(*this,ms); } 00389 INLINE l_rmatrix &l_rmatrix::operator =(const rvector &v) throw() { return _mvassign<l_rmatrix,rvector,l_real>(*this,v); } 00390 INLINE l_rmatrix &l_rmatrix::operator =(const rvector_slice &v) throw() { return _mvassign<l_rmatrix,rvector,l_real>(*this,rvector(v)); } 00391 00392 INLINE l_rmatrix::operator void*() throw() { return _mvoid(*this); } 00393 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const l_rmatrix &m) 00394 #if(CXSC_INDEX_CHECK) 00395 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00396 #else 00397 throw() 00398 #endif 00399 { return _msmassign(*this,m); } 00400 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const l_rmatrix_slice &ms) 00401 #if(CXSC_INDEX_CHECK) 00402 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00403 #else 00404 throw() 00405 #endif 00406 { return _msmsassign(*this,ms); } 00407 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const l_real &r) throw() { return _mssassign(*this,r); } 00408 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const l_rvector &v) 00409 #if(CXSC_INDEX_CHECK) 00410 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00411 #else 00412 throw() 00413 #endif 00414 { return _msmassign(*this,l_rmatrix(v)); } 00415 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const l_rvector_slice &v) 00416 #if(CXSC_INDEX_CHECK) 00417 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00418 #else 00419 throw() 00420 #endif 00421 { return _msmassign(*this,l_rmatrix(l_rvector(v))); } 00422 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const rmatrix &m) 00423 #if(CXSC_INDEX_CHECK) 00424 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00425 #else 00426 throw() 00427 #endif 00428 { return _msmassign(*this,m); } 00429 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const rmatrix_slice &ms) 00430 #if(CXSC_INDEX_CHECK) 00431 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00432 #else 00433 throw() 00434 #endif 00435 { return _msmsassign(*this,ms); } 00436 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const real &r) throw() { return _mssassign(*this,r); } 00437 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const rvector &v) 00438 #if(CXSC_INDEX_CHECK) 00439 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00440 #else 00441 throw() 00442 #endif 00443 { return _msmassign(*this,rmatrix(v)); } 00444 INLINE l_rmatrix_slice &l_rmatrix_slice::operator =(const rvector_slice &v) 00445 #if(CXSC_INDEX_CHECK) 00446 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00447 #else 00448 throw() 00449 #endif 00450 { return _msmassign(*this,rmatrix(rvector(v))); } 00451 INLINE l_rmatrix_slice::operator void*() throw() { return _msvoid(*this); } 00452 INLINE l_rvector operator /(const l_rmatrix_subv &rv, const l_real &s) throw() { return _mvsdiv<l_rmatrix_subv,l_real,l_rvector>(rv,s); } 00453 INLINE l_rvector operator *(const l_rmatrix_subv &rv, const l_real &s) throw() { return _mvsmult<l_rmatrix_subv,l_real,l_rvector>(rv,s); } 00454 INLINE l_rvector operator *(const l_real &s, const l_rmatrix_subv &rv) throw() { return _mvsmult<l_rmatrix_subv,l_real,l_rvector>(rv,s); } 00455 INLINE l_rmatrix_subv &l_rmatrix_subv::operator *=(const l_real &c) throw() { return _mvsmultassign(*this,c); } 00456 INLINE l_rmatrix_subv &l_rmatrix_subv::operator +=(const l_real &c) throw() { return _mvsplusassign(*this,c); } 00457 INLINE l_rmatrix_subv &l_rmatrix_subv::operator -=(const l_real &c) throw() { return _mvsminusassign(*this,c); } 00458 INLINE l_rmatrix_subv &l_rmatrix_subv::operator /=(const l_real &c) throw() { return _mvsdivassign(*this,c); } 00459 INLINE l_rvector abs(const l_rmatrix_subv &mv) throw() { return _mvabs<l_rmatrix_subv,l_rvector>(mv); } 00460 INLINE l_rvector &l_rvector::operator =(const l_rmatrix_subv &mv) throw() { return _vmvassign<l_rvector,l_rmatrix_subv,l_real>(*this,mv); } 00461 INLINE l_rvector_slice &l_rvector_slice::operator =(const l_rmatrix_subv &mv) throw() { return _vsvassign(*this,l_rvector(mv)); } 00462 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00463 #if(CXSC_INDEX_CHECK) 00464 throw(OP_WITH_WRONG_DIM) 00465 #else 00466 throw() 00467 #endif 00468 { _mvmvaccu(dp,rv1,rv2); } 00469 INLINE void accumulate(dotprecision &dp, const l_rvector & rv1, const l_rmatrix_subv &rv2) 00470 #if(CXSC_INDEX_CHECK) 00471 throw(OP_WITH_WRONG_DIM) 00472 #else 00473 throw() 00474 #endif 00475 { _vmvaccu(dp,rv1,rv2); } 00476 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const l_rvector &rv2) 00477 #if(CXSC_INDEX_CHECK) 00478 throw(OP_WITH_WRONG_DIM) 00479 #else 00480 throw() 00481 #endif 00482 { _vmvaccu(dp,rv2,rv1); } 00483 INLINE void accumulate(dotprecision &dp, const l_rvector_slice & sl1, const l_rmatrix_subv &rv2) 00484 #if(CXSC_INDEX_CHECK) 00485 throw(OP_WITH_WRONG_DIM) 00486 #else 00487 throw() 00488 #endif 00489 { _vmvaccu(dp,l_rvector(sl1),rv2); } 00490 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const l_rvector_slice &sl2) 00491 #if(CXSC_INDEX_CHECK) 00492 throw(OP_WITH_WRONG_DIM) 00493 #else 00494 throw() 00495 #endif 00496 { _vmvaccu(dp,l_rvector(sl2),rv1); } 00497 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00498 #if(CXSC_INDEX_CHECK) 00499 throw(OP_WITH_WRONG_DIM) 00500 #else 00501 throw() 00502 #endif 00503 { _mvmvaccu(dp,rv1,rv2); } 00504 INLINE void accumulate(idotprecision &dp, const l_rvector & rv1, const l_rmatrix_subv &rv2) 00505 #if(CXSC_INDEX_CHECK) 00506 throw(OP_WITH_WRONG_DIM) 00507 #else 00508 throw() 00509 #endif 00510 { _vmvaccu(dp,rv1,rv2); } 00511 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const l_rvector &rv2) 00512 #if(CXSC_INDEX_CHECK) 00513 throw(OP_WITH_WRONG_DIM) 00514 #else 00515 throw() 00516 #endif 00517 { _vmvaccu(dp,rv2,rv1); } 00518 INLINE void accumulate(idotprecision &dp, const l_rvector_slice & sl1, const l_rmatrix_subv &rv2) 00519 #if(CXSC_INDEX_CHECK) 00520 throw(OP_WITH_WRONG_DIM) 00521 #else 00522 throw() 00523 #endif 00524 { _vmvaccu(dp,l_rvector(sl1),rv2); } 00525 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const l_rvector_slice &sl2) 00526 #if(CXSC_INDEX_CHECK) 00527 throw(OP_WITH_WRONG_DIM) 00528 #else 00529 throw() 00530 #endif 00531 { _vmvaccu(dp,l_rvector(sl2),rv1); } 00532 INLINE l_real operator *(const l_rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00533 #if(CXSC_INDEX_CHECK) 00534 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00535 #else 00536 throw() 00537 #endif 00538 { return _mvmvlmult<l_rmatrix_subv,l_rmatrix_subv,l_real>(rv1,rv2); } 00539 INLINE l_real operator *(const l_rvector & rv1, const l_rmatrix_subv &rv2) 00540 #if(CXSC_INDEX_CHECK) 00541 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00542 #else 00543 throw() 00544 #endif 00545 { return _vmvlmult<l_rvector,l_rmatrix_subv,l_real>(rv1,rv2); } 00546 INLINE l_real operator *(const l_rmatrix_subv &rv1,const l_rvector &rv2) 00547 #if(CXSC_INDEX_CHECK) 00548 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00549 #else 00550 throw() 00551 #endif 00552 { return _vmvlmult<l_rvector,l_rmatrix_subv,l_real>(rv2,rv1); } 00553 INLINE l_real operator *(const l_rvector_slice &sl,const l_rmatrix_subv &sv) 00554 #if(CXSC_INDEX_CHECK) 00555 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00556 #else 00557 throw() 00558 #endif 00559 { return _vmvlmult<l_rvector,l_rmatrix_subv,l_real>(l_rvector(sl),sv); } 00560 INLINE l_real operator *(const l_rmatrix_subv &mv,const l_rvector_slice &vs) 00561 #if(CXSC_INDEX_CHECK) 00562 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00563 #else 00564 throw() 00565 #endif 00566 { return _vmvlmult<l_rvector,l_rmatrix_subv,l_real>(l_rvector(vs),mv); } 00567 INLINE l_rvector operator +(const l_rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00568 #if(CXSC_INDEX_CHECK) 00569 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00570 #else 00571 throw() 00572 #endif 00573 { return _mvmvplus<l_rmatrix_subv,l_rmatrix_subv,l_rvector>(rv1,rv2); } 00574 INLINE l_rvector operator +(const l_rmatrix_subv &rv1,const l_rvector &rv2) 00575 #if(CXSC_INDEX_CHECK) 00576 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00577 #else 00578 throw() 00579 #endif 00580 { return _mvvplus<l_rmatrix_subv,l_rvector,l_rvector>(rv1,rv2); } 00581 INLINE l_rvector operator +(const l_rvector & rv1, const l_rmatrix_subv &rv2) 00582 #if(CXSC_INDEX_CHECK) 00583 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00584 #else 00585 throw() 00586 #endif 00587 { return _mvvplus<l_rmatrix_subv,l_rvector,l_rvector>(rv2,rv1); } 00588 INLINE l_rvector operator +(const l_rvector_slice &sl,const l_rmatrix_subv &mv) 00589 #if(CXSC_INDEX_CHECK) 00590 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00591 #else 00592 throw() 00593 #endif 00594 { return _mvvplus<l_rmatrix_subv,l_rvector,l_rvector>(mv,l_rvector(sl)); } 00595 INLINE l_rvector operator +(const l_rmatrix_subv &mv,const l_rvector_slice &sl) 00596 #if(CXSC_INDEX_CHECK) 00597 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00598 #else 00599 throw() 00600 #endif 00601 { return _mvvplus<l_rmatrix_subv,l_rvector,l_rvector>(mv,l_rvector(sl)); } 00602 INLINE l_rmatrix_subv &l_rmatrix_subv::operator +=(const l_rvector &rv) 00603 #if(CXSC_INDEX_CHECK) 00604 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00605 #else 00606 throw() 00607 #endif 00608 { return _mvvplusassign(*this,rv); } 00609 INLINE l_rmatrix_subv &l_rmatrix_subv::operator +=(const l_rvector_slice &rv) 00610 #if(CXSC_INDEX_CHECK) 00611 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00612 #else 00613 throw() 00614 #endif 00615 { return _mvvplusassign(*this,l_rvector(rv)); } 00616 INLINE l_rvector operator -(const l_rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00617 #if(CXSC_INDEX_CHECK) 00618 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00619 #else 00620 throw() 00621 #endif 00622 { return _mvmvminus<l_rmatrix_subv,l_rmatrix_subv,l_rvector>(rv1,rv2); } 00623 INLINE l_rvector operator -(const l_rvector & rv1, const l_rmatrix_subv &rv2) 00624 #if(CXSC_INDEX_CHECK) 00625 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00626 #else 00627 throw() 00628 #endif 00629 { return _vmvminus<l_rvector,l_rmatrix_subv,l_rvector>(rv1,rv2); } 00630 INLINE l_rvector operator -(const l_rmatrix_subv &rv1,const l_rvector &rv2) 00631 #if(CXSC_INDEX_CHECK) 00632 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00633 #else 00634 throw() 00635 #endif 00636 { return _mvvminus<l_rmatrix_subv,l_rvector,l_rvector>(rv1,rv2); } 00637 INLINE l_rvector operator -(const l_rvector_slice &sl,const l_rmatrix_subv &mv) 00638 #if(CXSC_INDEX_CHECK) 00639 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00640 #else 00641 throw() 00642 #endif 00643 { return _vmvminus<l_rvector,l_rmatrix_subv,l_rvector>(l_rvector(sl),mv); } 00644 INLINE l_rvector operator -(const l_rmatrix_subv &mv,const l_rvector_slice &sl) 00645 #if(CXSC_INDEX_CHECK) 00646 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00647 #else 00648 throw() 00649 #endif 00650 { return _mvvminus<l_rmatrix_subv,l_rvector,l_rvector>(mv,l_rvector(sl)); } 00651 INLINE l_rmatrix_subv &l_rmatrix_subv::operator -=(const l_rvector &rv) 00652 #if(CXSC_INDEX_CHECK) 00653 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00654 #else 00655 throw() 00656 #endif 00657 { return _mvvminusassign(*this,rv); } 00658 INLINE l_rmatrix_subv &l_rmatrix_subv::operator -=(const l_rvector_slice &rv) 00659 #if(CXSC_INDEX_CHECK) 00660 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00661 #else 00662 throw() 00663 #endif 00664 { return _mvvminusassign(*this,l_rvector(rv)); } 00665 // real 00666 INLINE void accumulate(dotprecision &dp, const rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00667 #if(CXSC_INDEX_CHECK) 00668 throw(OP_WITH_WRONG_DIM) 00669 #else 00670 throw() 00671 #endif 00672 { _mvmvaccu(dp,rv1,rv2); } 00673 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const rmatrix_subv &rv2) 00674 #if(CXSC_INDEX_CHECK) 00675 throw(OP_WITH_WRONG_DIM) 00676 #else 00677 throw() 00678 #endif 00679 { _mvmvaccu(dp,rv2,rv1); } 00680 INLINE void accumulate(dotprecision &dp, const rvector & rv1, const l_rmatrix_subv &rv2) 00681 #if(CXSC_INDEX_CHECK) 00682 throw(OP_WITH_WRONG_DIM) 00683 #else 00684 throw() 00685 #endif 00686 { _vmvaccu(dp,rv1,rv2); } 00687 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const rvector &rv2) 00688 #if(CXSC_INDEX_CHECK) 00689 throw(OP_WITH_WRONG_DIM) 00690 #else 00691 throw() 00692 #endif 00693 { _vmvaccu(dp,rv2,rv1); } 00694 INLINE void accumulate(dotprecision &dp, const rvector_slice & sl1, const l_rmatrix_subv &rv2) 00695 #if(CXSC_INDEX_CHECK) 00696 throw(OP_WITH_WRONG_DIM) 00697 #else 00698 throw() 00699 #endif 00700 { _vmvaccu(dp,rvector(sl1),rv2); } 00701 INLINE void accumulate(dotprecision &dp, const l_rmatrix_subv & rv1, const rvector_slice &sl2) 00702 #if(CXSC_INDEX_CHECK) 00703 throw(OP_WITH_WRONG_DIM) 00704 #else 00705 throw() 00706 #endif 00707 { _vmvaccu(dp,rvector(sl2),rv1); } 00708 00709 INLINE void accumulate(idotprecision &dp, const rmatrix_subv & rv1, const l_rmatrix_subv &rv2) 00710 #if(CXSC_INDEX_CHECK) 00711 throw(OP_WITH_WRONG_DIM) 00712 #else 00713 throw() 00714 #endif 00715 { _mvmvaccu(dp,rv1,rv2); } 00716 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const rmatrix_subv &rv2) 00717 #if(CXSC_INDEX_CHECK) 00718 throw(OP_WITH_WRONG_DIM) 00719 #else 00720 throw() 00721 #endif 00722 { _mvmvaccu(dp,rv2,rv1); } 00723 INLINE void accumulate(idotprecision &dp, const rvector & rv1, const l_rmatrix_subv &rv2) 00724 #if(CXSC_INDEX_CHECK) 00725 throw(OP_WITH_WRONG_DIM) 00726 #else 00727 throw() 00728 #endif 00729 { _vmvaccu(dp,rv1,rv2); } 00730 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const rvector &rv2) 00731 #if(CXSC_INDEX_CHECK) 00732 throw(OP_WITH_WRONG_DIM) 00733 #else 00734 throw() 00735 #endif 00736 { _vmvaccu(dp,rv2,rv1); } 00737 INLINE void accumulate(idotprecision &dp, const rvector_slice & sl1, const l_rmatrix_subv &rv2) 00738 #if(CXSC_INDEX_CHECK) 00739 throw(OP_WITH_WRONG_DIM) 00740 #else 00741 throw() 00742 #endif 00743 { _vmvaccu(dp,rvector(sl1),rv2); } 00744 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const rvector_slice &sl2) 00745 #if(CXSC_INDEX_CHECK) 00746 throw(OP_WITH_WRONG_DIM) 00747 #else 00748 throw() 00749 #endif 00750 { _vmvaccu(dp,rvector(sl2),rv1); } 00751 00752 INLINE l_rmatrix_subv &l_rmatrix_subv::operator +=(const rvector &rv) 00753 #if(CXSC_INDEX_CHECK) 00754 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00755 #else 00756 throw() 00757 #endif 00758 { return _mvvplusassign(*this,rv); } 00759 INLINE l_rmatrix_subv &l_rmatrix_subv::operator +=(const rvector_slice &rv) 00760 #if(CXSC_INDEX_CHECK) 00761 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00762 #else 00763 throw() 00764 #endif 00765 { return _mvvplusassign(*this,l_rvector(rv)); } 00766 INLINE l_rmatrix_subv &l_rmatrix_subv::operator -=(const rvector &rv) 00767 #if(CXSC_INDEX_CHECK) 00768 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00769 #else 00770 throw() 00771 #endif 00772 { return _mvvminusassign(*this,rv); } 00773 INLINE l_rmatrix_subv &l_rmatrix_subv::operator -=(const rvector_slice &rv) 00774 #if(CXSC_INDEX_CHECK) 00775 throw(ERROR_LRVECTOR_OP_WITH_WRONG_DIM) 00776 #else 00777 throw() 00778 #endif 00779 { return _mvvminusassign(*this,rvector(rv)); } 00780 00781 // l_rmatrix x l_rmatrix 00787 INLINE l_rmatrix _l_rmatrix(const l_rmatrix &rm) throw() { return rm; } 00793 INLINE l_rmatrix _l_rmatrix(const l_rvector &v) throw() { return l_rmatrix(v); } 00799 INLINE l_rmatrix _l_rmatrix(const l_rvector_slice &v) throw() { return l_rmatrix(v); } 00805 INLINE l_rmatrix _l_rmatrix(const l_real &r) throw() { return l_rmatrix(r); } 00806 INLINE int Lb(const l_rmatrix &rm, const int &i) 00807 #if(CXSC_INDEX_CHECK) 00808 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00809 #else 00810 throw() 00811 #endif 00812 { return _mlb(rm,i); } 00813 INLINE int Ub(const l_rmatrix &rm, const int &i) 00814 #if(CXSC_INDEX_CHECK) 00815 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00816 #else 00817 throw() 00818 #endif 00819 { return _mub(rm,i); } 00820 INLINE int Lb(const l_rmatrix_slice &rm, const int &i) 00821 #if(CXSC_INDEX_CHECK) 00822 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00823 #else 00824 throw() 00825 #endif 00826 { return _mslb(rm,i); } 00827 INLINE int Ub(const l_rmatrix_slice &rm, const int &i) 00828 #if(CXSC_INDEX_CHECK) 00829 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00830 #else 00831 throw() 00832 #endif 00833 { return _msub(rm,i); } 00834 INLINE l_rmatrix &SetLb(l_rmatrix &m, const int &i,const int &j) 00835 #if(CXSC_INDEX_CHECK) 00836 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00837 #else 00838 throw() 00839 #endif 00840 { return _msetlb(m,i,j); } 00841 INLINE l_rmatrix &SetUb(l_rmatrix &m, const int &i,const int &j) 00842 #if(CXSC_INDEX_CHECK) 00843 throw(ERROR_LRMATRIX_WRONG_ROW_OR_COL) 00844 #else 00845 throw() 00846 #endif 00847 { return _msetub(m,i,j); } 00848 00849 INLINE int RowLen ( const l_rmatrix& A ) // Length of the rows of a matrix 00850 { return Ub(A,2)-Lb(A,2)+1; } //------------------------------- 00851 00852 INLINE int ColLen ( const l_rmatrix& A ) // Length of the columns of a matrix 00853 { return Ub(A,1)-Lb(A,1)+1; } //---------------------------------- 00854 00855 INLINE int RowLen ( const l_rmatrix_slice& A ) // Length of the rows of a matrix 00856 { return Ub(A,2)-Lb(A,2)+1; } //------------------------------- 00857 00858 INLINE int ColLen ( const l_rmatrix_slice& A ) // Length of the columns of a matrix 00859 { return Ub(A,1)-Lb(A,1)+1; } //---------------------------------- 00860 00861 INLINE void Resize(l_rmatrix &A) throw() { _mresize(A);} 00862 INLINE void Resize(l_rmatrix &A,const int &m, const int &n) 00863 #if(CXSC_INDEX_CHECK) 00864 throw(ERROR_LRMATRIX_WRONG_BOUNDARIES) 00865 #else 00866 throw() 00867 #endif 00868 { _mresize<l_rmatrix,l_real>(A,m,n); } 00869 INLINE void Resize(l_rmatrix &A,const int &m1, const int &m2,const int &n1,const int &n2) 00870 #if(CXSC_INDEX_CHECK) 00871 throw(ERROR_LRMATRIX_WRONG_BOUNDARIES) 00872 #else 00873 throw() 00874 #endif 00875 { _mresize<l_rmatrix,l_real>(A,m1,m2,n1,n2); } 00876 INLINE l_rmatrix abs(const l_rmatrix &m) throw() { return _mabs<l_rmatrix,l_rmatrix>(m); } 00877 INLINE l_rmatrix abs(const l_rmatrix_slice &ms) throw() { return _msabs<l_rmatrix_slice,l_rmatrix>(ms); } 00878 INLINE l_real::l_real(const l_rmatrix &m) 00879 #if(CXSC_INDEX_CHECK) 00880 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ,ERROR_LRMATRIX_USE_OF_UNINITIALIZED_OBJ) 00881 #else 00882 throw() 00883 #endif 00884 { _smconstr(*this,m); } 00885 // INLINE l_real l_real::_l_real(const l_rmatrix &m) throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ,ERROR_LRMATRIX_USE_OF_UNINITIALIZED_OBJ) { _smconstr(*this,m); return *this; } 00886 INLINE l_rmatrix operator *(const l_real &c, const l_rmatrix &m) throw() { return _smmult<l_real,l_rmatrix,l_rmatrix>(c,m); } 00887 INLINE l_rmatrix operator *(const l_real &c, const l_rmatrix_slice &ms) throw() { return _smsmult<l_real,l_rmatrix_slice,l_rmatrix>(c,ms); } 00888 INLINE l_rmatrix operator *(const l_rmatrix &m,const l_real &c) throw() { return _smmult<l_real,l_rmatrix,l_rmatrix>(c,m); } 00889 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms,const l_real &c) throw() { return _smsmult<l_real,l_rmatrix_slice,l_rmatrix>(c,ms); } 00890 INLINE l_rmatrix &operator *=(l_rmatrix &m,const l_real &c) throw() { return _msmultassign(m,c); } 00891 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const l_rmatrix &m) 00892 #if(CXSC_INDEX_CHECK) 00893 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00894 #else 00895 throw() 00896 #endif 00897 { return (*this=*this*m); } 00898 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const l_rmatrix_slice &m) 00899 #if(CXSC_INDEX_CHECK) 00900 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00901 #else 00902 throw() 00903 #endif 00904 { return (*this=*this*m); } 00905 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const l_real &c) throw() { return _mssmultassign(*this,c); } 00906 INLINE l_rmatrix operator /(const l_rmatrix &m,const l_real &c) throw() { return _msdiv<l_rmatrix,l_real,l_rmatrix>(m,c); } 00907 INLINE l_rmatrix operator /(const l_rmatrix_slice &ms, const l_real &c) throw() { return _mssdiv<l_rmatrix_slice,l_real,l_rmatrix>(ms,c); } 00908 INLINE l_rmatrix &operator /=(l_rmatrix &m,const l_real &c) throw() { return _msdivassign(m,c); } 00909 INLINE l_rmatrix_slice &l_rmatrix_slice::operator /=(const l_real &c) throw() { return _mssdivassign(*this,c); } 00910 INLINE l_rmatrix operator *(const real &c, const l_rmatrix &m) throw() { return _smmult<real,l_rmatrix,l_rmatrix>(c,m); } 00911 INLINE l_rmatrix operator *(const real &c, const l_rmatrix_slice &ms) throw() { return _smsmult<real,l_rmatrix_slice,l_rmatrix>(c,ms); } 00912 INLINE l_rmatrix operator *(const l_rmatrix &m,const real &c) throw() { return _smmult<real,l_rmatrix,l_rmatrix>(c,m); } 00913 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms,const real &c) throw() { return _smsmult<real,l_rmatrix_slice,l_rmatrix>(c,ms); } 00914 INLINE l_rmatrix &operator *=(l_rmatrix &m,const real &c) throw() { return _msmultassign(m,c); } 00915 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const rmatrix &m) 00916 #if(CXSC_INDEX_CHECK) 00917 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00918 #else 00919 throw() 00920 #endif 00921 { return (*this=*this*m); } 00922 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const rmatrix_slice &m) 00923 #if(CXSC_INDEX_CHECK) 00924 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00925 #else 00926 throw() 00927 #endif 00928 { return (*this=*this*m); } 00929 INLINE l_rmatrix_slice &l_rmatrix_slice::operator *=(const real &c) throw() { return _mssmultassign(*this,c); } 00930 INLINE l_rmatrix operator /(const l_rmatrix &m,const real &c) throw() { return _msdiv<l_rmatrix,real,l_rmatrix>(m,c); } 00931 INLINE l_rmatrix operator /(const l_rmatrix_slice &ms, const real &c) throw() { return _mssdiv<l_rmatrix_slice,real,l_rmatrix>(ms,c); } 00932 INLINE l_rmatrix &operator /=(l_rmatrix &m,const real &c) throw() { return _msdivassign(m,c); } 00933 INLINE l_rmatrix_slice &l_rmatrix_slice::operator /=(const real &c) throw() { return _mssdivassign(*this,c); } 00934 // INLINE l_real::l_real(const rmatrix &m) throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ,ERROR_LRMATRIX_USE_OF_UNINITIALIZED_OBJ) { _smconstr(*this,m); } 00935 // INLINE l_real l_real::_l_real(const l_rmatrix &m) throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ,ERROR_LRMATRIX_USE_OF_UNINITIALIZED_OBJ) { _smconstr(*this,m); return *this; } 00936 INLINE l_rmatrix operator *(const l_real &c, const rmatrix &m) throw() { return _smmult<l_real,rmatrix,l_rmatrix>(c,m); } 00937 INLINE l_rmatrix operator *(const l_real &c, const rmatrix_slice &ms) throw() { return _smsmult<l_real,rmatrix_slice,l_rmatrix>(c,ms); } 00938 INLINE l_rmatrix operator *(const rmatrix &m,const l_real &c) throw() { return _smmult<l_real,rmatrix,l_rmatrix>(c,m); } 00939 INLINE l_rmatrix operator *(const rmatrix_slice &ms,const l_real &c) throw() { return _smsmult<l_real,rmatrix_slice,l_rmatrix>(c,ms); } 00940 INLINE l_rmatrix operator /(const rmatrix &m,const l_real &c) throw() { return _msdiv<rmatrix,l_real,l_rmatrix>(m,c); } 00941 INLINE l_rmatrix operator /(const rmatrix_slice &ms, const l_real &c) throw() { return _mssdiv<rmatrix_slice,l_real,l_rmatrix>(ms,c); } 00942 INLINE l_rvector::l_rvector(const l_rmatrix &sl) 00943 #if(CXSC_INDEX_CHECK) 00944 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00945 #else 00946 throw() 00947 #endif 00948 { _vmconstr<l_rvector,l_rmatrix,l_real>(*this,sl); } 00949 INLINE l_rvector::l_rvector(const l_rmatrix_slice &sl) 00950 #if(CXSC_INDEX_CHECK) 00951 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00952 #else 00953 throw() 00954 #endif 00955 { _vmsconstr<l_rvector,l_rmatrix_slice,l_real>(*this,sl); } 00956 INLINE l_rvector &l_rvector::operator =(const l_rmatrix &m) 00957 #if(CXSC_INDEX_CHECK) 00958 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00959 #else 00960 throw() 00961 #endif 00962 { return _vmassign<l_rvector,l_rmatrix,l_real>(*this,m); } 00963 INLINE l_rvector &l_rvector::operator =(const l_rmatrix_slice &m) 00964 #if(CXSC_INDEX_CHECK) 00965 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00966 #else 00967 throw() 00968 #endif 00969 { return _vmassign<l_rvector,l_rmatrix,l_real>(*this,l_rmatrix(m)); } 00970 INLINE l_rvector_slice & l_rvector_slice::operator =(const l_rmatrix_slice &m) 00971 #if(CXSC_INDEX_CHECK) 00972 throw(ERROR__OP_WITH_WRONG_DIM<l_rvector>,ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00973 #else 00974 throw() 00975 #endif 00976 { return _vsvassign(*this,l_rvector(l_rmatrix(m))); } 00977 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_rmatrix &m) 00978 #if(CXSC_INDEX_CHECK) 00979 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00980 #else 00981 throw() 00982 #endif 00983 { return _mvvassign(*this,l_rvector(m)); } 00984 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const l_rmatrix_slice &m) 00985 #if(CXSC_INDEX_CHECK) 00986 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00987 #else 00988 throw() 00989 #endif 00990 { return _mvvassign(*this,l_rvector(l_rmatrix(m))); } 00991 INLINE l_rvector operator *(const l_rmatrix &m,const l_rvector &v) 00992 #if(CXSC_INDEX_CHECK) 00993 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00994 #else 00995 throw() 00996 #endif 00997 { return _mvlmult<l_rmatrix,l_rvector,l_rvector>(m,v); } 00998 INLINE l_rvector operator *(const l_rmatrix_slice &ms,const l_rvector &v) 00999 #if(CXSC_INDEX_CHECK) 01000 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01001 #else 01002 throw() 01003 #endif 01004 { return _msvlmult<l_rmatrix_slice,l_rvector,l_rvector>(ms,v); } 01005 INLINE l_rvector operator *(const l_rvector &v,const l_rmatrix &m) 01006 #if(CXSC_INDEX_CHECK) 01007 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01008 #else 01009 throw() 01010 #endif 01011 { return _vmlmult<l_rvector,l_rmatrix,l_rvector>(v,m); } 01012 INLINE l_rvector operator *(const l_rvector &v,const l_rmatrix_slice &ms) 01013 #if(CXSC_INDEX_CHECK) 01014 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01015 #else 01016 throw() 01017 #endif 01018 { return _vmslmult<l_rvector,l_rmatrix_slice,l_rvector>(v,ms); } 01019 INLINE l_rvector &operator *=(l_rvector &v,const l_rmatrix &m) 01020 #if(CXSC_INDEX_CHECK) 01021 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01022 #else 01023 throw() 01024 #endif 01025 { return _vmlmultassign<l_rvector,l_rmatrix,l_real>(v,m); } 01026 INLINE l_rvector &operator *=(l_rvector &v,const l_rmatrix_slice &ms) 01027 #if(CXSC_INDEX_CHECK) 01028 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01029 #else 01030 throw() 01031 #endif 01032 { return _vmslmultassign<l_rvector,l_rmatrix_slice,l_real>(v,ms); } 01033 INLINE l_rvector_slice &l_rvector_slice::operator *=(const l_rmatrix &m) 01034 #if(CXSC_INDEX_CHECK) 01035 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01036 #else 01037 throw() 01038 #endif 01039 { return _vsmlmultassign<l_rvector_slice,l_rmatrix,l_real>(*this,m); } 01040 INLINE l_rvector operator *(const l_rvector_slice &v,const l_rmatrix &m) 01041 #if(CXSC_INDEX_CHECK) 01042 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01043 #else 01044 throw() 01045 #endif 01046 { return _vmlmult<l_rvector,l_rmatrix,l_rvector>(l_rvector(v),m); } 01047 INLINE l_rvector operator *(const l_rvector_slice &v,const l_rmatrix_slice &m) 01048 #if(CXSC_INDEX_CHECK) 01049 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01050 #else 01051 throw() 01052 #endif 01053 { return _vmslmult<l_rvector,l_rmatrix_slice,l_rvector>(l_rvector(v),m); } 01054 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const rmatrix &m) 01055 #if(CXSC_INDEX_CHECK) 01056 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 01057 #else 01058 throw() 01059 #endif 01060 { return _mvvassign(*this,rvector(m)); } 01061 INLINE l_rmatrix_subv &l_rmatrix_subv::operator =(const rmatrix_slice &m) 01062 #if(CXSC_INDEX_CHECK) 01063 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 01064 #else 01065 throw() 01066 #endif 01067 { return _mvvassign(*this,rvector(rmatrix(m))); } 01068 INLINE l_rvector operator *(const rvector &v,const l_rmatrix &m) 01069 #if(CXSC_INDEX_CHECK) 01070 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01071 #else 01072 throw() 01073 #endif 01074 { return _vmlmult<rvector,l_rmatrix,l_rvector>(v,m); } 01075 INLINE l_rvector operator *(const rvector &v,const l_rmatrix_slice &ms) 01076 #if(CXSC_INDEX_CHECK) 01077 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01078 #else 01079 throw() 01080 #endif 01081 { return _vmslmult<rvector,l_rmatrix_slice,l_rvector>(v,ms); } 01082 INLINE l_rvector operator *(const rvector_slice &v,const l_rmatrix &m) 01083 #if(CXSC_INDEX_CHECK) 01084 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01085 #else 01086 throw() 01087 #endif 01088 { return _vmlmult<l_rvector,l_rmatrix,l_rvector>(l_rvector(v),m); } 01089 INLINE l_rvector operator *(const l_rmatrix &m,const rvector &v) 01090 #if(CXSC_INDEX_CHECK) 01091 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01092 #else 01093 throw() 01094 #endif 01095 { return _mvlmult<l_rmatrix,rvector,l_rvector>(m,v); } 01096 INLINE l_rvector operator *(const l_rmatrix_slice &ms,const rvector &v) 01097 #if(CXSC_INDEX_CHECK) 01098 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01099 #else 01100 throw() 01101 #endif 01102 { return _msvlmult<l_rmatrix_slice,rvector,l_rvector>(ms,v); } 01103 01104 INLINE const l_rmatrix &operator +(const l_rmatrix &m) throw() { return m; } 01105 INLINE l_rmatrix operator +(const l_rmatrix_slice &m) throw() { return l_rmatrix(m); } 01106 INLINE l_rmatrix operator +(const l_rmatrix &m1,const l_rmatrix &m2) 01107 #if(CXSC_INDEX_CHECK) 01108 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01109 #else 01110 throw() 01111 #endif 01112 { return _mmplus<l_rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01113 INLINE l_rmatrix operator +(const l_rmatrix &m,const l_rmatrix_slice &ms) 01114 #if(CXSC_INDEX_CHECK) 01115 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01116 #else 01117 throw() 01118 #endif 01119 { return _mmsplus<l_rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01120 INLINE l_rmatrix operator +(const l_rmatrix_slice &ms,const l_rmatrix &m) 01121 #if(CXSC_INDEX_CHECK) 01122 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01123 #else 01124 throw() 01125 #endif 01126 { return _mmsplus<l_rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01127 INLINE l_rmatrix operator +(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) 01128 #if(CXSC_INDEX_CHECK) 01129 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01130 #else 01131 throw() 01132 #endif 01133 { return _msmsplus<l_rmatrix_slice,l_rmatrix_slice,l_rmatrix>(m1,m2); } 01134 INLINE l_rmatrix &operator +=(l_rmatrix &m1,const l_rmatrix &m2) 01135 #if(CXSC_INDEX_CHECK) 01136 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01137 #else 01138 throw() 01139 #endif 01140 { return _mmplusassign(m1,m2); } 01141 INLINE l_rmatrix &operator +=(l_rmatrix &m1,const l_rmatrix_slice &ms) 01142 #if(CXSC_INDEX_CHECK) 01143 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01144 #else 01145 throw() 01146 #endif 01147 { return _mmsplusassign(m1,ms); } 01148 INLINE l_rmatrix_slice &l_rmatrix_slice::operator +=(const l_rmatrix &m1) 01149 #if(CXSC_INDEX_CHECK) 01150 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01151 #else 01152 throw() 01153 #endif 01154 { return _msmplusassign(*this,m1); } 01155 INLINE l_rmatrix_slice &l_rmatrix_slice::operator +=(const l_rmatrix_slice &ms2) 01156 #if(CXSC_INDEX_CHECK) 01157 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01158 #else 01159 throw() 01160 #endif 01161 { return _msmsplusassign(*this,ms2); } 01162 INLINE l_rmatrix operator -(const l_rmatrix &m) throw() { return _mminus(m); } 01163 INLINE l_rmatrix operator -(const l_rmatrix_slice &m) throw() { return _msminus<l_rmatrix_slice,l_rmatrix>(m); } 01164 INLINE l_rmatrix operator -(const l_rmatrix &m1,const l_rmatrix &m2) 01165 #if(CXSC_INDEX_CHECK) 01166 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01167 #else 01168 throw() 01169 #endif 01170 { return _mmminus<l_rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01171 INLINE l_rmatrix operator -(const l_rmatrix &m,const l_rmatrix_slice &ms) 01172 #if(CXSC_INDEX_CHECK) 01173 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01174 #else 01175 throw() 01176 #endif 01177 { return _mmsminus<l_rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01178 INLINE l_rmatrix operator -(const l_rmatrix_slice &ms,const l_rmatrix &m) 01179 #if(CXSC_INDEX_CHECK) 01180 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01181 #else 01182 throw() 01183 #endif 01184 { return _msmminus<l_rmatrix_slice,l_rmatrix,l_rmatrix>(ms,m); } 01185 INLINE l_rmatrix operator -(const l_rmatrix_slice &ms1,const l_rmatrix_slice &ms2) 01186 #if(CXSC_INDEX_CHECK) 01187 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01188 #else 01189 throw() 01190 #endif 01191 { return _msmsminus<l_rmatrix_slice,l_rmatrix_slice,l_rmatrix>(ms1,ms2); } 01192 INLINE l_rmatrix &operator -=(l_rmatrix &m1,const l_rmatrix &m2) 01193 #if(CXSC_INDEX_CHECK) 01194 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01195 #else 01196 throw() 01197 #endif 01198 { return _mmminusassign(m1,m2); } 01199 INLINE l_rmatrix &operator -=(l_rmatrix &m1,const l_rmatrix_slice &ms) 01200 #if(CXSC_INDEX_CHECK) 01201 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01202 #else 01203 throw() 01204 #endif 01205 { return _mmsminusassign(m1,ms); } 01206 INLINE l_rmatrix_slice &l_rmatrix_slice::operator -=(const l_rmatrix &m1) 01207 #if(CXSC_INDEX_CHECK) 01208 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01209 #else 01210 throw() 01211 #endif 01212 { return _msmminusassign(*this,m1); } 01213 INLINE l_rmatrix_slice &l_rmatrix_slice::operator -=(const l_rmatrix_slice &ms2) 01214 #if(CXSC_INDEX_CHECK) 01215 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01216 #else 01217 throw() 01218 #endif 01219 { return _msmsminusassign(*this,ms2); } 01220 INLINE l_rmatrix operator *(const l_rmatrix &m1, const l_rmatrix &m2) 01221 #if(CXSC_INDEX_CHECK) 01222 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01223 #else 01224 throw() 01225 #endif 01226 { return _mmlmult<l_rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01227 INLINE l_rmatrix operator *(const l_rmatrix &m1, const l_rmatrix_slice &ms) 01228 #if(CXSC_INDEX_CHECK) 01229 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01230 #else 01231 throw() 01232 #endif 01233 { return _mmslmult<l_rmatrix,l_rmatrix_slice,l_rmatrix>(m1,ms); } 01234 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms, const l_rmatrix &m1) 01235 #if(CXSC_INDEX_CHECK) 01236 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01237 #else 01238 throw() 01239 #endif 01240 { return _msmlmult<l_rmatrix_slice,l_rmatrix,l_rmatrix>(ms,m1); } 01241 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms1, const l_rmatrix_slice &ms2) 01242 #if(CXSC_INDEX_CHECK) 01243 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01244 #else 01245 throw() 01246 #endif 01247 { return _msmslmult<l_rmatrix_slice,l_rmatrix_slice,l_rmatrix>(ms1,ms2); } 01248 INLINE l_rmatrix &operator *=(l_rmatrix &m1,const l_rmatrix &m2) 01249 #if(CXSC_INDEX_CHECK) 01250 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01251 #else 01252 throw() 01253 #endif 01254 { return _mmlmultassign<l_rmatrix,l_rmatrix,l_real>(m1,m2); } 01255 INLINE l_rmatrix &operator *=(l_rmatrix &m1,const l_rmatrix_slice &ms) 01256 #if(CXSC_INDEX_CHECK) 01257 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01258 #else 01259 throw() 01260 #endif 01261 { return _mmslmultassign<l_rmatrix,l_rmatrix_slice,l_real>(m1,ms); } 01262 INLINE l_rmatrix operator +(const rmatrix &m1,const l_rmatrix &m2) 01263 #if(CXSC_INDEX_CHECK) 01264 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01265 #else 01266 throw() 01267 #endif 01268 { return _mmplus<rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01269 INLINE l_rmatrix operator +(const l_rmatrix &m1,const rmatrix &m2) 01270 #if(CXSC_INDEX_CHECK) 01271 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01272 #else 01273 throw() 01274 #endif 01275 { return _mmplus<rmatrix,l_rmatrix,l_rmatrix>(m2,m1); } 01276 INLINE l_rmatrix operator +(const rmatrix &m,const l_rmatrix_slice &ms) 01277 #if(CXSC_INDEX_CHECK) 01278 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01279 #else 01280 throw() 01281 #endif 01282 { return _mmsplus<rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01283 INLINE l_rmatrix operator +(const l_rmatrix &m,const rmatrix_slice &ms) 01284 #if(CXSC_INDEX_CHECK) 01285 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01286 #else 01287 throw() 01288 #endif 01289 { return _mmsplus<l_rmatrix,rmatrix_slice,l_rmatrix>(m,ms); } 01290 INLINE l_rmatrix operator +(const rmatrix_slice &ms,const l_rmatrix &m) 01291 #if(CXSC_INDEX_CHECK) 01292 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01293 #else 01294 throw() 01295 #endif 01296 { return _mmsplus<l_rmatrix,rmatrix_slice,l_rmatrix>(m,ms); } 01297 INLINE l_rmatrix operator +(const l_rmatrix_slice &ms,const rmatrix &m) 01298 #if(CXSC_INDEX_CHECK) 01299 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01300 #else 01301 throw() 01302 #endif 01303 { return _mmsplus<rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01304 INLINE l_rmatrix operator +(const rmatrix_slice &m1,const l_rmatrix_slice &m2) 01305 #if(CXSC_INDEX_CHECK) 01306 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01307 #else 01308 throw() 01309 #endif 01310 { return _msmsplus<rmatrix_slice,l_rmatrix_slice,l_rmatrix>(m1,m2); } 01311 INLINE l_rmatrix operator +(const l_rmatrix_slice &m1,const rmatrix_slice &m2) 01312 #if(CXSC_INDEX_CHECK) 01313 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01314 #else 01315 throw() 01316 #endif 01317 { return _msmsplus<rmatrix_slice,l_rmatrix_slice,l_rmatrix>(m2,m1); } 01318 INLINE l_rmatrix &operator +=(l_rmatrix &m1,const rmatrix &m2) 01319 #if(CXSC_INDEX_CHECK) 01320 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01321 #else 01322 throw() 01323 #endif 01324 { return _mmplusassign(m1,m2); } 01325 INLINE l_rmatrix &operator +=(l_rmatrix &m1,const rmatrix_slice &ms) 01326 #if(CXSC_INDEX_CHECK) 01327 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01328 #else 01329 throw() 01330 #endif 01331 { return _mmsplusassign(m1,ms); } 01332 INLINE l_rmatrix_slice &l_rmatrix_slice::operator +=(const rmatrix &m1) 01333 #if(CXSC_INDEX_CHECK) 01334 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01335 #else 01336 throw() 01337 #endif 01338 { return _msmplusassign(*this,m1); } 01339 INLINE l_rmatrix_slice &l_rmatrix_slice::operator +=(const rmatrix_slice &ms2) 01340 #if(CXSC_INDEX_CHECK) 01341 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01342 #else 01343 throw() 01344 #endif 01345 { return _msmsplusassign(*this,ms2); } 01346 INLINE l_rmatrix operator -(const rmatrix &m1,const l_rmatrix &m2) 01347 #if(CXSC_INDEX_CHECK) 01348 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01349 #else 01350 throw() 01351 #endif 01352 { return _mmminus<rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01353 INLINE l_rmatrix operator -(const l_rmatrix &m1,const rmatrix &m2) 01354 #if(CXSC_INDEX_CHECK) 01355 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01356 #else 01357 throw() 01358 #endif 01359 { return _mmminus<l_rmatrix,rmatrix,l_rmatrix>(m1,m2); } 01360 INLINE l_rmatrix operator -(const rmatrix &m,const l_rmatrix_slice &ms) 01361 #if(CXSC_INDEX_CHECK) 01362 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01363 #else 01364 throw() 01365 #endif 01366 { return _mmsminus<rmatrix,l_rmatrix_slice,l_rmatrix>(m,ms); } 01367 INLINE l_rmatrix operator -(const l_rmatrix &m,const rmatrix_slice &ms) 01368 #if(CXSC_INDEX_CHECK) 01369 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01370 #else 01371 throw() 01372 #endif 01373 { return _mmsminus<l_rmatrix,rmatrix_slice,l_rmatrix>(m,ms); } 01374 INLINE l_rmatrix operator -(const rmatrix_slice &ms,const l_rmatrix &m) 01375 #if(CXSC_INDEX_CHECK) 01376 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01377 #else 01378 throw() 01379 #endif 01380 { return _msmminus<rmatrix_slice,l_rmatrix,l_rmatrix>(ms,m); } 01381 INLINE l_rmatrix operator -(const l_rmatrix_slice &ms,const rmatrix &m) 01382 #if(CXSC_INDEX_CHECK) 01383 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01384 #else 01385 throw() 01386 #endif 01387 { return _msmminus<l_rmatrix_slice,rmatrix,l_rmatrix>(ms,m); } 01388 INLINE l_rmatrix operator -(const rmatrix_slice &ms1,const l_rmatrix_slice &ms2) 01389 #if(CXSC_INDEX_CHECK) 01390 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01391 #else 01392 throw() 01393 #endif 01394 { return _msmsminus<rmatrix_slice,l_rmatrix_slice,l_rmatrix>(ms1,ms2); } 01395 INLINE l_rmatrix operator -(const l_rmatrix_slice &ms1,const rmatrix_slice &ms2) 01396 #if(CXSC_INDEX_CHECK) 01397 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01398 #else 01399 throw() 01400 #endif 01401 { return _msmsminus<l_rmatrix_slice,rmatrix_slice,l_rmatrix>(ms1,ms2); } 01402 INLINE l_rmatrix &operator -=(l_rmatrix &m1,const rmatrix &m2) 01403 #if(CXSC_INDEX_CHECK) 01404 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01405 #else 01406 throw() 01407 #endif 01408 { return _mmminusassign(m1,m2); } 01409 INLINE l_rmatrix &operator -=(l_rmatrix &m1,const rmatrix_slice &ms) 01410 #if(CXSC_INDEX_CHECK) 01411 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01412 #else 01413 throw() 01414 #endif 01415 { return _mmsminusassign(m1,ms); } 01416 INLINE l_rmatrix_slice &l_rmatrix_slice::operator -=(const rmatrix &m1) 01417 #if(CXSC_INDEX_CHECK) 01418 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01419 #else 01420 throw() 01421 #endif 01422 { return _msmminusassign(*this,m1); } 01423 INLINE l_rmatrix_slice &l_rmatrix_slice::operator -=(const rmatrix_slice &ms2) 01424 #if(CXSC_INDEX_CHECK) 01425 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01426 #else 01427 throw() 01428 #endif 01429 { return _msmsminusassign(*this,ms2); } 01430 INLINE l_rmatrix operator *(const rmatrix &m1, const l_rmatrix &m2) 01431 #if(CXSC_INDEX_CHECK) 01432 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01433 #else 01434 throw() 01435 #endif 01436 { return _mmlmult<rmatrix,l_rmatrix,l_rmatrix>(m1,m2); } 01437 INLINE l_rmatrix operator *(const l_rmatrix &m1, const rmatrix &m2) 01438 #if(CXSC_INDEX_CHECK) 01439 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01440 #else 01441 throw() 01442 #endif 01443 { return _mmlmult<l_rmatrix,rmatrix,l_rmatrix>(m1,m2); } 01444 INLINE l_rmatrix operator *(const rmatrix &m1, const l_rmatrix_slice &ms) 01445 #if(CXSC_INDEX_CHECK) 01446 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01447 #else 01448 throw() 01449 #endif 01450 { return _mmslmult<rmatrix,l_rmatrix_slice,l_rmatrix>(m1,ms); } 01451 INLINE l_rmatrix operator *(const l_rmatrix &m1, const rmatrix_slice &ms) 01452 #if(CXSC_INDEX_CHECK) 01453 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01454 #else 01455 throw() 01456 #endif 01457 { return _mmslmult<l_rmatrix,rmatrix_slice,l_rmatrix>(m1,ms); } 01458 INLINE l_rmatrix operator *(const rmatrix_slice &ms, const l_rmatrix &m1) 01459 #if(CXSC_INDEX_CHECK) 01460 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01461 #else 01462 throw() 01463 #endif 01464 { return _msmlmult<rmatrix_slice,l_rmatrix,l_rmatrix>(ms,m1); } 01465 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms, const rmatrix &m1) 01466 #if(CXSC_INDEX_CHECK) 01467 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01468 #else 01469 throw() 01470 #endif 01471 { return _msmlmult<l_rmatrix_slice,rmatrix,l_rmatrix>(ms,m1); } 01472 INLINE l_rmatrix operator *(const rmatrix_slice &ms1, const l_rmatrix_slice &ms2) 01473 #if(CXSC_INDEX_CHECK) 01474 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01475 #else 01476 throw() 01477 #endif 01478 { return _msmslmult<rmatrix_slice,l_rmatrix_slice,l_rmatrix>(ms1,ms2); } 01479 INLINE l_rmatrix operator *(const l_rmatrix_slice &ms1, const rmatrix_slice &ms2) 01480 #if(CXSC_INDEX_CHECK) 01481 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01482 #else 01483 throw() 01484 #endif 01485 { return _msmslmult<l_rmatrix_slice,rmatrix_slice,l_rmatrix>(ms1,ms2); } 01486 INLINE l_rmatrix &operator *=(l_rmatrix &m1,const rmatrix &m2) 01487 #if(CXSC_INDEX_CHECK) 01488 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01489 #else 01490 throw() 01491 #endif 01492 { return _mmlmultassign<l_rmatrix,rmatrix,l_real>(m1,m2); } 01493 INLINE l_rmatrix &operator *=(l_rmatrix &m1,const rmatrix_slice &ms) 01494 #if(CXSC_INDEX_CHECK) 01495 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 01496 #else 01497 throw() 01498 #endif 01499 { return _mmslmultassign<l_rmatrix,rmatrix_slice,l_real>(m1,ms); } 01500 INLINE bool operator ==(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmeq(m1,m2); } 01501 INLINE bool operator !=(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmneq(m1,m2); } 01502 INLINE bool operator <(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmless(m1,m2); } 01503 INLINE bool operator <=(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmleq(m1,m2); } 01504 INLINE bool operator >(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmless(m2,m1); } 01505 INLINE bool operator >=(const l_rmatrix &m1,const l_rmatrix &m2) throw() { return _mmleq(m2,m1); } 01506 INLINE bool operator ==(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _mmseq(m1,ms); } 01507 INLINE bool operator !=(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _mmsneq(m1,ms); } 01508 INLINE bool operator <(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _mmsless(m1,ms); } 01509 INLINE bool operator <=(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _mmsleq(m1,ms); } 01510 INLINE bool operator >(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _msmless(ms,m1); } 01511 INLINE bool operator >=(const l_rmatrix &m1,const l_rmatrix_slice &ms) throw() { return _msmleq(ms,m1); } 01512 INLINE bool operator ==(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmseq(m1,m2); } 01513 INLINE bool operator !=(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmsneq(m1,m2); } 01514 INLINE bool operator <(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmsless(m1,m2); } 01515 INLINE bool operator <=(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmsleq(m1,m2); } 01516 INLINE bool operator >(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmsless(m2,m1); } 01517 INLINE bool operator >=(const l_rmatrix_slice &m1,const l_rmatrix_slice &m2) throw() { return _msmsleq(m2,m1); } 01518 INLINE bool operator !(const l_rmatrix &ms) throw() { return _mnot(ms); } 01519 INLINE bool operator !(const l_rmatrix_slice &ms) throw() { return _msnot(ms); } 01520 INLINE std::ostream &operator <<(std::ostream &s,const l_rmatrix &r) throw() { return _mout(s,r); } 01521 INLINE std::ostream &operator <<(std::ostream &s,const l_rmatrix_slice &r) throw() { return _msout(s,r); } 01522 INLINE std::istream &operator >>(std::istream &s,l_rmatrix &r) throw() { return _min(s,r); } 01523 INLINE std::istream &operator >>(std::istream &s,l_rmatrix_slice &r) throw() { return _msin(s,r); } 01524 01525 } // namespace cxsc 01526 01527 #endif 01528