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: liveclrmat.inl,v 1.25 2014/01/30 17:23:47 cxsc Exp $ */ 00025 00026 // Here are definitions for l_ivector x l_rmatrix-Functions 00027 #ifndef _CXSC_LIVECLRMAT_INL_INCLUDED 00028 #define _CXSC_LIVECLRMAT_INL_INCLUDED 00029 00030 namespace cxsc { 00031 00032 INLINE l_ivector::l_ivector(const l_rmatrix &sl) 00033 #if(CXSC_INDEX_CHECK) 00034 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00035 #else 00036 throw() 00037 #endif 00038 { _vmconstr<l_ivector,l_rmatrix,l_interval>(*this,sl); } 00039 INLINE l_ivector::l_ivector(const l_rmatrix_slice &sl) 00040 #if(CXSC_INDEX_CHECK) 00041 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00042 #else 00043 throw() 00044 #endif 00045 { _vmsconstr<l_ivector,l_rmatrix_slice,l_interval>(*this,sl); } 00046 INLINE l_ivector::l_ivector(const l_rmatrix_subv &v) throw():l(v.lb),u(v.ub),size(v.size) 00047 { 00048 dat=new l_interval[size]; 00049 for (int i=0, j=v.start;i<v.size;i++,j+=v.offset) 00050 dat[i]=v.dat[j]; 00051 } 00057 INLINE l_ivector _l_ivector(const l_rmatrix &sl) 00058 #if(CXSC_INDEX_CHECK) 00059 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00060 #else 00061 throw() 00062 #endif 00063 { return l_ivector(sl); } 00069 INLINE l_ivector _l_ivector(const l_rmatrix_slice &sl) 00070 #if(CXSC_INDEX_CHECK) 00071 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00072 #else 00073 throw() 00074 #endif 00075 { return l_ivector(sl); } 00076 00077 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const l_ivector &rv2) 00078 #if(CXSC_INDEX_CHECK) 00079 throw(OP_WITH_WRONG_DIM) 00080 #else 00081 throw() 00082 #endif 00083 { _vmvaccu<idotprecision,l_ivector,l_rmatrix_subv>(dp,rv2,rv1); } 00084 INLINE void accumulate(idotprecision &dp, const l_ivector & rv1, const l_rmatrix_subv &rv2) 00085 #if(CXSC_INDEX_CHECK) 00086 throw(OP_WITH_WRONG_DIM) 00087 #else 00088 throw() 00089 #endif 00090 { _vmvaccu<idotprecision,l_ivector,l_rmatrix_subv>(dp,rv1,rv2); } 00091 00092 INLINE void accumulate(idotprecision &dp, const l_rmatrix_subv & rv1, const l_ivector_slice &rv2) 00093 #if(CXSC_INDEX_CHECK) 00094 throw(OP_WITH_WRONG_DIM) 00095 #else 00096 throw() 00097 #endif 00098 { _vmvaccu<idotprecision,l_ivector,l_rmatrix_subv>(dp,l_ivector(rv2),rv1); } 00099 INLINE void accumulate(idotprecision &dp, const l_ivector_slice & rv1, const l_rmatrix_subv &rv2) 00100 #if(CXSC_INDEX_CHECK) 00101 throw(OP_WITH_WRONG_DIM) 00102 #else 00103 throw() 00104 #endif 00105 { _vmvaccu<idotprecision,l_ivector,l_rmatrix_subv>(dp,l_ivector(rv1),rv2); } 00106 00107 INLINE void SetInf(l_ivector &iv,const l_rmatrix_subv &rv) 00108 #if(CXSC_INDEX_CHECK) 00109 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00110 #else 00111 throw() 00112 #endif 00113 { _vmvsetinf(iv,rv); } 00114 INLINE void SetSup(l_ivector &iv,const l_rmatrix_subv &rv) 00115 #if(CXSC_INDEX_CHECK) 00116 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00117 #else 00118 throw() 00119 #endif 00120 { _vmvsetsup(iv,rv); } 00121 INLINE void SetInf(l_ivector_slice &iv,const l_rmatrix_subv &rv) 00122 #if(CXSC_INDEX_CHECK) 00123 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00124 #else 00125 throw() 00126 #endif 00127 { _vsvsetinf(iv,l_rvector(rv)); } 00128 INLINE void SetSup(l_ivector_slice &iv,const l_rmatrix_subv &rv) 00129 #if(CXSC_INDEX_CHECK) 00130 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00131 #else 00132 throw() 00133 #endif 00134 { _vsvsetsup(iv,l_rvector(rv)); } 00135 00136 INLINE void UncheckedSetInf(l_ivector &iv,const l_rmatrix_subv &rv) 00137 #if(CXSC_INDEX_CHECK) 00138 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00139 #else 00140 throw() 00141 #endif 00142 { _vmvusetinf(iv,rv); } 00143 INLINE void UncheckedSetSup(l_ivector &iv,const l_rmatrix_subv &rv) 00144 #if(CXSC_INDEX_CHECK) 00145 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00146 #else 00147 throw() 00148 #endif 00149 { _vmvusetsup(iv,rv); } 00150 INLINE void UncheckedSetInf(l_ivector_slice &iv,const l_rmatrix_subv &rv) 00151 #if(CXSC_INDEX_CHECK) 00152 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00153 #else 00154 throw() 00155 #endif 00156 { _vsvusetinf(iv,l_rvector(rv)); } 00157 INLINE void UncheckedSetSup(l_ivector_slice &iv,const l_rmatrix_subv &rv) 00158 #if(CXSC_INDEX_CHECK) 00159 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00160 #else 00161 throw() 00162 #endif 00163 { _vsvusetsup(iv,l_rvector(rv)); } 00164 00165 INLINE l_ivector &l_ivector::operator =(const l_rmatrix_subv &mv) throw() { return _vmvassign<l_ivector,l_rmatrix_subv,l_interval>(*this,mv); } 00166 INLINE l_ivector_slice &l_ivector_slice::operator =(const l_rmatrix_subv &mv) throw() { return _vsvassign(*this,l_rvector(mv)); } 00167 INLINE l_ivector &l_ivector::operator =(const l_rmatrix &m) 00168 #if(CXSC_INDEX_CHECK) 00169 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00170 #else 00171 throw() 00172 #endif 00173 { return _vmassign<l_ivector,l_rmatrix,l_interval>(*this,m); } 00174 INLINE l_ivector &l_ivector::operator =(const l_rmatrix_slice &m) 00175 #if(CXSC_INDEX_CHECK) 00176 throw(ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00177 #else 00178 throw() 00179 #endif 00180 { return _vmassign<l_ivector,l_rmatrix,l_interval>(*this,l_rmatrix(m)); } 00181 INLINE l_ivector_slice &l_ivector_slice::operator =(const l_rmatrix &m) 00182 #if(CXSC_INDEX_CHECK) 00183 throw(ERROR__OP_WITH_WRONG_DIM<l_rvector>,ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00184 #else 00185 throw() 00186 #endif 00187 { return _vsvassign(*this,l_rvector(m)); } 00188 INLINE l_ivector_slice & l_ivector_slice::operator =(const l_rmatrix_slice &m) 00189 #if(CXSC_INDEX_CHECK) 00190 throw(ERROR__OP_WITH_WRONG_DIM<l_rvector>,ERROR_LRMATRIX_TYPE_CAST_OF_THICK_OBJ) 00191 #else 00192 throw() 00193 #endif 00194 { return _vsvassign(*this,l_ivector(l_rmatrix(m))); } 00195 00196 INLINE l_ivector operator *(const l_rmatrix &m,const l_ivector &v) 00197 #if(CXSC_INDEX_CHECK) 00198 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00199 #else 00200 throw() 00201 #endif 00202 { return _mvlimult<l_rmatrix,l_ivector,l_ivector>(m,v); } 00203 INLINE l_ivector operator *(const l_rmatrix_slice &ms,const l_ivector &v) 00204 #if(CXSC_INDEX_CHECK) 00205 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00206 #else 00207 throw() 00208 #endif 00209 { return _msvlimult<l_rmatrix_slice,l_ivector,l_ivector>(ms,v); } 00210 INLINE l_ivector operator *(const l_ivector &v,const l_rmatrix &m) 00211 #if(CXSC_INDEX_CHECK) 00212 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00213 #else 00214 throw() 00215 #endif 00216 { return _vmlimult<l_ivector,l_rmatrix,l_ivector>(v,m); } 00217 INLINE l_ivector operator *(const l_ivector &v,const l_rmatrix_slice &ms) 00218 #if(CXSC_INDEX_CHECK) 00219 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00220 #else 00221 throw() 00222 #endif 00223 { return _vmslimult<l_ivector,l_rmatrix_slice,l_ivector>(v,ms); } 00224 INLINE l_ivector &operator *=(l_ivector &v,const l_rmatrix &m) 00225 #if(CXSC_INDEX_CHECK) 00226 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00227 #else 00228 throw() 00229 #endif 00230 { return _vmlimultassign<l_ivector,l_rmatrix,l_interval>(v,m); } 00231 INLINE l_ivector &operator *=(l_ivector &v,const l_rmatrix_slice &ms) 00232 #if(CXSC_INDEX_CHECK) 00233 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00234 #else 00235 throw() 00236 #endif 00237 { return _vmslimultassign<l_ivector,l_rmatrix_slice,l_interval>(v,ms); } 00238 00239 INLINE l_ivector operator *(const l_ivector_slice &v,const l_rmatrix &m) 00240 #if(CXSC_INDEX_CHECK) 00241 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00242 #else 00243 throw() 00244 #endif 00245 { return _vmlimult<l_ivector,l_rmatrix,l_ivector>(l_ivector(v),m); } 00246 INLINE l_ivector_slice &l_ivector_slice::operator *=(const l_rmatrix &m) 00247 #if(CXSC_INDEX_CHECK) 00248 throw(ERROR_LRMATRIX_OP_WITH_WRONG_DIM) 00249 #else 00250 throw() 00251 #endif 00252 { return _vsmlimultassign<l_ivector_slice,l_rmatrix,l_interval>(*this,m); } 00253 00254 INLINE l_ivector operator *(const ivector &v,const l_rmatrix &m) 00255 #if(CXSC_INDEX_CHECK) 00256 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00257 #else 00258 throw() 00259 #endif 00260 { return _vmlimult<ivector,l_rmatrix,l_ivector>(v,m); } 00261 INLINE l_ivector operator *(const ivector &v,const l_rmatrix_slice &ms) 00262 #if(CXSC_INDEX_CHECK) 00263 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00264 #else 00265 throw() 00266 #endif 00267 { return _vmslimult<ivector,l_rmatrix_slice,l_ivector>(v,ms); } 00268 INLINE l_ivector operator *(const ivector_slice &v,const l_rmatrix &m) 00269 #if(CXSC_INDEX_CHECK) 00270 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00271 #else 00272 throw() 00273 #endif 00274 { return _vmlimult<l_ivector,l_rmatrix,l_ivector>(l_ivector(v),m); } 00275 INLINE l_ivector operator *(const l_rmatrix &m,const ivector &v) 00276 #if(CXSC_INDEX_CHECK) 00277 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00278 #else 00279 throw() 00280 #endif 00281 { return _mvlimult<l_rmatrix,ivector,l_ivector>(m,v); } 00282 INLINE l_ivector operator *(const l_rmatrix_slice &ms,const ivector &v) 00283 #if(CXSC_INDEX_CHECK) 00284 throw(ERROR_LIMATRIX_OP_WITH_WRONG_DIM) 00285 #else 00286 throw() 00287 #endif 00288 { return _msvlimult<l_rmatrix_slice,ivector,l_ivector>(ms,v); } 00289 00290 } // namespace cxsc 00291 00292 #endif 00293