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 #ifndef _CXSC_CVECTOR_INL_INCLUDED
00027 #define _CXSC_CVECTOR_INL_INCLUDED
00028
00029 namespace cxsc {
00030
00031 INLINE cvector::cvector () throw():dat(NULL),l(1),u(0),size(0)
00032 {
00033 }
00034
00035 INLINE cvector::cvector(const int &i) throw():l(1),u(i),size(i)
00036 {
00037 dat=new complex[i];
00038 }
00039
00040 #ifdef OLD_CXSC
00041 INLINE cvector::cvector(const class index &i) throw():l(1),u(i._int()),size(i._int())
00042 {
00043 dat=new complex[i._int()];
00044 }
00045 #endif
00046
00047 INLINE cvector::cvector(const int &i1,const int &i2)
00048 #if(CXSC_INDEX_CHECK)
00049 throw(ERROR_CVECTOR_WRONG_BOUNDARIES,ERROR_CVECTOR_NO_MORE_MEMORY):l(i1),u(i2),size(i2-i1+1)
00050 #else
00051 throw():l(i1),u(i2),size(i2-i1+1)
00052 #endif
00053 {
00054 #if(CXSC_INDEX_CHECK)
00055 if(i1>i2) cxscthrow(ERROR_CVECTOR_WRONG_BOUNDARIES("cvector::cvector(const int &i1,const int &i2)"));
00056 #endif
00057 dat=new complex[size];
00058 }
00059
00060 INLINE cvector::cvector(const cvector_slice &rs) throw():l(rs.start),u(rs.end),size(rs.end-rs.start+1)
00061 {
00062 dat=new complex[size];
00063 for(int i=0, j=l-rs.l;i<size;i++,j++)
00064 dat[i]=rs.dat[j];
00065 }
00066
00067 INLINE cvector::cvector(const cvector &v) throw():l(v.l),u(v.u),size(v.size)
00068 {
00069 dat=new complex[size];
00070 for (int i=0;i<size;i++)
00071 dat[i]=v.dat[i];
00072 }
00073
00074 INLINE cvector::cvector(const complex &r) throw():l(1),u(1),size(1)
00075 {
00076 dat=new complex[1];
00077 *dat=r;
00078 }
00079
00080 INLINE cvector::cvector(const rvector_slice &rs) throw():l(rs.start),u(rs.end),size(rs.end-rs.start+1)
00081 {
00082 dat=new complex[size];
00083 for(int i=0, j=l-rs.l;i<size;i++,j++)
00084 dat[i]=rs.dat[j];
00085 }
00086
00087 INLINE cvector::cvector(const rvector &v) throw():l(v.l),u(v.u),size(v.size)
00088 {
00089 dat=new complex[size];
00090 for (int i=0;i<size;i++)
00091 dat[i]=v.dat[i];
00092 }
00093
00094 INLINE cvector::cvector(const real &r) throw():l(1),u(1),size(1)
00095 {
00096 dat=new complex[1];
00097 *dat=r;
00098 }
00099
00100 INLINE complex & cvector_slice::operator [](const int &i) const
00101 #if(CXSC_INDEX_CHECK)
00102 throw(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC)
00103 #else
00104 throw()
00105 #endif
00106 {
00107 #if(CXSC_INDEX_CHECK)
00108 if(i<start||i>end) cxscthrow(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC("complex & cvector_slice::operator [](const int &i) const"));
00109 #endif
00110 return dat[i-l];
00111 }
00112
00113 INLINE complex & cvector_slice::operator [](const int &i)
00114 #if(CXSC_INDEX_CHECK)
00115 throw(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC)
00116 #else
00117 throw()
00118 #endif
00119 {
00120 #if(CXSC_INDEX_CHECK)
00121 if(i<start||i>end) cxscthrow(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC("complex & cvector_slice::operator [](const int &i)"));
00122 #endif
00123 return dat[i-l];
00124 }
00125
00126 INLINE complex & cvector::operator [](const int &i) const
00127 #if(CXSC_INDEX_CHECK)
00128 throw(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC)
00129 #else
00130 throw()
00131 #endif
00132 {
00133 #if(CXSC_INDEX_CHECK)
00134 if(i<l||i>u) cxscthrow(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC("complex & cvector::operator [](const int &i) const"));
00135 #endif
00136 return dat[i-l];
00137 }
00138
00139 INLINE complex & cvector::operator [](const int &i)
00140 #if(CXSC_INDEX_CHECK)
00141 throw(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC)
00142 #else
00143 throw()
00144 #endif
00145 {
00146 #if(CXSC_INDEX_CHECK)
00147 if(i<l||i>u) cxscthrow(ERROR_CVECTOR_ELEMENT_NOT_IN_VEC("complex & cvector::operator [](const int &i)"));
00148 #endif
00149 return dat[i-l];
00150 }
00151
00152
00159 INLINE cvector_slice cvector::operator ()(const int &i)
00160 #if(CXSC_INDEX_CHECK)
00161 throw(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG)
00162 #else
00163 throw()
00164 #endif
00165 {
00166 #if(CXSC_INDEX_CHECK)
00167 if(1<l||i>u) cxscthrow(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG("cvector_slice cvector::operator ()(const int &i)"));
00168 #endif
00169 return cvector_slice(*this,1,i);
00170 }
00171
00179 INLINE cvector_slice cvector::operator ()(const int &i1,const int &i2)
00180 #if(CXSC_INDEX_CHECK)
00181 throw(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG)
00182 #else
00183 throw()
00184 #endif
00185 {
00186 #if(CXSC_INDEX_CHECK)
00187 if(i1<l||i2>u) cxscthrow(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG("cvector_slice cvector::operator ()(const int &i1,const int &i2)"));
00188 #endif
00189 return cvector_slice(*this,i1,i2);
00190 }
00191
00192 INLINE cvector_slice cvector_slice::operator ()(const int &i)
00193 #if(CXSC_INDEX_CHECK)
00194 throw(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG)
00195 #else
00196 throw()
00197 #endif
00198 {
00199 #if(CXSC_INDEX_CHECK)
00200 if(1<start||i>end) cxscthrow(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG("cvector_slice cvector_slice::operator ()(const int &i)"));
00201 #endif
00202 return cvector_slice(*this,1,i);
00203 }
00204
00205 INLINE cvector_slice cvector_slice::operator ()(const int &i1,const int &i2)
00206 #if(CXSC_INDEX_CHECK)
00207 throw(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG)
00208 #else
00209 throw()
00210 #endif
00211 {
00212 #if(CXSC_INDEX_CHECK)
00213 if(i1<start||i2>end) cxscthrow(ERROR_CVECTOR_SUB_ARRAY_TOO_BIG("cvector_slice cvector_slice::operator ()(const int &i1,const int &i2)"));
00214 #endif
00215 return cvector_slice(*this,i1,i2);
00216 }
00217
00218 INLINE complex::complex(const cvector &rv)
00219 #if(CXSC_INDEX_CHECK)
00220 throw(ERROR_CVECTOR_TYPE_CAST_OF_THICK_OBJ,ERROR_CVECTOR_USE_OF_UNINITIALIZED_OBJ)
00221 #else
00222 throw()
00223 #endif
00224 {
00225 #if(CXSC_INDEX_CHECK)
00226 if(rv.size>1) cxscthrow(ERROR_CVECTOR_TYPE_CAST_OF_THICK_OBJ("complex::complex(const cvector &rv)"));
00227 else if(rv.size<1) cxscthrow(ERROR_CVECTOR_USE_OF_UNINITIALIZED_OBJ("complex::complex(const cvector &rv)"));
00228 #endif
00229 *this=rv.dat[0];
00230 }
00231
00232 INLINE complex::complex(const cvector_slice &sl)
00233 #if(CXSC_INDEX_CHECK)
00234 throw(ERROR_CVECTOR_TYPE_CAST_OF_THICK_OBJ,ERROR_CVECTOR_USE_OF_UNINITIALIZED_OBJ)
00235 #else
00236 throw()
00237 #endif
00238 {
00239 #if(CXSC_INDEX_CHECK)
00240 if(sl.size>1) cxscthrow(ERROR_CVECTOR_TYPE_CAST_OF_THICK_OBJ("complex::complex(const cvector_slice &sl)"));
00241 else if(sl.size<1) cxscthrow(ERROR_CVECTOR_USE_OF_UNINITIALIZED_OBJ("complex::complex(const cvector_slice &sl)"));
00242 #endif
00243 *this=sl.dat[sl.start-sl.l];
00244 }
00245
00251 INLINE cvector _cvector(const complex &r) throw() { return cvector(r); }
00257 INLINE cvector _cvector(const real &r) throw() { return cvector(r); }
00263 INLINE cvector _cvector(const rvector_slice &rs) throw() { return cvector(rs); }
00269 INLINE cvector _cvector(const rvector &rs) throw() { return cvector(rs); }
00275 INLINE cvector _cvector(const rmatrix_subv &rs) throw() { return cvector(rs); }
00276 INLINE cvector &cvector::operator =(const cvector &rv) throw() { return _vvassign<cvector,cvector,complex>(*this,rv); }
00277 INLINE cvector &cvector::operator =(const complex &r) throw() { return _vsassign<cvector,complex>(*this,r); }
00278 INLINE cvector &cvector::operator =(const rvector &rv) throw() { return _vvassign<cvector,rvector,complex>(*this,rv); }
00279 INLINE cvector &cvector::operator =(const real &r) throw() { return _vsassign<cvector,real>(*this,r); }
00280 INLINE cvector::operator void*() throw() { return _vvoid(*this); }
00281 INLINE cvector_slice & cvector_slice::operator =(const cvector_slice &sl)
00282 #if(CXSC_INDEX_CHECK)
00283 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00284 #else
00285 throw()
00286 #endif
00287 { return _vsvsassign(*this,sl); }
00288 INLINE cvector_slice & cvector_slice::operator =(const cvector &rv)
00289 #if(CXSC_INDEX_CHECK)
00290 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00291 #else
00292 throw()
00293 #endif
00294 { return _vsvassign(*this,rv); }
00295 INLINE cvector_slice & cvector_slice::operator =(const complex &r) throw() { return _vssassign<cvector_slice,complex>(*this,r); }
00296 INLINE cvector_slice & cvector_slice::operator =(const cmatrix &m)
00297 #if(CXSC_INDEX_CHECK)
00298 throw(ERROR__OP_WITH_WRONG_DIM<cvector>,ERROR_CMATRIX_TYPE_CAST_OF_THICK_OBJ)
00299 #else
00300 throw()
00301 #endif
00302 { return _vsvassign(*this,cvector(m)); }
00303 INLINE cvector_slice & cvector_slice::operator =(const rvector_slice &sl)
00304 #if(CXSC_INDEX_CHECK)
00305 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00306 #else
00307 throw()
00308 #endif
00309 { return _vsvsassign(*this,sl); }
00310 INLINE cvector_slice & cvector_slice::operator =(const rvector &rv)
00311 #if(CXSC_INDEX_CHECK)
00312 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00313 #else
00314 throw()
00315 #endif
00316 { return _vsvassign(*this,rv); }
00317 INLINE cvector_slice & cvector_slice::operator =(const real &r) throw() { return _vssassign(*this,r); }
00318 INLINE cvector_slice::operator void*() throw() { return _vsvoid(*this); }
00319
00320
00321
00322
00323 INLINE cvector &SetRe(cvector &iv,const rvector &rv)
00324 #if(CXSC_INDEX_CHECK)
00325 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00326 #else
00327 throw()
00328 #endif
00329 { return iv;}
00330 INLINE cvector_slice &SetRe(cvector_slice &iv,const rvector &rv)
00331 #if(CXSC_INDEX_CHECK)
00332 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00333 #else
00334 throw()
00335 #endif
00336 { return _vsvsetre(iv,rv); }
00337 INLINE cvector &SetRe(cvector &iv,const rvector_slice &rv)
00338 #if(CXSC_INDEX_CHECK)
00339 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00340 #else
00341 throw()
00342 #endif
00343 { return _vvssetre(iv,rv); }
00344 INLINE cvector_slice &SetRe(cvector_slice &iv,const rvector_slice &rv)
00345 #if(CXSC_INDEX_CHECK)
00346 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00347 #else
00348 throw()
00349 #endif
00350 { return _vsvssetre(iv,rv); }
00351
00352 INLINE cvector &SetIm(cvector &iv,const rvector &rv)
00353 #if(CXSC_INDEX_CHECK)
00354 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00355 #else
00356 throw()
00357 #endif
00358 { return _vvsetim(iv,rv); }
00359 INLINE cvector_slice &SetIm(cvector_slice &iv,const rvector &rv)
00360 #if(CXSC_INDEX_CHECK)
00361 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00362 #else
00363 throw()
00364 #endif
00365 { return _vsvsetim(iv,rv); }
00366 INLINE cvector &SetIm(cvector &iv,const rvector_slice &rv)
00367 #if(CXSC_INDEX_CHECK)
00368 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00369 #else
00370 throw()
00371 #endif
00372 { return _vvssetim(iv,rv); }
00373 INLINE cvector_slice &SetIm(cvector_slice &iv,const rvector_slice &rv)
00374 #if(CXSC_INDEX_CHECK)
00375 throw(ERROR_CMATRIX_OP_WITH_WRONG_DIM)
00376 #else
00377 throw()
00378 #endif
00379 { return _vsvssetim(iv,rv); }
00380
00381 INLINE cvector &SetRe(cvector &iv,const real &r) throw() { return _vssetre(iv,r); }
00382 INLINE cvector &SetIm(cvector &iv,const real &r) throw() { return _vssetim(iv,r); }
00383 INLINE cvector_slice &SetRe(cvector_slice &iv,const real &r) throw() { return _vsssetre(iv,r); }
00384 INLINE cvector_slice &SetIm(cvector_slice &iv,const real &r) throw() { return _vsssetim(iv,r); }
00385
00386 INLINE void Resize(cvector &rv) throw() { _vresize(rv); }
00387 INLINE void Resize(cvector &rv, const int &len)
00388 #if(CXSC_INDEX_CHECK)
00389 throw(ERROR__WRONG_BOUNDARIES<cvector>)
00390 #else
00391 throw()
00392 #endif
00393 { _vresize<class cvector,class complex>(rv,len); }
00394 INLINE void Resize(cvector &rv, const int &lb, const int &ub)
00395 #if(CXSC_INDEX_CHECK)
00396 throw(ERROR__WRONG_BOUNDARIES<cvector>)
00397 #else
00398 throw()
00399 #endif
00400 { _vresize<class cvector,class complex>(rv,lb,ub); }
00401
00402 INLINE cvector conj(const cvector &rv) throw() { return _vconj<cvector>(rv); }
00403 INLINE cvector conj(const cvector_slice &sl) throw() { return _vsconj<cvector_slice,cvector>(sl); }
00404
00405 INLINE rvector abs(const cvector &rv) throw() { return _vabs<cvector,rvector>(rv); }
00406 INLINE rvector abs(const cvector_slice &sl) throw() { return _vsabs<cvector_slice,rvector>(sl); }
00407 INLINE rvector Im(const cvector &v) throw() { return _vim<cvector,rvector>(v); }
00408 INLINE rvector Im(const cvector_slice &v) throw() { return _vsim<cvector_slice,rvector>(v); }
00409 INLINE rvector Re(const cvector &v) throw() { return _vre<cvector,rvector>(v); }
00410 INLINE rvector Re(const cvector_slice &v) throw() { return _vsre<cvector_slice,rvector>(v); }
00411 INLINE bool operator !(const cvector &rv) throw() { return _vnot(rv); }
00412 INLINE bool operator !(const cvector_slice &sl) throw() { return _vsnot(sl); }
00413
00414
00415
00416
00417
00418 INLINE cvector operator *(const cvector &rv, const complex &s) throw() { return _vsmult<cvector,complex,cvector>(rv,s); }
00419 INLINE cvector operator *(const cvector_slice &sl, const complex &s) throw() { return _vssmult<cvector_slice,complex,cvector>(sl,s); }
00420 INLINE cvector operator *(const complex &s, const cvector &rv) throw() { return _vsmult<cvector,complex,cvector>(rv,s); }
00421 INLINE cvector operator *(const complex &s, const cvector_slice &sl) throw() { return _vssmult<cvector_slice,complex,cvector>(sl,s); }
00422 INLINE cvector &operator *=(cvector &rv,const complex &r) throw() { return _vsmultassign(rv,r); }
00423 INLINE cvector_slice &cvector_slice::operator *=(const complex &r) throw() { return _vssmultassign(*this,r); }
00424
00425 INLINE cvector operator /(const cvector &rv, const complex &s) throw() { return _vsdiv<cvector,complex,cvector>(rv,s); }
00426 INLINE cvector operator /(const cvector_slice &sl, const complex &s) throw() { return _vssdiv<cvector_slice,complex,cvector>(sl,s); }
00427 INLINE cvector &operator /=(cvector &rv,const complex &r) throw() { return _vsdivassign(rv,r); }
00428 INLINE cvector_slice &cvector_slice::operator /=(const complex &r) throw() { return _vssdivassign(*this,r); }
00429
00430
00431
00432 INLINE cvector operator *(const cvector &rv, const real &s) throw() { return _vsmult<cvector,real,cvector>(rv,s); }
00433 INLINE cvector operator *(const cvector_slice &sl, const real &s) throw() { return _vssmult<cvector_slice,real,cvector>(sl,s); }
00434 INLINE cvector operator *(const real &s, const cvector &rv) throw() { return _vsmult<cvector,real,cvector>(rv,s); }
00435 INLINE cvector operator *(const real &s, const cvector_slice &sl) throw() { return _vssmult<cvector_slice,real,cvector>(sl,s); }
00436 INLINE cvector &operator *=(cvector &rv,const real &r) throw() { return _vsmultassign(rv,r); }
00437 INLINE cvector_slice &cvector_slice::operator *=(const real &r) throw() { return _vssmultassign(*this,r); }
00438
00439 INLINE cvector operator /(const cvector &rv, const real &s) throw() { return _vsdiv<cvector,real,cvector>(rv,s); }
00440 INLINE cvector operator /(const cvector_slice &sl, const real &s) throw() { return _vssdiv<cvector_slice,real,cvector>(sl,s); }
00441 INLINE cvector &operator /=(cvector &rv,const real &r) throw() { return _vsdivassign(rv,r); }
00442 INLINE cvector_slice &cvector_slice::operator /=(const real &r) throw() { return _vssdivassign(*this,r); }
00443
00444 INLINE cvector operator *(const rvector &rv, const complex &s) throw() { return _vsmult<rvector,complex,cvector>(rv,s); }
00445 INLINE cvector operator *(const rvector_slice &sl, const complex &s) throw() { return _vssmult<rvector_slice,complex,cvector>(sl,s); }
00446 INLINE cvector operator *(const complex &s, const rvector &rv) throw() { return _vsmult<rvector,complex,cvector>(rv,s); }
00447 INLINE cvector operator *(const complex &s, const rvector_slice &sl) throw() { return _vssmult<rvector_slice,complex,cvector>(sl,s); }
00448
00449 INLINE cvector operator /(const rvector &rv, const complex &s) throw() { return _vsdiv<rvector,complex,cvector>(rv,s); }
00450 INLINE cvector operator /(const rvector_slice &sl, const complex &s) throw() { return _vssdiv<rvector_slice,complex,cvector>(sl,s); }
00451
00452
00453
00454
00455 INLINE std::ostream &operator <<(std::ostream &s, const cvector &rv) throw() { return _vout(s,rv); }
00456 INLINE std::ostream &operator <<(std::ostream &o, const cvector_slice &sl) throw() { return _vsout(o,sl); }
00457 INLINE std::istream &operator >>(std::istream &s, cvector &rv) throw() { return _vin(s,rv); }
00458 INLINE std::istream &operator >>(std::istream &s, cvector_slice &rv) throw() { return _vsin(s,rv); }
00459
00460
00461 INLINE cvector & cvector::operator =(const cvector_slice &sl) throw() { return _vvsassign<cvector,cvector_slice,complex>(*this,sl); }
00462
00463
00464
00465 INLINE complex operator *(const cvector & rv1, const cvector &rv2)
00466 #if(CXSC_INDEX_CHECK)
00467 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00468 #else
00469 throw()
00470 #endif
00471 { return _vvcmult<cvector,cvector,complex>(rv1,rv2); }
00472 INLINE complex operator *(const cvector_slice &sl, const cvector &rv)
00473 #if(CXSC_INDEX_CHECK)
00474 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00475 #else
00476 throw()
00477 #endif
00478 { return _vsvcmult<cvector_slice,cvector,complex>(sl,rv); }
00479 INLINE complex operator *(const cvector &rv, const cvector_slice &sl)
00480 #if(CXSC_INDEX_CHECK)
00481 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00482 #else
00483 throw()
00484 #endif
00485 { return _vsvcmult<cvector_slice,cvector,complex>(sl,rv); }
00486 INLINE complex operator *(const cvector_slice & sl1, const cvector_slice &sl2)
00487 #if(CXSC_INDEX_CHECK)
00488 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00489 #else
00490 throw()
00491 #endif
00492 { return _vsvscmult<cvector_slice,cvector_slice,complex>(sl1,sl2); }
00493
00494 INLINE const cvector &operator +(const cvector &rv) throw() { return rv; }
00495 INLINE cvector operator +(const cvector_slice &sl) throw() { return sl; }
00496 INLINE cvector operator +(const cvector &rv1, const cvector &rv2)
00497 #if(CXSC_INDEX_CHECK)
00498 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00499 #else
00500 throw()
00501 #endif
00502 { return _vvplus<cvector,cvector,cvector>(rv1,rv2); }
00503 INLINE cvector operator +(const cvector &rv, const cvector_slice &sl)
00504 #if(CXSC_INDEX_CHECK)
00505 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00506 #else
00507 throw()
00508 #endif
00509 { return _vvsplus<cvector,cvector_slice,cvector>(rv,sl); }
00510 INLINE cvector operator +(const cvector_slice &sl, const cvector &rv)
00511 #if(CXSC_INDEX_CHECK)
00512 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00513 #else
00514 throw()
00515 #endif
00516 { return _vvsplus<cvector,cvector_slice,cvector>(rv,sl); }
00517 INLINE cvector operator +(const cvector_slice &sl1, const cvector_slice &sl2)
00518 #if(CXSC_INDEX_CHECK)
00519 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00520 #else
00521 throw()
00522 #endif
00523 { return _vsvsplus<cvector_slice,cvector_slice,cvector>(sl1,sl2); }
00524 INLINE cvector & operator +=(cvector &rv1, const cvector &rv2)
00525 #if(CXSC_INDEX_CHECK)
00526 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00527 #else
00528 throw()
00529 #endif
00530 { return _vvplusassign(rv1,rv2); }
00531 INLINE cvector &operator +=(cvector &rv, const cvector_slice &sl)
00532 #if(CXSC_INDEX_CHECK)
00533 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00534 #else
00535 throw()
00536 #endif
00537 { return _vvsplusassign(rv,sl); }
00538 INLINE cvector_slice &cvector_slice::operator +=(const cvector &rv)
00539 #if(CXSC_INDEX_CHECK)
00540 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00541 #else
00542 throw()
00543 #endif
00544 { return _vsvplusassign(*this,rv); }
00545 INLINE cvector_slice &cvector_slice::operator +=(const cvector_slice &sl2)
00546 #if(CXSC_INDEX_CHECK)
00547 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00548 #else
00549 throw()
00550 #endif
00551 { return _vsvsplusassign(*this,sl2); }
00552
00553 INLINE cvector operator -(const cvector &rv) throw() { return _vminus(rv); }
00554 INLINE cvector operator -(const cvector_slice &sl) throw() { return _vsminus<cvector_slice,cvector>(sl); }
00555 INLINE cvector operator -(const cvector &rv1, const cvector &rv2)
00556 #if(CXSC_INDEX_CHECK)
00557 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00558 #else
00559 throw()
00560 #endif
00561 { return _vvminus<cvector,cvector,cvector>(rv1,rv2); }
00562 INLINE cvector operator -(const cvector &rv, const cvector_slice &sl)
00563 #if(CXSC_INDEX_CHECK)
00564 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00565 #else
00566 throw()
00567 #endif
00568 { return _vvsminus<cvector,cvector_slice,cvector>(rv,sl); }
00569 INLINE cvector operator -(const cvector_slice &sl, const cvector &rv)
00570 #if(CXSC_INDEX_CHECK)
00571 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00572 #else
00573 throw()
00574 #endif
00575 { return _vsvminus<cvector_slice,cvector,cvector>(sl,rv); }
00576 INLINE cvector operator -(const cvector_slice &sl1, const cvector_slice &sl2)
00577 #if(CXSC_INDEX_CHECK)
00578 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00579 #else
00580 throw()
00581 #endif
00582 { return _vsvsminus<cvector_slice,cvector_slice,cvector>(sl1,sl2); }
00583 INLINE cvector & operator -=(cvector &rv1, const cvector &rv2)
00584 #if(CXSC_INDEX_CHECK)
00585 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00586 #else
00587 throw()
00588 #endif
00589 { return _vvminusassign(rv1,rv2); }
00590 INLINE cvector &operator -=(cvector &rv, const cvector_slice &sl)
00591 #if(CXSC_INDEX_CHECK)
00592 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00593 #else
00594 throw()
00595 #endif
00596 { return _vvsminusassign(rv,sl); }
00597 INLINE cvector_slice &cvector_slice::operator -=(const cvector &rv)
00598 #if(CXSC_INDEX_CHECK)
00599 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00600 #else
00601 throw()
00602 #endif
00603 { return _vsvminusassign(*this,rv); }
00604 INLINE cvector_slice &cvector_slice::operator -=(const cvector_slice &sl2)
00605 #if(CXSC_INDEX_CHECK)
00606 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00607 #else
00608 throw()
00609 #endif
00610 { return _vsvsminusassign(*this,sl2); }
00611
00612 INLINE bool operator ==(const cvector &rv1, const cvector &rv2) throw() { return _vveq(rv1,rv2); }
00613 INLINE bool operator ==(const cvector_slice &sl1, const cvector_slice &sl2) throw() { return _vsvseq(sl1,sl2); }
00614 INLINE bool operator ==(const cvector_slice &sl, const cvector &rv) throw() { return _vsveq(sl,rv); }
00615 INLINE bool operator ==(const cvector &rv, const cvector_slice &sl) throw() { return _vsveq(sl,rv); }
00616 INLINE bool operator !=(const cvector &rv1, const cvector &rv2) throw() { return _vvneq(rv1,rv2); }
00617 INLINE bool operator !=(const cvector_slice &sl1, const cvector_slice &sl2) throw() { return _vsvsneq(sl1,sl2); }
00618 INLINE bool operator !=(const cvector_slice &sl, const cvector &rv) throw() { return _vsvneq(sl,rv); }
00619 INLINE bool operator !=(const cvector &rv, const cvector_slice &sl) throw() { return _vsvneq(sl,rv); }
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639 INLINE cvector & cvector::operator =(const rvector_slice &sl) throw() { return _vvsassign<cvector,rvector_slice,complex>(*this,sl); }
00640
00641
00642 INLINE complex operator *(const rvector & rv1, const cvector &rv2)
00643 #if(CXSC_INDEX_CHECK)
00644 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00645 #else
00646 throw()
00647 #endif
00648 { return _vvcmult<rvector,cvector,complex>(rv1,rv2); }
00649 INLINE complex operator *(const rvector_slice &sl, const cvector &rv)
00650 #if(CXSC_INDEX_CHECK)
00651 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00652 #else
00653 throw()
00654 #endif
00655 { return _vsvcmult<rvector_slice,cvector,complex>(sl,rv); }
00656 INLINE complex operator *(const rvector &rv, const cvector_slice &sl)
00657 #if(CXSC_INDEX_CHECK)
00658 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00659 #else
00660 throw()
00661 #endif
00662 { return _vsvcmult<cvector_slice,rvector,complex>(sl,rv); }
00663 INLINE complex operator *(const rvector_slice & sl1, const cvector_slice &sl2)
00664 #if(CXSC_INDEX_CHECK)
00665 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00666 #else
00667 throw()
00668 #endif
00669 { return _vsvscmult<rvector_slice,cvector_slice,complex>(sl1,sl2); }
00670
00671 INLINE complex operator *(const cvector & rv1, const rvector &rv2)
00672 #if(CXSC_INDEX_CHECK)
00673 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00674 #else
00675 throw()
00676 #endif
00677 { return _vvcmult<rvector,cvector,complex>(rv2,rv1); }
00678 INLINE complex operator *(const cvector_slice &sl, const rvector &rv)
00679 #if(CXSC_INDEX_CHECK)
00680 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00681 #else
00682 throw()
00683 #endif
00684 { return _vsvcmult<cvector_slice,rvector,complex>(sl,rv); }
00685 INLINE complex operator *(const cvector &rv, const rvector_slice &sl)
00686 #if(CXSC_INDEX_CHECK)
00687 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00688 #else
00689 throw()
00690 #endif
00691 { return _vsvcmult<rvector_slice,cvector,complex>(sl,rv); }
00692 INLINE complex operator *(const cvector_slice & sl1, const rvector_slice &sl2)
00693 #if(CXSC_INDEX_CHECK)
00694 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00695 #else
00696 throw()
00697 #endif
00698 { return _vsvscmult<rvector_slice,cvector_slice,complex>(sl2,sl1); }
00699
00700 INLINE cvector operator +(const rvector &rv1, const cvector &rv2)
00701 #if(CXSC_INDEX_CHECK)
00702 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00703 #else
00704 throw()
00705 #endif
00706 { return _vvplus<rvector,cvector,cvector>(rv1,rv2); }
00707 INLINE cvector operator +(const rvector &rv, const cvector_slice &sl)
00708 #if(CXSC_INDEX_CHECK)
00709 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00710 #else
00711 throw()
00712 #endif
00713 { return _vvsplus<rvector,cvector_slice,cvector>(rv,sl); }
00714 INLINE cvector operator +(const rvector_slice &sl, const cvector &rv)
00715 #if(CXSC_INDEX_CHECK)
00716 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00717 #else
00718 throw()
00719 #endif
00720 { return _vvsplus<cvector,rvector_slice,cvector>(rv,sl); }
00721 INLINE cvector operator +(const rvector_slice &sl1, const cvector_slice &sl2)
00722 #if(CXSC_INDEX_CHECK)
00723 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00724 #else
00725 throw()
00726 #endif
00727 { return _vsvsplus<rvector_slice,cvector_slice,cvector>(sl1,sl2); }
00728
00729 INLINE cvector operator +(const cvector &rv1, const rvector &rv2)
00730 #if(CXSC_INDEX_CHECK)
00731 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00732 #else
00733 throw()
00734 #endif
00735 { return _vvplus<rvector,cvector,cvector>(rv2,rv1); }
00736 INLINE cvector operator +(const cvector &rv, const rvector_slice &sl)
00737 #if(CXSC_INDEX_CHECK)
00738 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00739 #else
00740 throw()
00741 #endif
00742 { return _vvsplus<cvector,rvector_slice,cvector>(rv,sl); }
00743 INLINE cvector operator +(const cvector_slice &sl, const rvector &rv)
00744 #if(CXSC_INDEX_CHECK)
00745 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00746 #else
00747 throw()
00748 #endif
00749 { return _vvsplus<rvector,cvector_slice,cvector>(rv,sl); }
00750 INLINE cvector operator +(const cvector_slice &sl1, const rvector_slice &sl2)
00751 #if(CXSC_INDEX_CHECK)
00752 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00753 #else
00754 throw()
00755 #endif
00756 { return _vsvsplus<rvector_slice,cvector_slice,cvector>(sl2,sl1); }
00757
00758 INLINE cvector & operator +=(cvector &rv1, const rvector &rv2)
00759 #if(CXSC_INDEX_CHECK)
00760 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00761 #else
00762 throw()
00763 #endif
00764 { return _vvplusassign(rv1,rv2); }
00765 INLINE cvector &operator +=(cvector &rv, const rvector_slice &sl)
00766 #if(CXSC_INDEX_CHECK)
00767 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00768 #else
00769 throw()
00770 #endif
00771 { return _vvsplusassign(rv,sl); }
00772 INLINE cvector_slice &cvector_slice::operator +=(const rvector &rv)
00773 #if(CXSC_INDEX_CHECK)
00774 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00775 #else
00776 throw()
00777 #endif
00778 { return _vsvplusassign(*this,rv); }
00779 INLINE cvector_slice &cvector_slice::operator +=(const rvector_slice &sl2)
00780 #if(CXSC_INDEX_CHECK)
00781 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00782 #else
00783 throw()
00784 #endif
00785 { return _vsvsplusassign(*this,sl2); }
00786
00787 INLINE cvector operator -(const rvector &rv1, const cvector &rv2)
00788 #if(CXSC_INDEX_CHECK)
00789 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00790 #else
00791 throw()
00792 #endif
00793 { return _vvminus<rvector,cvector,cvector>(rv1,rv2); }
00794 INLINE cvector operator -(const rvector &rv, const cvector_slice &sl)
00795 #if(CXSC_INDEX_CHECK)
00796 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00797 #else
00798 throw()
00799 #endif
00800 { return _vvsminus<rvector,cvector_slice,cvector>(rv,sl); }
00801 INLINE cvector operator -(const rvector_slice &sl, const cvector &rv)
00802 #if(CXSC_INDEX_CHECK)
00803 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00804 #else
00805 throw()
00806 #endif
00807 { return _vsvminus<rvector_slice,cvector,cvector>(sl,rv); }
00808 INLINE cvector operator -(const rvector_slice &sl1, const cvector_slice &sl2)
00809 #if(CXSC_INDEX_CHECK)
00810 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00811 #else
00812 throw()
00813 #endif
00814 { return _vsvsminus<rvector_slice,cvector_slice,cvector>(sl1,sl2); }
00815
00816 INLINE cvector operator -(const cvector &rv1, const rvector &rv2)
00817 #if(CXSC_INDEX_CHECK)
00818 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00819 #else
00820 throw()
00821 #endif
00822 { return _vvminus<cvector,rvector,cvector>(rv1,rv2); }
00823 INLINE cvector operator -(const cvector &rv, const rvector_slice &sl)
00824 #if(CXSC_INDEX_CHECK)
00825 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00826 #else
00827 throw()
00828 #endif
00829 { return _vvsminus<cvector,rvector_slice,cvector>(rv,sl); }
00830 INLINE cvector operator -(const cvector_slice &sl, const rvector &rv)
00831 #if(CXSC_INDEX_CHECK)
00832 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00833 #else
00834 throw()
00835 #endif
00836 { return _vsvminus<cvector_slice,rvector,cvector>(sl,rv); }
00837 INLINE cvector operator -(const cvector_slice &sl1, const rvector_slice &sl2)
00838 #if(CXSC_INDEX_CHECK)
00839 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00840 #else
00841 throw()
00842 #endif
00843 { return _vsvsminus<cvector_slice,rvector_slice,cvector>(sl1,sl2); }
00844
00845 INLINE cvector & operator -=(cvector &rv1, const rvector &rv2)
00846 #if(CXSC_INDEX_CHECK)
00847 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00848 #else
00849 throw()
00850 #endif
00851 { return _vvminusassign(rv1,rv2); }
00852 INLINE cvector &operator -=(cvector &rv, const rvector_slice &sl)
00853 #if(CXSC_INDEX_CHECK)
00854 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00855 #else
00856 throw()
00857 #endif
00858 { return _vvsminusassign(rv,sl); }
00859 INLINE cvector_slice &cvector_slice::operator -=(const rvector &rv)
00860 #if(CXSC_INDEX_CHECK)
00861 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00862 #else
00863 throw()
00864 #endif
00865 { return _vsvminusassign(*this,rv); }
00866 INLINE cvector_slice &cvector_slice::operator -=(const rvector_slice &sl2)
00867 #if(CXSC_INDEX_CHECK)
00868 throw(ERROR__OP_WITH_WRONG_DIM<cvector>)
00869 #else
00870 throw()
00871 #endif
00872 { return _vsvsminusassign(*this,sl2); }
00873
00875 INLINE cvector cvector::operator()(const intvector& p) {
00876 cvector x(*this);
00877 for(int i=0 ; i<VecLen(x) ; i++)
00878 x[i+Lb(x)] = (*this)[p[i+Lb(p)]+Lb(*this)];
00879 return x;
00880 }
00881
00882 }
00883
00884 #endif // _CXSC_CVECTOR_INL_INCLUDED
00885