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_SIVECTOR_HPP_INCLUDED
00027 #define _CXSC_SIVECTOR_HPP_INCLUDED
00028
00029 #include <interval.hpp>
00030 #include <ivector.hpp>
00031 #include <vector>
00032 #include <iostream>
00033 #include <cidot.hpp>
00034 #include <srvector.hpp>
00035 #include <sparseidot.hpp>
00036 #include <sparsevector.hpp>
00037
00038 namespace cxsc {
00039
00040 class srvector_slice;
00041 class srmatrix;
00042 class srmatrix_slice;
00043 class srmatrix_subv;
00044 class sivector_slice;
00045 class simatrix;
00046 class simatrix_slice;
00047 class simatrix_subv;
00048 class scivector;
00049 class scivector_slice;
00050 class scimatrix;
00051 class scimatrix_slice;
00052 class scimatrix_subv;
00053
00054
00055 class sivector {
00056 private:
00057 std::vector<int> p;
00058 std::vector<interval> x;
00059 int lb;
00060 int ub;
00061 int n;
00062
00063 public:
00064 sivector() : lb(0), ub(-1) , n(0) {
00065 }
00066
00067 explicit sivector(const int s) : lb(1), ub(s), n(s) {
00068 p.reserve((int)(s*0.1));
00069 x.reserve((int)(s*0.1));
00070 }
00071
00072 sivector(const int s, const int b) : lb(1), ub(s), n(s) {
00073 p.reserve(b);
00074 x.reserve(b);
00075 }
00076
00077 sivector(const ivector& v) : lb(Lb(v)), ub(Ub(v)), n(VecLen(v)) {
00078 for(int i=lb ; i<=ub ; i++) {
00079 if(v[i] != 0.0) {
00080 p.push_back(i-lb);
00081 x.push_back(v[i]);
00082 }
00083 }
00084 }
00085
00086 sivector(const rvector& v) : lb(Lb(v)), ub(Ub(v)), n(VecLen(v)) {
00087 for(int i=lb ; i<=ub ; i++) {
00088 if(v[i] != 0.0) {
00089 p.push_back(i-lb);
00090 x.push_back(interval(v[i]));
00091 }
00092 }
00093 }
00094
00095 sivector(const int n, const int nnz, const intvector& index, const ivector& values) : lb(1), ub(n) {
00096 this->n = n;
00097 for(int i=0 ; i<nnz ; i++) {
00098 if(values[Lb(values)+i] != 0.0) {
00099 p.push_back(index[Lb(index)+i]);
00100 x.push_back(values[Lb(values)+i]);
00101 }
00102 }
00103 }
00104
00105 sivector(const int n, const int nnz, const int* index, const interval* values) : lb(1), ub(n) {
00106 this->n = n;
00107 for(int i=0 ; i<nnz ; i++) {
00108 if(values[i] != 0.0) {
00109 p.push_back(index[i]);
00110 x.push_back(values[i]);
00111 }
00112 }
00113 }
00114
00115 sivector(const srvector& v) : p(v.p), lb(v.lb), ub(v.ub), n(v.n) {
00116 x.reserve(v.get_nnz());
00117 for(int i=0 ; i<v.get_nnz() ; i++)
00118 x.push_back(interval(v.x[i]));
00119 }
00120
00121 sivector(const srvector_slice&);
00122 sivector(const sivector_slice&);
00123 sivector(const srmatrix_subv& A);
00124 sivector(const simatrix_subv& A);
00125
00126 std::vector<int>& row_indices() {
00127 return p;
00128 }
00129
00130 std::vector<interval>& values() {
00131 return x;
00132 }
00133
00134 const std::vector<int>& row_indices() const {
00135 return p;
00136 }
00137
00138 const std::vector<interval>& values() const {
00139 return x;
00140 }
00141
00142
00143 int get_nnz() const {
00144 return x.size();
00145 }
00146
00147 real density() const {
00148 return (double)x.size()/n;
00149 }
00150
00151 void dropzeros() {
00152 for(int i=0 ; i<get_nnz() ; i++) {
00153 if(x[i] == 0.0) {
00154 x.erase(x.begin()+i);
00155 p.erase(p.begin()+i);
00156 }
00157 }
00158 }
00159
00160
00161
00162
00163
00164
00165
00166
00167 sivector& operator=(const srvector& v) {
00168 n = v.n;
00169 p = v.p;
00170 x.clear();
00171 x.reserve(v.get_nnz());
00172 for(unsigned int i=0 ; i<v.x.size() ; i++)
00173 x[i] = interval(v.x[i]);
00174 return *this;
00175 }
00176
00177 sivector& operator=(const real& v) {
00178 return sp_vs_assign<sivector,real,interval>(*this,v);
00179 }
00180
00181 sivector& operator=(const interval& v) {
00182 return sp_vs_assign<sivector,interval,interval>(*this,v);
00183 }
00184
00185 sivector& operator=(const rvector& v) {
00186 return spf_vv_assign<sivector,rvector,interval>(*this,v);
00187 }
00188
00189 sivector& operator=(const ivector& v) {
00190 return spf_vv_assign<sivector,ivector,interval>(*this,v);
00191 }
00192
00193 sivector& operator=(const rvector_slice& v) {
00194 return spf_vv_assign<sivector,rvector_slice,interval>(*this,v);
00195 }
00196
00197 sivector& operator=(const sivector_slice&);
00198 sivector& operator=(const srvector_slice&);
00199
00200 interval& operator[](const int i) {
00201 #if(CXSC_INDEX_CHECK)
00202 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector::operator[](const int)"));
00203 #endif
00204 int k;
00205
00206 for(k=0 ; k<get_nnz() && p[k]<=i-lb ; k++) {
00207 if(p[k] == i-lb)
00208 return x[k];
00209 }
00210
00211 p.insert(p.begin() + k, i-lb);
00212 x.insert(x.begin() + k, interval(0.0));
00213
00214 return x[k];
00215 }
00216
00217 interval operator[](const int i) const {
00218 #if(CXSC_INDEX_CHECK)
00219 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector::operator[](const int)"));
00220 #endif
00221 return (*this)(i);
00222 }
00223
00224 interval operator()(const int i) const {
00225 #if(CXSC_INDEX_CHECK)
00226 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector::operator()(const int)"));
00227 #endif
00228 interval r(0.0);
00229
00230 for(int k=0 ; k<get_nnz() && p[k]<=i-lb ; k++) {
00231 if(p[k] == i-lb)
00232 r = x[k];
00233 }
00234
00235 return r;
00236 }
00237
00238 sivector operator()(const intvector& per) {
00239 sivector v(n,get_nnz());
00240 intvector pinv = perminv(per);
00241
00242 std::map<int,interval> work;
00243 for(int i=0 ; i<get_nnz() ; i++) {
00244 work.insert(std::make_pair(pinv[Lb(pinv)+p[i]], x[i]));
00245 }
00246
00247 for(std::map<int,interval>::iterator it=work.begin() ; it!=work.end() ; it++) {
00248 v.p.push_back(it->first);
00249 v.x.push_back(it->second);
00250 }
00251
00252 return v;
00253 }
00254
00255 sivector operator()(const intmatrix& P) {
00256 intvector p = permvec(P);
00257 return (*this)(p);
00258 }
00259
00260 sivector_slice operator()(const int, const int);
00261
00262 sivector& operator*=(const real& s) {
00263 return sp_vs_multassign(*this,s);
00264 }
00265
00266 sivector& operator*=(const interval& s) {
00267 return sp_vs_multassign(*this,s);
00268 }
00269
00270 sivector& operator/=(const real& s) {
00271 return sp_vs_divassign(*this,s);
00272 }
00273
00274 sivector& operator/=(const interval& s) {
00275 return sp_vs_divassign(*this,s);
00276 }
00277
00278 sivector& operator+=(const rvector& v) {
00279 return spf_vv_addassign(*this,v);
00280 }
00281
00282 sivector& operator+=(const ivector& v) {
00283 return spf_vv_addassign(*this,v);
00284 }
00285
00286 sivector& operator+=(const rvector_slice& v) {
00287 return spf_vv_addassign(*this,v);
00288 }
00289
00290 sivector& operator+=(const ivector_slice& v) {
00291 return spf_vv_addassign(*this,v);
00292 }
00293
00294 sivector& operator+=(const srvector& v) {
00295 return spsp_vv_addassign(*this,v);
00296 }
00297
00298 sivector& operator+=(const sivector& v) {
00299 return spsp_vv_addassign(*this,v);
00300 }
00301
00302 sivector& operator-=(const rvector& v) {
00303 return spf_vv_subassign(*this,v);
00304 }
00305
00306 sivector& operator-=(const ivector& v) {
00307 return spf_vv_subassign(*this,v);
00308 }
00309
00310 sivector& operator-=(const rvector_slice& v) {
00311 return spf_vv_subassign(*this,v);
00312 }
00313
00314 sivector& operator-=(const ivector_slice& v) {
00315 return spf_vv_subassign(*this,v);
00316 }
00317
00318 sivector& operator-=(const srvector& v) {
00319 return spsp_vv_subassign(*this,v);
00320 }
00321
00322 sivector& operator-=(const sivector& v) {
00323 return spsp_vv_subassign(*this,v);
00324 }
00325
00326 sivector& operator|=(const rvector& v) {
00327 return spf_vv_hullassign(*this,v);
00328 }
00329
00330 sivector& operator|=(const ivector& v) {
00331 return spf_vv_hullassign(*this,v);
00332 }
00333
00334 sivector& operator|=(const rvector_slice& v) {
00335 return spf_vv_hullassign(*this,v);
00336 }
00337
00338 sivector& operator|=(const ivector_slice& v) {
00339 return spf_vv_hullassign(*this,v);
00340 }
00341
00342 sivector& operator|=(const srvector& v) {
00343 return spsp_vv_hullassign(*this,v);
00344 }
00345
00346 sivector& operator|=(const sivector& v) {
00347 return spsp_vv_hullassign(*this,v);
00348 }
00349
00350 sivector& operator&=(const ivector_slice& v) {
00351 return spf_vv_intersectassign(*this,v);
00352 }
00353
00354 sivector& operator&=(const sivector& v) {
00355 return spsp_vv_intersectassign(*this,v);
00356 }
00357
00358 sivector& operator+=(const srvector_slice&);
00359 sivector& operator+=(const sivector_slice&);
00360 sivector& operator-=(const srvector_slice&);
00361 sivector& operator-=(const sivector_slice&);
00362
00363 friend void SetLb(sivector&, const int);
00364 friend void SetUb(sivector&, const int);
00365 friend int Lb(const sivector&);
00366 friend int Ub(const sivector&);
00367 friend srvector Inf(const sivector&);
00368 friend srvector Sup(const sivector&);
00369 friend sivector Re(const scivector&);
00370 friend sivector Im(const scivector&);
00371 friend sivector abs(const sivector&);
00372 friend sivector abs(const sivector_slice&);
00373 friend srvector mid(const sivector&);
00374 friend srvector diam(const sivector&);
00375 friend sivector abs(const scivector&);
00376 friend sivector abs(const scivector_slice&);
00377 friend srvector absmin(const sivector&);
00378 friend srvector absmax(const sivector&);
00379 friend int VecLen(const sivector&);
00380 friend sivector Blow(const sivector&, const real&);
00381
00382 friend class srvector_slice;
00383 friend class sivector_slice;
00384 friend class scivector_slice;
00385 friend class scivector;
00386 friend class ivector;
00387 friend class ivector_slice;
00388 friend class civector;
00389 friend class civector_slice;
00390
00391 #include "vector_friend_declarations.inl"
00392 };
00393
00394 inline ivector::ivector(const sivector& v) {
00395 l = v.lb;
00396 u = v.ub;
00397 size = v.n;
00398 dat = new interval[v.n];
00399 for(int i=0 ; i<v.n ; i++)
00400 dat[i] = 0.0;
00401 for(int i=0 ; i<v.get_nnz() ; i++)
00402 dat[v.p[i]] = v.x[i];
00403 }
00404
00405 inline ivector::ivector(const srvector& v) {
00406 l = v.lb;
00407 u = v.ub;
00408 size = v.n;
00409 dat = new interval[v.n];
00410 for(int i=0 ; i<v.n ; i++)
00411 dat[i] = 0.0;
00412 for(int i=0 ; i<v.get_nnz() ; i++)
00413 dat[v.p[i]] = v.x[i];
00414 }
00415
00416 inline ivector& ivector::operator=(const sivector& v) {
00417 return fsp_vv_assign<ivector,sivector,interval>(*this,v);
00418 }
00419
00420 inline ivector& ivector::operator=(const sivector_slice& v) {
00421 return fsl_vv_assign<ivector,sivector_slice,interval>(*this,v);
00422 }
00423
00424 inline ivector& ivector::operator=(const srvector& v) {
00425 return fsp_vv_assign<ivector,srvector,interval>(*this,v);
00426 }
00427
00428 inline ivector& ivector::operator=(const srvector_slice& v) {
00429 return fsl_vv_assign<ivector,srvector_slice,interval>(*this,v);
00430 }
00431
00432 inline void SetLb(sivector& v, const int i) {
00433 v.lb = i;
00434 v.ub = v.lb + v.n - 1;
00435 }
00436
00437 inline void SetUb(sivector& v, const int j) {
00438 v.ub = j;
00439 v.lb = v.ub - v.n + 1;
00440 }
00441
00442 inline int Lb(const sivector& v) {
00443 return v.lb;
00444 }
00445
00446 inline int Ub(const sivector& v) {
00447 return v.ub;
00448 }
00449
00450 inline void Resize(sivector& v) {
00451 sp_v_resize(v);
00452 }
00453
00454 inline void Resize(sivector& v, const int n) {
00455 sp_v_resize(v,n);
00456 }
00457
00458 inline void Resize(sivector& v, const int l, const int u) {
00459 sp_v_resize(v,l,u);
00460 }
00461
00462 inline srvector Inf(const sivector& v) {
00463 srvector res(v.n, v.get_nnz());
00464 res.lb = v.lb;
00465 res.ub = v.ub;
00466 res.p = v.p;
00467 for(int i=0 ; i<v.get_nnz() ; i++)
00468 res.x[i] = Inf(v.x[i]);
00469 return res;
00470 }
00471
00472 inline srvector Sup(const sivector& v) {
00473 srvector res(v.n, v.get_nnz());
00474 res.lb = v.lb;
00475 res.ub = v.ub;
00476 res.p = v.p;
00477 for(int i=0 ; i<v.get_nnz() ; i++)
00478 res.x[i] = Sup(v.x[i]);
00479 return res;
00480 }
00481
00482 inline sivector abs(const sivector& v) {
00483 sivector res(v.n, v.get_nnz());
00484 res.lb = v.lb;
00485 res.ub = v.ub;
00486 res.p = v.p;
00487 for(int i=0 ; i<v.get_nnz() ; i++)
00488 res.x.push_back(abs(v.x[i]));
00489 return res;
00490 }
00491
00492 inline srvector absmin(const sivector& v) {
00493 srvector res(v.n, v.get_nnz());
00494 res.lb = v.lb;
00495 res.ub = v.ub;
00496 res.p = v.p;
00497 for(int i=0 ; i<v.get_nnz() ; i++)
00498 res.x.push_back(AbsMin(v.x[i]));
00499 res.dropzeros();
00500 return res;
00501 }
00502 inline srvector absmax(const sivector& v) {
00503 srvector res(v.n, v.get_nnz());
00504 res.lb = v.lb;
00505 res.ub = v.ub;
00506 res.p = v.p;
00507 for(int i=0 ; i<v.get_nnz() ; i++)
00508 res.x.push_back(AbsMax(v.x[i]));
00509 res.dropzeros();
00510 return res;
00511 }
00512
00513 inline srvector mid(const sivector& v) {
00514 srvector res(v.n, v.get_nnz());
00515 res.lb = v.lb;
00516 res.ub = v.ub;
00517 res.p = v.p;
00518 for(int i=0 ; i<v.get_nnz() ; i++) {
00519 res.x.push_back(mid(v.x[i]));
00520 }
00521 return res;
00522 }
00523
00524 inline srvector diam(const sivector& v) {
00525 srvector res(v.n, v.get_nnz());
00526 res.lb = v.lb;
00527 res.ub = v.ub;
00528 res.p = v.p;
00529 for(int i=0 ; i<v.get_nnz() ; i++)
00530 res.x.push_back(diam(v.x[i]));
00531 return res;
00532 }
00533
00534 inline int VecLen(const sivector& v) {
00535 return v.n;
00536 }
00537
00538 inline sivector Blow(const sivector& v, const real& eps) {
00539 sivector res(v);
00540 for(unsigned int i=0 ; i<v.x.size() ; i++)
00541 res.x[i] = Blow(v.x[i],eps);
00542 return res;
00543 }
00544
00545 inline bool in (const sivector& v1, const sivector& v2) {
00546 for(int i=0 ; i<VecLen(v1) ; i++)
00547 if(!in(v1(i+Lb(v1)), v2(i+Lb(v2)))) return false;
00548 return true;
00549 }
00550
00551 inline bool Zero(const sivector& v1) {
00552 for(int i=0 ; i<VecLen(v1) ; i++)
00553 if(v1(i+Lb(v1)) != 0.0) return false;
00554 return true;
00555 }
00556
00557 inline sivector operator-(const sivector& v) {
00558 return sp_v_negative(v);
00559 }
00560
00561 inline interval operator*(const sivector& v1, const ivector& v2) {
00562 return spf_vv_mult<sivector,ivector,interval,sparse_idot>(v1,v2);
00563 }
00564
00565 inline interval operator*(const sivector& v1, const rvector& v2) {
00566 return spf_vv_mult<sivector,rvector,interval,sparse_idot>(v1,v2);
00567 }
00568
00569 inline interval operator*(const srvector& v1, const ivector& v2) {
00570 return spf_vv_mult<srvector,ivector,interval,sparse_idot>(v1,v2);
00571 }
00572
00573 inline interval operator*(const rvector& v1, const sivector& v2) {
00574 return fsp_vv_mult<rvector,sivector,interval,sparse_idot>(v1,v2);
00575 }
00576
00577 inline interval operator*(const ivector& v1, const srvector& v2) {
00578 return fsp_vv_mult<ivector,srvector,interval,sparse_idot>(v1,v2);
00579 }
00580
00581 inline interval operator*(const ivector& v1, const sivector& v2) {
00582 return fsp_vv_mult<ivector,sivector,interval,sparse_idot>(v1,v2);
00583 }
00584
00585 inline interval operator*(const sivector& v1, const rvector_slice& v2) {
00586 return spf_vv_mult<sivector,rvector_slice,interval,sparse_idot>(v1,v2);
00587 }
00588
00589 inline interval operator*(const sivector& v1, const ivector_slice& v2) {
00590 return spf_vv_mult<sivector,ivector_slice,interval,sparse_idot>(v1,v2);
00591 }
00592
00593 inline interval operator*(const srvector& v1, const ivector_slice& v2) {
00594 return spf_vv_mult<srvector,ivector_slice,interval,sparse_idot>(v1,v2);
00595 }
00596
00597 inline interval operator*(const ivector_slice& v1, const srvector& v2) {
00598 return fsp_vv_mult<ivector_slice,srvector,interval,sparse_idot>(v1,v2);
00599 }
00600
00601 inline interval operator*(const ivector_slice& v1, const sivector& v2) {
00602 return fsp_vv_mult<ivector_slice,sivector,interval,sparse_idot>(v1,v2);
00603 }
00604
00605 inline interval operator*(const rvector_slice& v1, const sivector& v2) {
00606 return fsp_vv_mult<rvector_slice,sivector,interval,sparse_idot>(v1,v2);
00607 }
00608
00609 inline interval operator*(const sivector& v1, const srvector& v2) {
00610 return spsp_vv_mult<sivector,srvector,interval,sparse_idot>(v1,v2);
00611 }
00612
00613 inline interval operator*(const srvector& v1, const sivector& v2) {
00614 return spsp_vv_mult<srvector,sivector,interval,sparse_idot>(v1,v2);
00615 }
00616
00617 inline interval operator*(const sivector& v1, const sivector& v2) {
00618 return spsp_vv_mult<sivector,sivector,interval,sparse_idot>(v1,v2);
00619 }
00620
00621 inline sivector operator*(const sivector& v, const real& s) {
00622 return sp_vs_mult<sivector,real,sivector>(v,s);
00623 }
00624
00625 inline sivector operator*(const sivector& v, const interval& s) {
00626 return sp_vs_mult<sivector,interval,sivector>(v,s);
00627 }
00628
00629 inline sivector operator*(const srvector& v, const interval& s) {
00630 return sp_vs_mult<srvector,interval,sivector>(v,s);
00631 }
00632
00633 inline sivector operator/(const sivector& v, const real& s) {
00634 return sp_vs_div<sivector,real,sivector>(v,s);
00635 }
00636
00637 inline sivector operator/(const sivector& v, const interval& s) {
00638 return sp_vs_div<sivector,interval,sivector>(v,s);
00639 }
00640
00641 inline sivector operator/(const srvector& v, const interval& s) {
00642 return sp_vs_div<srvector,interval,sivector>(v,s);
00643 }
00644
00645 inline sivector operator*(const real& s, const sivector& v) {
00646 return sp_sv_mult<real,sivector,sivector>(s,v);
00647 }
00648
00649 inline sivector operator*(const interval& s, const sivector& v) {
00650 return sp_sv_mult<interval,sivector,sivector>(s,v);
00651 }
00652
00653 inline sivector operator*(const interval& s, const srvector& v) {
00654 return sp_sv_mult<interval,srvector,sivector>(s,v);
00655 }
00656
00657 inline ivector operator+(const ivector& v1, const srvector& v2) {
00658 return fsp_vv_add<ivector,srvector,ivector>(v1,v2);
00659 }
00660
00661 inline ivector operator+(const rvector& v1, const sivector& v2) {
00662 return fsp_vv_add<rvector,sivector,ivector>(v1,v2);
00663 }
00664
00665 inline ivector operator+(const ivector& v1, const sivector& v2) {
00666 return fsp_vv_add<ivector,sivector,ivector>(v1,v2);
00667 }
00668
00669 inline ivector operator+(const sivector& v1, const rvector& v2) {
00670 return spf_vv_add<sivector,rvector,ivector>(v1,v2);
00671 }
00672
00673 inline ivector operator+(const srvector& v1, const ivector& v2) {
00674 return spf_vv_add<srvector,ivector,ivector>(v1,v2);
00675 }
00676
00677 inline ivector operator+(const sivector& v1, const ivector& v2) {
00678 return spf_vv_add<sivector,ivector,ivector>(v1,v2);
00679 }
00680
00681 inline ivector operator+(const ivector_slice& v1, const srvector& v2) {
00682 return fsp_vv_add<ivector_slice,srvector,ivector>(v1,v2);
00683 }
00684
00685 inline ivector operator+(const rvector_slice& v1, const sivector& v2) {
00686 return fsp_vv_add<rvector_slice,sivector,ivector>(v1,v2);
00687 }
00688
00689 inline ivector operator+(const ivector_slice& v1, const sivector& v2) {
00690 return fsp_vv_add<ivector_slice,sivector,ivector>(v1,v2);
00691 }
00692
00693 inline ivector operator+(const sivector& v1, const rvector_slice& v2) {
00694 return spf_vv_add<sivector,rvector_slice,ivector>(v1,v2);
00695 }
00696
00697 inline ivector operator+(const srvector& v1, const ivector_slice& v2) {
00698 return spf_vv_add<srvector,ivector_slice,ivector>(v1,v2);
00699 }
00700
00701 inline ivector operator+(const sivector& v1, const ivector_slice& v2) {
00702 return spf_vv_add<sivector,ivector_slice,ivector>(v1,v2);
00703 }
00704
00705 inline sivector operator+(const sivector& v1, const srvector& v2) {
00706 return spsp_vv_add<sivector,srvector,sivector,interval>(v1,v2);
00707 }
00708
00709 inline sivector operator+(const srvector& v1, const sivector& v2) {
00710 return spsp_vv_add<srvector,sivector,sivector,interval>(v1,v2);
00711 }
00712
00713 inline sivector operator+(const sivector& v1, const sivector& v2) {
00714 return spsp_vv_add<sivector,sivector,sivector,interval>(v1,v2);
00715 }
00716
00717 inline ivector operator-(const ivector& v1, const srvector& v2) {
00718 return fsp_vv_sub<ivector,srvector,ivector>(v1,v2);
00719 }
00720
00721 inline ivector operator-(const rvector& v1, const sivector& v2) {
00722 return fsp_vv_sub<rvector,sivector,ivector>(v1,v2);
00723 }
00724
00725 inline ivector operator-(const ivector& v1, const sivector& v2) {
00726 return fsp_vv_sub<ivector,sivector,ivector>(v1,v2);
00727 }
00728
00729 inline ivector operator-(const sivector& v1, const rvector& v2) {
00730 return spf_vv_sub<sivector,rvector,ivector>(v1,v2);
00731 }
00732
00733 inline ivector operator-(const srvector& v1, const ivector& v2) {
00734 return spf_vv_sub<srvector,ivector,ivector>(v1,v2);
00735 }
00736
00737 inline ivector operator-(const sivector& v1, const ivector& v2) {
00738 return spf_vv_sub<sivector,ivector,ivector>(v1,v2);
00739 }
00740
00741 inline ivector operator-(const ivector_slice& v1, const srvector& v2) {
00742 return fsp_vv_sub<ivector_slice,srvector,ivector>(v1,v2);
00743 }
00744
00745 inline ivector operator-(const rvector_slice& v1, const sivector& v2) {
00746 return fsp_vv_sub<rvector_slice,sivector,ivector>(v1,v2);
00747 }
00748
00749 inline ivector operator-(const ivector_slice& v1, const sivector& v2) {
00750 return fsp_vv_sub<ivector_slice,sivector,ivector>(v1,v2);
00751 }
00752
00753 inline ivector operator-(const sivector& v1, const rvector_slice& v2) {
00754 return spf_vv_sub<sivector,rvector_slice,ivector>(v1,v2);
00755 }
00756
00757 inline ivector operator-(const srvector& v1, const ivector_slice& v2) {
00758 return spf_vv_sub<srvector,ivector_slice,ivector>(v1,v2);
00759 }
00760
00761 inline ivector operator-(const sivector& v1, const ivector_slice& v2) {
00762 return spf_vv_sub<sivector,ivector_slice,ivector>(v1,v2);
00763 }
00764
00765 inline sivector operator-(const sivector& v1, const srvector& v2) {
00766 return spsp_vv_sub<sivector,srvector,sivector,interval>(v1,v2);
00767 }
00768
00769 inline sivector operator-(const srvector& v1, const sivector& v2) {
00770 return spsp_vv_sub<srvector,sivector,sivector,interval>(v1,v2);
00771 }
00772
00773 inline sivector operator-(const sivector& v1, const sivector& v2) {
00774 return spsp_vv_sub<sivector,sivector,sivector,interval>(v1,v2);
00775 }
00776
00777 inline ivector operator|(const rvector& v1, const srvector& v2) {
00778 return fsp_vv_hull<rvector,srvector,ivector>(v1,v2);
00779 }
00780
00781 inline ivector operator|(const srvector& v1, const rvector& v2) {
00782 return spf_vv_hull<srvector,rvector,ivector>(v1,v2);
00783 }
00784
00785 inline ivector operator|(const rvector_slice& v1, const srvector& v2) {
00786 return fsp_vv_hull<rvector_slice,srvector,ivector>(v1,v2);
00787 }
00788
00789 inline ivector operator|(const srvector& v1, const rvector_slice& v2) {
00790 return spf_vv_hull<srvector,rvector_slice,ivector>(v1,v2);
00791 }
00792
00793 inline sivector operator|(const srvector& v1, const srvector& v2) {
00794 return spsp_vv_hull<srvector,srvector,sivector,interval>(v1,v2);
00795 }
00796
00797 inline ivector operator|(const ivector& v1, const srvector& v2) {
00798 return fsp_vv_hull<ivector,srvector,ivector>(v1,v2);
00799 }
00800
00801 inline ivector operator|(const rvector& v1, const sivector& v2) {
00802 return fsp_vv_hull<rvector,sivector,ivector>(v1,v2);
00803 }
00804
00805 inline ivector operator|(const ivector& v1, const sivector& v2) {
00806 return fsp_vv_hull<ivector,sivector,ivector>(v1,v2);
00807 }
00808
00809 inline ivector operator|(const sivector& v1, const rvector& v2) {
00810 return spf_vv_hull<sivector,rvector,ivector>(v1,v2);
00811 }
00812
00813 inline ivector operator|(const srvector& v1, const ivector& v2) {
00814 return spf_vv_hull<srvector,ivector,ivector>(v1,v2);
00815 }
00816
00817 inline ivector operator|(const sivector& v1, const ivector& v2) {
00818 return spf_vv_hull<sivector,ivector,ivector>(v1,v2);
00819 }
00820
00821 inline ivector operator|(const ivector_slice& v1, const srvector& v2) {
00822 return fsp_vv_hull<ivector_slice,srvector,ivector>(v1,v2);
00823 }
00824
00825 inline ivector operator|(const rvector_slice& v1, const sivector& v2) {
00826 return fsp_vv_hull<rvector_slice,sivector,ivector>(v1,v2);
00827 }
00828
00829 inline ivector operator|(const ivector_slice& v1, const sivector& v2) {
00830 return fsp_vv_hull<ivector_slice,sivector,ivector>(v1,v2);
00831 }
00832
00833 inline ivector operator|(const sivector& v1, const rvector_slice& v2) {
00834 return spf_vv_hull<sivector,rvector_slice,ivector>(v1,v2);
00835 }
00836
00837 inline ivector operator|(const srvector& v1, const ivector_slice& v2) {
00838 return spf_vv_hull<srvector,ivector_slice,ivector>(v1,v2);
00839 }
00840
00841 inline ivector operator|(const sivector& v1, const ivector_slice& v2) {
00842 return spf_vv_hull<sivector,ivector_slice,ivector>(v1,v2);
00843 }
00844
00845 inline sivector operator|(const sivector& v1, const srvector& v2) {
00846 return spsp_vv_hull<sivector,srvector,sivector,interval>(v1,v2);
00847 }
00848
00849 inline sivector operator|(const srvector& v1, const sivector& v2) {
00850 return spsp_vv_hull<srvector,sivector,sivector,interval>(v1,v2);
00851 }
00852
00853 inline sivector operator|(const sivector& v1, const sivector& v2) {
00854 return spsp_vv_hull<sivector,sivector,sivector,interval>(v1,v2);
00855 }
00856
00857 inline sivector operator&(const ivector& v1, const sivector& v2) {
00858 return fsp_vv_intersect<ivector,sivector,ivector>(v1,v2);
00859 }
00860
00861 inline sivector operator&(const sivector& v1, const ivector& v2) {
00862 return spf_vv_intersect<sivector,ivector,ivector>(v1,v2);
00863 }
00864
00865 inline sivector operator&(const ivector_slice& v1, const sivector& v2) {
00866 return fsp_vv_intersect<ivector_slice,sivector,ivector>(v1,v2);
00867 }
00868
00869 inline sivector operator&(const sivector& v1, const ivector_slice& v2) {
00870 return spf_vv_intersect<sivector,ivector_slice,ivector>(v1,v2);
00871 }
00872
00873 inline sivector operator&(const sivector& v1, const sivector& v2) {
00874 return spsp_vv_intersect<sivector,sivector,sivector,interval>(v1,v2);
00875 }
00876
00877 inline ivector& ivector::operator+=(const srvector& v2) {
00878 return fsp_vv_addassign(*this,v2);
00879 }
00880
00881 inline ivector& ivector::operator+=(const sivector& v2) {
00882 return fsp_vv_addassign(*this,v2);
00883 }
00884
00885 inline ivector_slice& ivector_slice::operator+=(const srvector& v2) {
00886 return fsp_vv_addassign(*this,v2);
00887 }
00888
00889 inline ivector_slice& ivector_slice::operator+=(const sivector& v2) {
00890 return fsp_vv_addassign(*this,v2);
00891 }
00892
00893 inline ivector& ivector::operator-=(const srvector& v2) {
00894 return fsp_vv_subassign(*this,v2);
00895 }
00896
00897 inline ivector& ivector::operator-=(const sivector& v2) {
00898 return fsp_vv_subassign(*this,v2);
00899 }
00900
00901 inline ivector_slice& ivector_slice::operator-=(const srvector& v2) {
00902 return fsp_vv_subassign(*this,v2);
00903 }
00904
00905 inline ivector_slice& ivector_slice::operator-=(const sivector& v2) {
00906 return fsp_vv_subassign(*this,v2);
00907 }
00908
00909 inline ivector& ivector::operator|=(const srvector& v2) {
00910 return fsp_vv_hullassign(*this,v2);
00911 }
00912
00913 inline ivector& ivector::operator|=(const sivector& v2) {
00914 return fsp_vv_hullassign(*this,v2);
00915 }
00916
00917 inline ivector_slice& ivector_slice::operator|=(const srvector& v2) {
00918 return fsp_vv_hullassign(*this,v2);
00919 }
00920
00921 inline ivector_slice& ivector_slice::operator|=(const sivector& v2) {
00922 return fsp_vv_hullassign(*this,v2);
00923 }
00924
00925 inline ivector& ivector::operator&=(const sivector& v2) {
00926 return fsp_vv_intersectassign(*this,v2);
00927 }
00928
00929 inline ivector_slice& ivector_slice::operator&=(const sivector& v2) {
00930 return fsp_vv_intersectassign(*this,v2);
00931 }
00932
00933 inline bool operator==(const sivector& v1, const sivector& v2) {
00934 return spsp_vv_comp(v1,v2);
00935 }
00936
00937 inline bool operator==(const sivector& v1, const srvector& v2) {
00938 return spsp_vv_comp(v1,v2);
00939 }
00940
00941 inline bool operator==(const srvector& v1, const sivector& v2) {
00942 return spsp_vv_comp(v1,v2);
00943 }
00944
00945 inline bool operator==(const sivector& v1, const rvector& v2) {
00946 return spf_vv_comp(v1,v2);
00947 }
00948
00949 inline bool operator==(const srvector& v1, const ivector& v2) {
00950 return spf_vv_comp(v1,v2);
00951 }
00952
00953 inline bool operator==(const sivector& v1, const ivector& v2) {
00954 return spf_vv_comp(v1,v2);
00955 }
00956
00957 inline bool operator==(const ivector& v1, const srvector& v2) {
00958 return fsp_vv_comp(v1,v2);
00959 }
00960
00961 inline bool operator==(const rvector& v1, const sivector& v2) {
00962 return fsp_vv_comp(v1,v2);
00963 }
00964
00965 inline bool operator==(const ivector& v1, const sivector& v2) {
00966 return fsp_vv_comp(v1,v2);
00967 }
00968
00969 inline bool operator==(const sivector& v1, const rvector_slice& v2) {
00970 return spf_vv_comp(v1,v2);
00971 }
00972
00973 inline bool operator==(const srvector& v1, const ivector_slice& v2) {
00974 return spf_vv_comp(v1,v2);
00975 }
00976
00977 inline bool operator==(const sivector& v1, const ivector_slice& v2) {
00978 return spf_vv_comp(v1,v2);
00979 }
00980
00981 inline bool operator==(const ivector_slice& v1, const srvector& v2) {
00982 return fsp_vv_comp(v1,v2);
00983 }
00984
00985 inline bool operator==(const rvector_slice& v1, const sivector& v2) {
00986 return fsp_vv_comp(v1,v2);
00987 }
00988
00989 inline bool operator==(const ivector_slice& v1, const sivector& v2) {
00990 return fsp_vv_comp(v1,v2);
00991 }
00992
00993 inline bool operator!=(const sivector& v1, const srvector& v2) {
00994 return !spsp_vv_comp(v1,v2);
00995 }
00996
00997 inline bool operator!=(const srvector& v1, const sivector& v2) {
00998 return !spsp_vv_comp(v1,v2);
00999 }
01000
01001 inline bool operator!=(const sivector& v1, const sivector& v2) {
01002 return !spsp_vv_comp(v1,v2);
01003 }
01004
01005 inline bool operator!=(const sivector& v1, const rvector& v2) {
01006 return !spf_vv_comp(v1,v2);
01007 }
01008
01009 inline bool operator!=(const srvector& v1, const ivector& v2) {
01010 return !spf_vv_comp(v1,v2);
01011 }
01012
01013 inline bool operator!=(const sivector& v1, const ivector& v2) {
01014 return !spf_vv_comp(v1,v2);
01015 }
01016
01017 inline bool operator!=(const ivector& v1, const srvector& v2) {
01018 return !fsp_vv_comp(v1,v2);
01019 }
01020
01021 inline bool operator!=(const rvector& v1, const sivector& v2) {
01022 return !fsp_vv_comp(v1,v2);
01023 }
01024
01025 inline bool operator!=(const ivector& v1, const sivector& v2) {
01026 return !fsp_vv_comp(v1,v2);
01027 }
01028
01029 inline bool operator!=(const sivector& v1, const rvector_slice& v2) {
01030 return !spf_vv_comp(v1,v2);
01031 }
01032
01033 inline bool operator!=(const srvector& v1, const ivector_slice& v2) {
01034 return !spf_vv_comp(v1,v2);
01035 }
01036
01037 inline bool operator!=(const sivector& v1, const ivector_slice& v2) {
01038 return !spf_vv_comp(v1,v2);
01039 }
01040
01041 inline bool operator!=(const ivector_slice& v1, const srvector& v2) {
01042 return !fsp_vv_comp(v1,v2);
01043 }
01044
01045 inline bool operator!=(const rvector_slice& v1, const sivector& v2) {
01046 return !fsp_vv_comp(v1,v2);
01047 }
01048
01049 inline bool operator!=(const ivector_slice& v1, const sivector& v2) {
01050 return !fsp_vv_comp(v1,v2);
01051 }
01052
01053 inline bool operator<(const sivector& v1, const sivector& v2) {
01054 return spsp_vv_less<sivector,sivector,interval>(v1,v2);
01055 }
01056
01057 inline bool operator<(const srvector& v1, const sivector& v2) {
01058 return spsp_vv_less<srvector,sivector,interval>(v1,v2);
01059 }
01060
01061 inline bool operator<(const srvector& v1, const ivector& v2) {
01062 return spf_vv_less<srvector,ivector,interval>(v1,v2);
01063 }
01064
01065 inline bool operator<(const sivector& v1, const ivector& v2) {
01066 return spf_vv_less<sivector,ivector,interval>(v1,v2);
01067 }
01068
01069 inline bool operator<(const rvector& v1, const sivector& v2) {
01070 return fsp_vv_less<rvector,sivector,interval>(v1,v2);
01071 }
01072
01073 inline bool operator<(const ivector& v1, const sivector& v2) {
01074 return fsp_vv_less<ivector,sivector,interval>(v1,v2);
01075 }
01076
01077 inline bool operator<(const srvector& v1, const ivector_slice& v2) {
01078 return spf_vv_less<srvector,ivector_slice,interval>(v1,v2);
01079 }
01080
01081 inline bool operator<(const sivector& v1, const ivector_slice& v2) {
01082 return spf_vv_less<sivector,ivector_slice,interval>(v1,v2);
01083 }
01084
01085 inline bool operator<(const rvector_slice& v1, const sivector& v2) {
01086 return fsp_vv_less<rvector_slice,sivector,interval>(v1,v2);
01087 }
01088
01089 inline bool operator<(const ivector_slice& v1, const sivector& v2) {
01090 return fsp_vv_less<ivector_slice,sivector,interval>(v1,v2);
01091 }
01092
01093 inline bool operator<=(const sivector& v1, const sivector& v2) {
01094 return spsp_vv_leq<sivector,sivector,interval>(v1,v2);
01095 }
01096
01097 inline bool operator<=(const srvector& v1, const sivector& v2) {
01098 return spsp_vv_leq<srvector,sivector,interval>(v1,v2);
01099 }
01100
01101 inline bool operator<=(const srvector& v1, const ivector& v2) {
01102 return spf_vv_leq<srvector,ivector,interval>(v1,v2);
01103 }
01104
01105 inline bool operator<=(const sivector& v1, const ivector& v2) {
01106 return spf_vv_leq<sivector,ivector,interval>(v1,v2);
01107 }
01108
01109 inline bool operator<=(const rvector& v1, const sivector& v2) {
01110 return fsp_vv_leq<rvector,sivector,interval>(v1,v2);
01111 }
01112
01113 inline bool operator<=(const ivector& v1, const sivector& v2) {
01114 return fsp_vv_leq<ivector,sivector,interval>(v1,v2);
01115 }
01116
01117 inline bool operator<=(const srvector& v1, const ivector_slice& v2) {
01118 return spf_vv_leq<srvector,ivector_slice,interval>(v1,v2);
01119 }
01120
01121 inline bool operator<=(const sivector& v1, const ivector_slice& v2) {
01122 return spf_vv_leq<sivector,ivector_slice,interval>(v1,v2);
01123 }
01124
01125 inline bool operator<=(const rvector_slice& v1, const sivector& v2) {
01126 return fsp_vv_leq<rvector_slice,sivector,interval>(v1,v2);
01127 }
01128
01129 inline bool operator<=(const ivector_slice& v1, const sivector& v2) {
01130 return fsp_vv_leq<ivector_slice,sivector,interval>(v1,v2);
01131 }
01132
01133 inline bool operator>(const sivector& v1, const sivector& v2) {
01134 return spsp_vv_greater<sivector,sivector,interval>(v1,v2);
01135 }
01136
01137 inline bool operator>(const sivector& v1, const srvector& v2) {
01138 return spsp_vv_greater<sivector,srvector,interval>(v1,v2);
01139 }
01140
01141 inline bool operator>(const sivector& v1, const rvector& v2) {
01142 return spf_vv_greater<sivector,rvector,interval>(v1,v2);
01143 }
01144
01145 inline bool operator>(const sivector& v1, const ivector& v2) {
01146 return spf_vv_greater<sivector,ivector,interval>(v1,v2);
01147 }
01148
01149 inline bool operator>(const ivector& v1, const srvector& v2) {
01150 return fsp_vv_greater<ivector,srvector,interval>(v1,v2);
01151 }
01152
01153 inline bool operator>(const ivector& v1, const sivector& v2) {
01154 return fsp_vv_greater<ivector,sivector,interval>(v1,v2);
01155 }
01156
01157 inline bool operator>(const sivector& v1, const rvector_slice& v2) {
01158 return spf_vv_greater<sivector,rvector_slice,interval>(v1,v2);
01159 }
01160
01161 inline bool operator>(const sivector& v1, const ivector_slice& v2) {
01162 return spf_vv_greater<sivector,ivector_slice,interval>(v1,v2);
01163 }
01164
01165 inline bool operator>(const ivector_slice& v1, const srvector& v2) {
01166 return fsp_vv_greater<ivector_slice,srvector,interval>(v1,v2);
01167 }
01168
01169 inline bool operator>(const ivector_slice& v1, const sivector& v2) {
01170 return fsp_vv_greater<ivector_slice,sivector,interval>(v1,v2);
01171 }
01172
01173 inline bool operator>=(const sivector& v1, const sivector& v2) {
01174 return spsp_vv_geq<sivector,sivector,interval>(v1,v2);
01175 }
01176
01177 inline bool operator>=(const sivector& v1, const srvector& v2) {
01178 return spsp_vv_geq<sivector,srvector,interval>(v1,v2);
01179 }
01180
01181 inline bool operator>=(const sivector& v1, const rvector& v2) {
01182 return spf_vv_geq<sivector,rvector,interval>(v1,v2);
01183 }
01184
01185 inline bool operator>=(const sivector& v1, const ivector& v2) {
01186 return spf_vv_geq<sivector,ivector,interval>(v1,v2);
01187 }
01188
01189 inline bool operator>=(const ivector& v1, const srvector& v2) {
01190 return fsp_vv_geq<ivector,srvector,interval>(v1,v2);
01191 }
01192
01193 inline bool operator>=(const ivector& v1, const sivector& v2) {
01194 return fsp_vv_geq<ivector,sivector,interval>(v1,v2);
01195 }
01196
01197 inline bool operator>=(const sivector& v1, const rvector_slice& v2) {
01198 return spf_vv_geq<sivector,rvector_slice,interval>(v1,v2);
01199 }
01200
01201 inline bool operator>=(const sivector& v1, const ivector_slice& v2) {
01202 return spf_vv_geq<sivector,ivector_slice,interval>(v1,v2);
01203 }
01204
01205 inline bool operator>=(const ivector_slice& v1, const srvector& v2) {
01206 return fsp_vv_geq<ivector_slice,srvector,interval>(v1,v2);
01207 }
01208
01209 inline bool operator>=(const ivector_slice& v1, const sivector& v2) {
01210 return fsp_vv_geq<ivector_slice,sivector,interval>(v1,v2);
01211 }
01212
01213 inline std::ostream& operator<<(std::ostream& os, const sivector& v) {
01214 return sp_v_output<sivector,interval>(os,v);
01215 }
01216
01217 inline std::istream& operator>>(std::istream& is, sivector& v) {
01218 return sp_v_input<sivector,interval>(is,v);
01219 }
01220
01221
01222 class sivector_slice {
01223 private:
01224 std::vector<int>& p;
01225 std::vector<interval>& x;
01226 sivector& orig;
01227 int start,end;
01228 int lb;
01229 int ub;
01230 int n;
01231 int nnz;
01232 int offset;
01233
01234 sivector_slice(sivector& v, int l, int u) : p(v.p), x(v.x), orig(v), lb(l), ub(u), n(u-l+1) {
01235 int i;
01236
01237 for(i=0 ; i<v.get_nnz() && p[i]<lb-v.lb ; i++);
01238
01239 start = i;
01240
01241 for(i=start ; i<v.get_nnz() && p[i]<=ub-v.lb ; i++);
01242
01243 end = i-1;
01244
01245 nnz = end-start+1;
01246 offset = lb-v.lb;
01247 }
01248
01249 public:
01250
01251 int get_nnz() const {
01252 return nnz;
01253 }
01254
01255 real density() const {
01256 return (double)nnz/n;
01257 }
01258
01259 interval& operator[](const int i) {
01260 #if(CXSC_INDEX_CHECK)
01261 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector_slice::operator[](const int)"));
01262 #endif
01263 int k;
01264
01265 for(k=start ; k<end+1 && p[k]-start<=i-lb ; k++) {
01266 if(p[k]-offset == i-lb)
01267 return x[k];
01268 }
01269
01270 p.insert(p.begin() + k, i-lb);
01271 x.insert(x.begin() + k, interval(0.0));
01272 end++;
01273
01274 return x[k];
01275 }
01276
01277 interval operator[](const int i) const {
01278 #if(CXSC_INDEX_CHECK)
01279 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector_slice::operator[](const int)"));
01280 #endif
01281 return (*this)(i);
01282 }
01283
01284 interval operator()(const int i) const {
01285 #if(CXSC_INDEX_CHECK)
01286 if(i<lb || i>ub) cxscthrow(ELEMENT_NOT_IN_VEC("srvector_slice::operator()(const int)"));
01287 #endif
01288 interval r(0.0);
01289
01290 for(int k=start ; k<end && p[k]-start<=i-lb ; k++) {
01291 if(p[k]-start == i-lb)
01292 r = x[k];
01293 }
01294
01295 return r;
01296 }
01297
01298 sivector_slice& operator=(const real& v) {
01299 return sl_vs_assign<sivector_slice,real,interval,std::vector<interval>::iterator>(*this,v);
01300 }
01301
01302 sivector_slice& operator=(const interval& v) {
01303 return sl_vs_assign<sivector_slice,interval,interval,std::vector<interval>::iterator>(*this,v);
01304 }
01305
01306 sivector_slice& operator=(const srvector_slice& v) {
01307 return slsl_vv_assign<sivector_slice,srvector_slice,interval,std::vector<interval>::iterator>(*this,v);
01308 }
01309
01310 sivector_slice& operator=(const sivector_slice& v) {
01311 return slsl_vv_assign<sivector_slice,sivector_slice,interval,std::vector<interval>::iterator>(*this,v);
01312 }
01313
01314 sivector_slice& operator=(const srvector& v) {
01315 return slsp_vv_assign<sivector_slice,srvector,interval,std::vector<interval>::iterator>(*this,v);
01316 }
01317
01318 sivector_slice& operator=(const sivector& v) {
01319 return slsp_vv_assign<sivector_slice,sivector,interval,std::vector<interval>::iterator>(*this,v);
01320 }
01321
01322 sivector_slice& operator=(const rvector& v) {
01323 return slf_vv_assign<sivector_slice,rvector,interval,std::vector<interval>::iterator>(*this,v);
01324 }
01325
01326 sivector_slice& operator=(const ivector& v) {
01327 return slf_vv_assign<sivector_slice,ivector,interval,std::vector<interval>::iterator>(*this,v);
01328 }
01329
01330 sivector_slice& operator=(const rvector_slice& v) {
01331 return slf_vv_assign<sivector_slice,rvector_slice,interval,std::vector<interval>::iterator>(*this,v);
01332 }
01333
01334 sivector_slice& operator=(const ivector_slice& v) {
01335 return slf_vv_assign<sivector_slice,ivector_slice,interval,std::vector<interval>::iterator>(*this,v);
01336 }
01337
01338 sivector_slice& operator*=(const real& s) {
01339 return sl_vs_multassign(*this,s);
01340 }
01341
01342 sivector_slice& operator*=(const interval& s) {
01343 return sl_vs_multassign(*this,s);
01344 }
01345
01346 sivector_slice& operator/=(const real& s) {
01347 return sl_vs_divassign(*this,s);
01348 }
01349
01350 sivector_slice& operator/=(const interval& s) {
01351 return sl_vs_divassign(*this,s);
01352 }
01353
01354 sivector_slice& operator+=(const rvector& v) {
01355 return slf_vv_addassign<sivector_slice,rvector,interval>(*this,v);
01356 }
01357
01358 sivector_slice& operator+=(const ivector& v) {
01359 return slf_vv_addassign<sivector_slice,ivector,interval>(*this,v);
01360 }
01361
01362 sivector_slice& operator+=(const rvector_slice& v) {
01363 return slf_vv_addassign<sivector_slice,rvector_slice,interval>(*this,v);
01364 }
01365
01366 sivector_slice& operator+=(const ivector_slice& v) {
01367 return slf_vv_addassign<sivector_slice,ivector_slice,interval>(*this,v);
01368 }
01369
01370 sivector_slice& operator+=(const srvector& v) {
01371 return slsp_vv_addassign(*this,v);
01372 }
01373
01374 sivector_slice& operator+=(const sivector& v) {
01375 return slsp_vv_addassign(*this,v);
01376 }
01377
01378 sivector_slice& operator+=(const srvector_slice& v) {
01379 return slsl_vv_addassign(*this,v);
01380 }
01381
01382 sivector_slice& operator+=(const sivector_slice& v) {
01383 return slsl_vv_addassign(*this,v);
01384 }
01385
01386 sivector_slice& operator-=(const rvector& v) {
01387 return slf_vv_subassign<sivector_slice,rvector,interval>(*this,v);
01388 }
01389
01390 sivector_slice& operator-=(const ivector& v) {
01391 return slf_vv_subassign<sivector_slice,ivector,interval>(*this,v);
01392 }
01393
01394 sivector_slice& operator-=(const rvector_slice& v) {
01395 return slf_vv_subassign<sivector_slice,rvector_slice,interval>(*this,v);
01396 }
01397
01398 sivector_slice& operator-=(const ivector_slice& v) {
01399 return slf_vv_subassign<sivector_slice,ivector_slice,interval>(*this,v);
01400 }
01401
01402 sivector_slice& operator-=(const srvector& v) {
01403 return slsp_vv_subassign(*this,v);
01404 }
01405
01406 sivector_slice& operator-=(const sivector& v) {
01407 return slsp_vv_subassign(*this,v);
01408 }
01409
01410 sivector_slice& operator-=(const srvector_slice& v) {
01411 return slsl_vv_subassign(*this,v);
01412 }
01413
01414 sivector_slice& operator-=(const sivector_slice& v) {
01415 return slsl_vv_subassign(*this,v);
01416 }
01417
01418 sivector_slice& operator|=(const rvector& v) {
01419 return slf_vv_hullassign<sivector_slice,rvector,interval>(*this,v);
01420 }
01421
01422 sivector_slice& operator|=(const ivector& v) {
01423 return slf_vv_hullassign<sivector_slice,ivector,interval>(*this,v);
01424 }
01425
01426 sivector_slice& operator|=(const rvector_slice& v) {
01427 return slf_vv_hullassign<sivector_slice,rvector_slice,interval>(*this,v);
01428 }
01429
01430 sivector_slice& operator|=(const ivector_slice& v) {
01431 return slf_vv_hullassign<sivector_slice,ivector_slice,interval>(*this,v);
01432 }
01433
01434 sivector_slice& operator|=(const srvector& v) {
01435 return slsp_vv_hullassign(*this,v);
01436 }
01437
01438 sivector_slice& operator|=(const sivector& v) {
01439 return slsp_vv_hullassign(*this,v);
01440 }
01441
01442 sivector_slice& operator|=(const srvector_slice& v) {
01443 return slsl_vv_hullassign(*this,v);
01444 }
01445
01446 sivector_slice& operator|=(const sivector_slice& v) {
01447 return slsl_vv_hullassign(*this,v);
01448 }
01449
01450 sivector_slice& operator&=(const ivector& v) {
01451 return slf_vv_intersectassign<sivector_slice,ivector,interval>(*this,v);
01452 }
01453
01454 sivector_slice& operator&=(const ivector_slice& v) {
01455 return slf_vv_intersectassign<sivector_slice,ivector_slice,interval>(*this,v);
01456 }
01457
01458 sivector_slice& operator&=(const sivector& v) {
01459 return slsp_vv_intersectassign(*this,v);
01460 }
01461
01462 sivector_slice& operator&=(const sivector_slice& v) {
01463 return slsl_vv_intersectassign(*this,v);
01464 }
01465
01466 friend int Lb(const sivector_slice&);
01467 friend int Ub(const sivector_slice&);
01468 friend srvector Inf(const sivector_slice&);
01469 friend srvector Sup(const sivector_slice&);
01470 friend sivector abs(const sivector_slice&);
01471 friend srvector mid(const sivector_slice&);
01472 friend srvector diam(const sivector_slice&);
01473 friend int VecLen(const sivector_slice&);
01474
01475
01476
01477
01478 friend class srvector;
01479 friend class sivector;
01480 friend class scivector;
01481 friend class ivector;
01482 friend class ivector_slice;
01483 friend class civector;
01484 friend class civector_slice;
01485
01486 #include "vector_friend_declarations.inl"
01487 };
01488
01489 inline ivector::ivector(const srvector_slice& v) {
01490 l = v.lb;
01491 u = v.ub;
01492 size = v.n;
01493 dat = new interval[v.n];
01494 for(int i=0 ; i<v.n ; i++)
01495 dat[i] = 0.0;
01496 for(int i=v.start ; i<=v.end ; i++)
01497 dat[v.p[i]] = v.x[i];
01498 }
01499
01500 inline ivector::ivector(const sivector_slice& v) {
01501 l = v.lb;
01502 u = v.ub;
01503 size = v.n;
01504 dat = new interval[v.n];
01505 for(int i=0 ; i<v.n ; i++)
01506 dat[i] = 0.0;
01507 for(int i=v.start ; i<=v.end ; i++)
01508 dat[v.p[i]] = v.x[i];
01509 }
01510
01511 inline ivector_slice& ivector_slice::operator=(const srvector& v) {
01512 *this = rvector(v);
01513 return *this;
01514 }
01515
01516 inline ivector_slice& ivector_slice::operator=(const srvector_slice& v) {
01517 *this = rvector(v);
01518 return *this;
01519 }
01520
01521 inline ivector_slice& ivector_slice::operator=(const sivector& v) {
01522 *this = ivector(v);
01523 return *this;
01524 }
01525
01526 inline ivector_slice& ivector_slice::operator=(const sivector_slice& v) {
01527 *this = ivector(v);
01528 return *this;
01529 }
01530
01531 inline sivector::sivector(const srvector_slice& s) : lb(s.lb), ub(s.ub), n(s.n) {
01532 p.reserve(s.nnz);
01533 x.reserve(s.nnz);
01534
01535 for(int i=s.start ; i<=s.end ; i++) {
01536 p.push_back(s.p[i]-s.offset);
01537 x.push_back(interval(s.x[i]));
01538 }
01539
01540 }
01541
01542 inline sivector::sivector(const sivector_slice& s) : lb(s.lb), ub(s.ub), n(s.n) {
01543 p.reserve(s.nnz);
01544 x.reserve(s.nnz);
01545
01546 for(int i=s.start ; i<=s.end ; i++) {
01547 p.push_back(s.p[i]-s.offset);
01548 x.push_back(s.x[i]);
01549 }
01550
01551 }
01552
01553 inline sivector& sivector::operator=(const srvector_slice& v) {
01554 return spsl_vv_assign<sivector,srvector_slice,interval>(*this,v);
01555 }
01556
01557 inline sivector& sivector::operator=(const sivector_slice& v) {
01558 return spsl_vv_assign<sivector,sivector_slice,interval>(*this,v);
01559 }
01560
01561 inline sivector_slice sivector::operator()(const int i, const int j) {
01562 #if(CXSC_INDEX_CHECK)
01563 if(i<lb || j>ub) cxscthrow(ELEMENT_NOT_IN_VEC("sivector::operator()(const int,const int)"));
01564 #endif
01565 return sivector_slice(*this,i,j);
01566 }
01567
01568 inline sivector operator-(const sivector_slice& v) {
01569 return sl_v_negative<sivector_slice,sivector>(v);
01570 }
01571
01572 inline int Lb(const sivector_slice& v) {
01573 return v.lb;
01574 }
01575
01576 inline int Ub(const sivector_slice& v) {
01577 return v.ub;
01578 }
01579
01580 inline srvector Inf(const sivector_slice& v) {
01581 return Inf(sivector(v));
01582 }
01583
01584 inline srvector Sup(const sivector_slice& v) {
01585 return Sup(sivector(v));
01586 }
01587
01588 inline sivector abs(const sivector_slice& v) {
01589 sivector res(v.n, v.nnz);
01590 res.lb = v.lb;
01591 res.ub = v.ub;
01592 res.p = v.p;
01593 for(int i=v.start ; i<=v.end ; i++)
01594 res.x.push_back(abs(v.x[i]));
01595 return res;
01596 }
01597
01598 inline srvector mid(const sivector_slice& v) {
01599 srvector res(v.n, v.nnz);
01600 res.lb = v.lb;
01601 res.ub = v.ub;
01602 res.p = v.p;
01603 for(int i=v.start ; i<=v.end ; i++)
01604 res.x.push_back(mid(v.x[i]));
01605 return res;
01606 }
01607
01608 inline srvector diam(const sivector_slice& v) {
01609 srvector res(v.n, v.nnz);
01610 res.lb = v.lb;
01611 res.ub = v.ub;
01612 res.p = v.p;
01613 for(int i=v.start ; i<v.end ; i++)
01614 res.x.push_back(diam(v.x[i]));
01615 return res;
01616 }
01617
01618 inline int VecLen(const sivector_slice& v) {
01619 return v.n;
01620 }
01621
01622 inline interval operator*(const sivector_slice& v1, const rvector& v2) {
01623 return slf_vv_mult<sivector_slice,rvector,interval,sparse_idot>(v1,v2);
01624 }
01625
01626 inline interval operator*(const srvector_slice& v1, const ivector& v2) {
01627 return slf_vv_mult<srvector_slice,ivector,interval,sparse_idot>(v1,v2);
01628 }
01629
01630 inline interval operator*(const sivector_slice& v1, const ivector& v2) {
01631 return slf_vv_mult<sivector_slice,ivector,interval,sparse_idot>(v1,v2);
01632 }
01633
01634 inline interval operator*(const ivector& v1, const srvector_slice& v2) {
01635 return fsl_vv_mult<ivector,srvector_slice,interval,sparse_idot>(v1,v2);
01636 }
01637
01638 inline interval operator*(const rvector& v1, const sivector_slice& v2) {
01639 return fsl_vv_mult<rvector,sivector_slice,interval,sparse_idot>(v1,v2);
01640 }
01641
01642 inline interval operator*(const ivector& v1, const sivector_slice& v2) {
01643 return fsl_vv_mult<ivector,sivector_slice,interval,sparse_idot>(v1,v2);
01644 }
01645
01646 inline interval operator*(const sivector_slice& v1, const rvector_slice& v2) {
01647 return slf_vv_mult<sivector_slice,rvector_slice,interval,sparse_idot>(v1,v2);
01648 }
01649
01650 inline interval operator*(const srvector_slice& v1, const ivector_slice& v2) {
01651 return slf_vv_mult<srvector_slice,ivector_slice,interval,sparse_idot>(v1,v2);
01652 }
01653
01654 inline interval operator*(const sivector_slice& v1, const ivector_slice& v2) {
01655 return slf_vv_mult<sivector_slice,ivector_slice,interval,sparse_idot>(v1,v2);
01656 }
01657
01658 inline interval operator*(const ivector_slice& v1, const srvector_slice& v2) {
01659 return fsl_vv_mult<ivector_slice,srvector_slice,interval,sparse_idot>(v1,v2);
01660 }
01661
01662 inline interval operator*(const rvector_slice& v1, const sivector_slice& v2) {
01663 return fsl_vv_mult<rvector_slice,sivector_slice,interval,sparse_idot>(v1,v2);
01664 }
01665
01666 inline interval operator*(const ivector_slice& v1, const sivector_slice& v2) {
01667 return fsl_vv_mult<ivector_slice,sivector_slice,interval,sparse_idot>(v1,v2);
01668 }
01669
01670 inline interval operator*(const sivector& v1, const srvector_slice& v2) {
01671 return spsl_vv_mult<sivector,srvector_slice,interval,sparse_idot>(v1,v2);
01672 }
01673
01674 inline interval operator*(const srvector& v1, const sivector_slice& v2) {
01675 return spsl_vv_mult<srvector,sivector_slice,interval,sparse_idot>(v1,v2);
01676 }
01677
01678 inline interval operator*(const sivector& v1, const sivector_slice& v2) {
01679 return spsl_vv_mult<sivector,sivector_slice,interval,sparse_idot>(v1,v2);
01680 }
01681
01682 inline interval operator*(const sivector_slice& v1, const srvector& v2) {
01683 return slsp_vv_mult<sivector_slice,srvector,interval,sparse_idot>(v1,v2);
01684 }
01685
01686 inline interval operator*(const srvector_slice& v1, const sivector& v2) {
01687 return slsp_vv_mult<srvector_slice,sivector,interval,sparse_idot>(v1,v2);
01688 }
01689
01690 inline interval operator*(const sivector_slice& v1, const sivector& v2) {
01691 return slsp_vv_mult<sivector_slice,sivector,interval,sparse_idot>(v1,v2);
01692 }
01693
01694 inline interval operator*(const sivector_slice& v1, const srvector_slice& v2) {
01695 return slsl_vv_mult<sivector_slice,srvector_slice,interval,sparse_idot>(v1,v2);
01696 }
01697
01698 inline interval operator*(const srvector_slice& v1, const sivector_slice& v2) {
01699 return slsl_vv_mult<srvector_slice,sivector_slice,interval,sparse_idot>(v1,v2);
01700 }
01701
01702 inline interval operator*(const sivector_slice& v1, const sivector_slice& v2) {
01703 return slsl_vv_mult<sivector_slice,sivector_slice,interval,sparse_idot>(v1,v2);
01704 }
01705
01706 inline sivector operator*(const sivector_slice& v, const real& s) {
01707 return sp_vs_mult<sivector_slice,real,sivector>(v,s);
01708 }
01709
01710 inline sivector operator*(const sivector_slice& v, const interval& s) {
01711 return sp_vs_mult<sivector_slice,interval,sivector>(v,s);
01712 }
01713
01714 inline sivector operator*(const srvector_slice& v, const interval& s) {
01715 return sp_vs_mult<srvector_slice,interval,sivector>(v,s);
01716 }
01717
01718 inline sivector operator/(const sivector_slice& v, const real& s) {
01719 return sp_vs_div<sivector_slice,real,sivector>(v,s);
01720 }
01721
01722 inline sivector operator/(const sivector_slice& v, const interval& s) {
01723 return sp_vs_div<sivector_slice,interval,sivector>(v,s);
01724 }
01725
01726 inline sivector operator/(const srvector_slice& v, const interval& s) {
01727 return sp_vs_div<srvector_slice,interval,sivector>(v,s);
01728 }
01729
01730 inline sivector operator*(const real& s, const sivector_slice& v) {
01731 return sp_sv_mult<real,sivector_slice,sivector>(s,v);
01732 }
01733
01734 inline sivector operator*(const interval& s, const sivector_slice& v) {
01735 return sp_sv_mult<interval,sivector_slice,sivector>(s,v);
01736 }
01737
01738 inline sivector operator*(const interval& s, const srvector_slice& v) {
01739 return sp_sv_mult<interval,srvector_slice,sivector>(s,v);
01740 }
01741
01742 inline ivector operator+(const ivector& v1, const srvector_slice& v2) {
01743 return fsl_vv_add<ivector,srvector_slice,ivector>(v1,v2);
01744 }
01745
01746 inline ivector operator+(const rvector& v1, const sivector_slice& v2) {
01747 return fsl_vv_add<rvector,sivector_slice,ivector>(v1,v2);
01748 }
01749
01750 inline ivector operator+(const ivector& v1, const sivector_slice& v2) {
01751 return fsl_vv_add<ivector,sivector_slice,ivector>(v1,v2);
01752 }
01753
01754 inline ivector operator+(const sivector_slice& v1, const rvector& v2) {
01755 return slf_vv_add<sivector_slice,rvector,ivector>(v1,v2);
01756 }
01757
01758 inline ivector operator+(const srvector_slice& v1, const ivector& v2) {
01759 return slf_vv_add<srvector_slice,ivector,ivector>(v1,v2);
01760 }
01761
01762 inline ivector operator+(const sivector_slice& v1, const ivector& v2) {
01763 return slf_vv_add<sivector_slice,ivector,ivector>(v1,v2);
01764 }
01765
01766 inline ivector operator+(const ivector_slice& v1, const srvector_slice& v2) {
01767 return fsl_vv_add<ivector_slice,srvector_slice,ivector>(v1,v2);
01768 }
01769
01770 inline ivector operator+(const rvector_slice& v1, const sivector_slice& v2) {
01771 return fsl_vv_add<rvector_slice,sivector_slice,ivector>(v1,v2);
01772 }
01773
01774 inline ivector operator+(const ivector_slice& v1, const sivector_slice& v2) {
01775 return fsl_vv_add<ivector_slice,sivector_slice,ivector>(v1,v2);
01776 }
01777
01778 inline ivector operator+(const sivector_slice& v1, const rvector_slice& v2) {
01779 return slf_vv_add<sivector_slice,rvector_slice,ivector>(v1,v2);
01780 }
01781
01782 inline ivector operator+(const srvector_slice& v1, const ivector_slice& v2) {
01783 return slf_vv_add<srvector_slice,ivector_slice,ivector>(v1,v2);
01784 }
01785
01786 inline ivector operator+(const sivector_slice& v1, const ivector_slice& v2) {
01787 return slf_vv_add<sivector_slice,ivector_slice,ivector>(v1,v2);
01788 }
01789
01790 inline sivector operator+(const sivector_slice& v1, const srvector_slice& v2) {
01791 return slsl_vv_add<sivector_slice,srvector_slice,sivector,interval>(v1,v2);
01792 }
01793
01794 inline sivector operator+(const srvector_slice& v1, const sivector_slice& v2) {
01795 return slsl_vv_add<srvector_slice,sivector_slice,sivector,interval>(v1,v2);
01796 }
01797
01798 inline sivector operator+(const sivector_slice& v1, const sivector_slice& v2) {
01799 return slsl_vv_add<sivector_slice,sivector_slice,sivector,interval>(v1,v2);
01800 }
01801
01802 inline sivector operator+(const sivector& v1, const srvector_slice& v2) {
01803 return spsl_vv_add<sivector,srvector_slice,sivector,interval>(v1,v2);
01804 }
01805
01806 inline sivector operator+(const srvector& v1, const sivector_slice& v2) {
01807 return spsl_vv_add<srvector,sivector_slice,sivector,interval>(v1,v2);
01808 }
01809
01810 inline sivector operator+(const sivector& v1, const sivector_slice& v2) {
01811 return spsl_vv_add<sivector,sivector_slice,sivector,interval>(v1,v2);
01812 }
01813
01814 inline sivector operator+(const sivector_slice& v1, const srvector& v2) {
01815 return slsp_vv_add<sivector_slice,srvector,sivector,interval>(v1,v2);
01816 }
01817
01818 inline sivector operator+(const srvector_slice& v1, const sivector& v2) {
01819 return slsp_vv_add<srvector_slice,sivector,sivector,interval>(v1,v2);
01820 }
01821
01822 inline sivector operator+(const sivector_slice& v1, const sivector& v2) {
01823 return slsp_vv_add<sivector_slice,sivector,sivector,interval>(v1,v2);
01824 }
01825
01826 inline ivector operator-(const ivector& v1, const srvector_slice& v2) {
01827 return fsl_vv_sub<ivector,srvector_slice,ivector>(v1,v2);
01828 }
01829
01830 inline ivector operator-(const rvector& v1, const sivector_slice& v2) {
01831 return fsl_vv_sub<rvector,sivector_slice,ivector>(v1,v2);
01832 }
01833
01834 inline ivector operator-(const ivector& v1, const sivector_slice& v2) {
01835 return fsl_vv_sub<ivector,sivector_slice,ivector>(v1,v2);
01836 }
01837
01838 inline ivector operator-(const sivector_slice& v1, const rvector& v2) {
01839 return slf_vv_sub<sivector_slice,rvector,ivector>(v1,v2);
01840 }
01841
01842 inline ivector operator-(const srvector_slice& v1, const ivector& v2) {
01843 return slf_vv_sub<srvector_slice,ivector,ivector>(v1,v2);
01844 }
01845
01846 inline ivector operator-(const sivector_slice& v1, const ivector& v2) {
01847 return slf_vv_sub<sivector_slice,ivector,ivector>(v1,v2);
01848 }
01849
01850 inline ivector operator-(const ivector_slice& v1, const srvector_slice& v2) {
01851 return fsl_vv_sub<ivector_slice,srvector_slice,ivector>(v1,v2);
01852 }
01853
01854 inline ivector operator-(const rvector_slice& v1, const sivector_slice& v2) {
01855 return fsl_vv_sub<rvector_slice,sivector_slice,ivector>(v1,v2);
01856 }
01857
01858 inline ivector operator-(const ivector_slice& v1, const sivector_slice& v2) {
01859 return fsl_vv_sub<ivector_slice,sivector_slice,ivector>(v1,v2);
01860 }
01861
01862 inline ivector operator-(const sivector_slice& v1, const rvector_slice& v2) {
01863 return slf_vv_sub<sivector_slice,rvector_slice,ivector>(v1,v2);
01864 }
01865
01866 inline ivector operator-(const srvector_slice& v1, const ivector_slice& v2) {
01867 return slf_vv_sub<srvector_slice,ivector_slice,ivector>(v1,v2);
01868 }
01869
01870 inline ivector operator-(const sivector_slice& v1, const ivector_slice& v2) {
01871 return slf_vv_sub<sivector_slice,ivector_slice,ivector>(v1,v2);
01872 }
01873
01874 inline sivector operator-(const sivector_slice& v1, const srvector_slice& v2) {
01875 return slsl_vv_sub<sivector_slice,srvector_slice,sivector,interval>(v1,v2);
01876 }
01877
01878 inline sivector operator-(const srvector_slice& v1, const sivector_slice& v2) {
01879 return slsl_vv_sub<srvector_slice,sivector_slice,sivector,interval>(v1,v2);
01880 }
01881
01882 inline sivector operator-(const sivector_slice& v1, const sivector_slice& v2) {
01883 return slsl_vv_sub<sivector_slice,sivector_slice,sivector,interval>(v1,v2);
01884 }
01885
01886 inline sivector operator-(const sivector& v1, const srvector_slice& v2) {
01887 return spsl_vv_sub<sivector,srvector_slice,sivector,interval>(v1,v2);
01888 }
01889
01890 inline sivector operator-(const srvector& v1, const sivector_slice& v2) {
01891 return spsl_vv_sub<srvector,sivector_slice,sivector,interval>(v1,v2);
01892 }
01893
01894 inline sivector operator-(const sivector& v1, const sivector_slice& v2) {
01895 return spsl_vv_sub<sivector,sivector_slice,sivector,interval>(v1,v2);
01896 }
01897
01898 inline sivector operator-(const sivector_slice& v1, const srvector& v2) {
01899 return slsp_vv_sub<sivector_slice,srvector,sivector,interval>(v1,v2);
01900 }
01901
01902 inline sivector operator-(const srvector_slice& v1, const sivector& v2) {
01903 return slsp_vv_sub<srvector_slice,sivector,sivector,interval>(v1,v2);
01904 }
01905
01906 inline sivector operator-(const sivector_slice& v1, const sivector& v2) {
01907 return slsp_vv_sub<sivector_slice,sivector,sivector,interval>(v1,v2);
01908 }
01909
01910 inline ivector operator|(const rvector& v1, const srvector_slice& v2) {
01911 return fsl_vv_hull<rvector,srvector_slice,ivector>(v1,v2);
01912 }
01913
01914 inline ivector operator|(const srvector_slice& v1, const rvector& v2) {
01915 return slf_vv_hull<srvector_slice,rvector,ivector>(v1,v2);
01916 }
01917
01918 inline ivector operator|(const rvector_slice& v1, const srvector_slice& v2) {
01919 return fsl_vv_hull<rvector_slice,srvector_slice,ivector>(v1,v2);
01920 }
01921
01922 inline ivector operator|(const srvector_slice& v1, const rvector_slice& v2) {
01923 return slf_vv_hull<srvector_slice,rvector_slice,ivector>(v1,v2);
01924 }
01925
01926 inline sivector operator|(const srvector_slice& v1, const srvector_slice& v2) {
01927 return slsl_vv_hull<srvector_slice,srvector_slice,sivector,interval>(v1,v2);
01928 }
01929
01930 inline sivector operator|(const srvector& v1, const srvector_slice& v2) {
01931 return spsl_vv_hull<srvector,srvector_slice,sivector,interval>(v1,v2);
01932 }
01933
01934 inline sivector operator|(const srvector_slice& v1, const srvector& v2) {
01935 return slsp_vv_hull<srvector_slice,srvector,sivector,interval>(v1,v2);
01936 }
01937
01938 inline ivector operator|(const ivector& v1, const srvector_slice& v2) {
01939 return fsl_vv_hull<ivector,srvector_slice,ivector>(v1,v2);
01940 }
01941
01942 inline ivector operator|(const rvector& v1, const sivector_slice& v2) {
01943 return fsl_vv_hull<rvector,sivector_slice,ivector>(v1,v2);
01944 }
01945
01946 inline ivector operator|(const ivector& v1, const sivector_slice& v2) {
01947 return fsl_vv_hull<ivector,sivector_slice,ivector>(v1,v2);
01948 }
01949
01950 inline ivector operator|(const sivector_slice& v1, const rvector& v2) {
01951 return slf_vv_hull<sivector_slice,rvector,ivector>(v1,v2);
01952 }
01953
01954 inline ivector operator|(const srvector_slice& v1, const ivector& v2) {
01955 return slf_vv_hull<srvector_slice,ivector,ivector>(v1,v2);
01956 }
01957
01958 inline ivector operator|(const sivector_slice& v1, const ivector& v2) {
01959 return slf_vv_hull<sivector_slice,ivector,ivector>(v1,v2);
01960 }
01961
01962 inline ivector operator|(const ivector_slice& v1, const srvector_slice& v2) {
01963 return fsl_vv_hull<ivector_slice,srvector_slice,ivector>(v1,v2);
01964 }
01965
01966 inline ivector operator|(const rvector_slice& v1, const sivector_slice& v2) {
01967 return fsl_vv_hull<rvector_slice,sivector_slice,ivector>(v1,v2);
01968 }
01969
01970 inline ivector operator|(const ivector_slice& v1, const sivector_slice& v2) {
01971 return fsl_vv_hull<ivector_slice,sivector_slice,ivector>(v1,v2);
01972 }
01973
01974 inline ivector operator|(const sivector_slice& v1, const rvector_slice& v2) {
01975 return slf_vv_hull<sivector_slice,rvector_slice,ivector>(v1,v2);
01976 }
01977
01978 inline ivector operator|(const srvector_slice& v1, const ivector_slice& v2) {
01979 return slf_vv_hull<srvector_slice,ivector_slice,ivector>(v1,v2);
01980 }
01981
01982 inline ivector operator|(const sivector_slice& v1, const ivector_slice& v2) {
01983 return slf_vv_hull<sivector_slice,ivector_slice,ivector>(v1,v2);
01984 }
01985
01986 inline sivector operator|(const sivector_slice& v1, const srvector_slice& v2) {
01987 return slsl_vv_hull<sivector_slice,srvector_slice,sivector,interval>(v1,v2);
01988 }
01989
01990 inline sivector operator|(const srvector_slice& v1, const sivector_slice& v2) {
01991 return slsl_vv_hull<srvector_slice,sivector_slice,sivector,interval>(v1,v2);
01992 }
01993
01994 inline sivector operator|(const sivector_slice& v1, const sivector_slice& v2) {
01995 return slsl_vv_hull<sivector_slice,sivector_slice,sivector,interval>(v1,v2);
01996 }
01997
01998 inline sivector operator|(const sivector& v1, const srvector_slice& v2) {
01999 return spsl_vv_hull<sivector,srvector_slice,sivector,interval>(v1,v2);
02000 }
02001
02002 inline sivector operator|(const srvector& v1, const sivector_slice& v2) {
02003 return spsl_vv_hull<srvector,sivector_slice,sivector,interval>(v1,v2);
02004 }
02005
02006 inline sivector operator|(const sivector& v1, const sivector_slice& v2) {
02007 return spsl_vv_hull<sivector,sivector_slice,sivector,interval>(v1,v2);
02008 }
02009
02010 inline sivector operator|(const sivector_slice& v1, const srvector& v2) {
02011 return slsp_vv_hull<sivector_slice,srvector,sivector,interval>(v1,v2);
02012 }
02013
02014 inline sivector operator|(const srvector_slice& v1, const sivector& v2) {
02015 return slsp_vv_hull<srvector_slice,sivector,sivector,interval>(v1,v2);
02016 }
02017
02018 inline sivector operator|(const sivector_slice& v1, const sivector& v2) {
02019 return slsp_vv_hull<sivector_slice,sivector,sivector,interval>(v1,v2);
02020 }
02021
02022 inline ivector operator&(const ivector& v1, const sivector_slice& v2) {
02023 return fsl_vv_intersect<ivector,sivector_slice,ivector>(v1,v2);
02024 }
02025
02026 inline ivector operator&(const sivector_slice& v1, const ivector& v2) {
02027 return slf_vv_intersect<sivector_slice,ivector,ivector>(v1,v2);
02028 }
02029
02030 inline ivector operator&(const ivector_slice& v1, const sivector_slice& v2) {
02031 return fsl_vv_intersect<ivector_slice,sivector_slice,ivector>(v1,v2);
02032 }
02033
02034 inline ivector operator&(const sivector_slice& v1, const ivector_slice& v2) {
02035 return slf_vv_intersect<sivector_slice,ivector_slice,ivector>(v1,v2);
02036 }
02037
02038 inline sivector operator&(const sivector_slice& v1, const sivector_slice& v2) {
02039 return slsl_vv_intersect<sivector_slice,sivector_slice,sivector,interval>(v1,v2);
02040 }
02041
02042 inline sivector operator&(const sivector& v1, const sivector_slice& v2) {
02043 return spsl_vv_intersect<sivector,sivector_slice,sivector,interval>(v1,v2);
02044 }
02045
02046 inline sivector operator&(const sivector_slice& v1, const sivector& v2) {
02047 return slsp_vv_intersect<sivector_slice,sivector,sivector,interval>(v1,v2);
02048 }
02049
02050 inline ivector& ivector::operator+=(const srvector_slice& v2) {
02051 return fsl_vv_addassign(*this,v2);
02052 }
02053
02054 inline ivector& ivector::operator+=(const sivector_slice& v2) {
02055 return fsl_vv_addassign(*this,v2);
02056 }
02057
02058 inline ivector_slice& ivector_slice::operator+=(const srvector_slice& v2) {
02059 return fsl_vv_addassign(*this,v2);
02060 }
02061
02062 inline ivector_slice& ivector_slice::operator+=(const sivector_slice& v2) {
02063 return fsl_vv_addassign(*this,v2);
02064 }
02065
02066 inline sivector& sivector::operator+=(const srvector_slice& v2) {
02067 return spsl_vv_addassign(*this,v2);
02068 }
02069
02070 inline sivector& sivector::operator+=(const sivector_slice& v2) {
02071 return spsl_vv_addassign(*this,v2);
02072 }
02073
02074 inline ivector& ivector::operator-=(const srvector_slice& v2) {
02075 return fsl_vv_subassign(*this,v2);
02076 }
02077
02078 inline ivector& ivector::operator-=(const sivector_slice& v2) {
02079 return fsl_vv_subassign(*this,v2);
02080 }
02081
02082 inline ivector_slice& ivector_slice::operator-=(const srvector_slice& v2) {
02083 return fsl_vv_subassign(*this,v2);
02084 }
02085
02086 inline ivector_slice& ivector_slice::operator-=(const sivector_slice& v2) {
02087 return fsl_vv_subassign(*this,v2);
02088 }
02089
02090 inline sivector& sivector::operator-=(const srvector_slice& v2) {
02091 return spsl_vv_subassign(*this,v2);
02092 }
02093
02094 inline sivector& sivector::operator-=(const sivector_slice& v2) {
02095 return spsl_vv_subassign(*this,v2);
02096 }
02097
02098 inline ivector& ivector::operator|=(const srvector_slice& v2) {
02099 return fsl_vv_hullassign(*this,v2);
02100 }
02101
02102 inline ivector& ivector::operator|=(const sivector_slice& v2) {
02103 return fsl_vv_hullassign(*this,v2);
02104 }
02105
02106 inline ivector_slice& ivector_slice::operator|=(const srvector_slice& v2) {
02107 return fsl_vv_hullassign(*this,v2);
02108 }
02109
02110 inline ivector_slice& ivector_slice::operator|=(const sivector_slice& v2) {
02111 return fsl_vv_hullassign(*this,v2);
02112 }
02113
02114 inline ivector& ivector::operator&=(const sivector_slice& v2) {
02115 return fsl_vv_intersectassign(*this,v2);
02116 }
02117
02118 inline ivector_slice& ivector_slice::operator&=(const sivector_slice& v2) {
02119 return fsl_vv_intersectassign(*this,v2);
02120 }
02121
02122 inline bool operator==(const sivector_slice& v1, const srvector_slice& v2) {
02123 return slsl_vv_comp(v1,v2);
02124 }
02125
02126 inline bool operator==(const srvector_slice& v1, const sivector_slice& v2) {
02127 return slsl_vv_comp(v1,v2);
02128 }
02129
02130 inline bool operator==(const sivector_slice& v1, const sivector_slice& v2) {
02131 return slsl_vv_comp(v1,v2);
02132 }
02133
02134 inline bool operator==(const sivector_slice& v1, const srvector& v2) {
02135 return slsp_vv_comp(v1,v2);
02136 }
02137
02138 inline bool operator==(const srvector_slice& v1, const sivector& v2) {
02139 return slsp_vv_comp(v1,v2);
02140 }
02141
02142 inline bool operator==(const sivector_slice& v1, const sivector& v2) {
02143 return slsp_vv_comp(v1,v2);
02144 }
02145
02146 inline bool operator==(const sivector& v1, const srvector_slice& v2) {
02147 return spsl_vv_comp(v1,v2);
02148 }
02149
02150 inline bool operator==(const srvector& v1, const sivector_slice& v2) {
02151 return spsl_vv_comp(v1,v2);
02152 }
02153
02154 inline bool operator==(const sivector& v1, const sivector_slice& v2) {
02155 return spsl_vv_comp(v1,v2);
02156 }
02157
02158 inline bool operator==(const sivector_slice& v1, const rvector& v2) {
02159 return slf_vv_comp(v1,v2);
02160 }
02161
02162 inline bool operator==(const srvector_slice& v1, const ivector& v2) {
02163 return slf_vv_comp(v1,v2);
02164 }
02165
02166 inline bool operator==(const sivector_slice& v1, const ivector& v2) {
02167 return slf_vv_comp(v1,v2);
02168 }
02169
02170 inline bool operator==(const ivector& v1, const srvector_slice& v2) {
02171 return fsl_vv_comp(v1,v2);
02172 }
02173
02174 inline bool operator==(const rvector& v1, const sivector_slice& v2) {
02175 return fsl_vv_comp(v1,v2);
02176 }
02177
02178 inline bool operator==(const ivector& v1, const sivector_slice& v2) {
02179 return fsl_vv_comp(v1,v2);
02180 }
02181
02182 inline bool operator==(const sivector_slice& v1, const rvector_slice& v2) {
02183 return slf_vv_comp(v1,v2);
02184 }
02185
02186 inline bool operator==(const srvector_slice& v1, const ivector_slice& v2) {
02187 return slf_vv_comp(v1,v2);
02188 }
02189
02190 inline bool operator==(const sivector_slice& v1, const ivector_slice& v2) {
02191 return slf_vv_comp(v1,v2);
02192 }
02193
02194 inline bool operator==(const ivector_slice& v1, const srvector_slice& v2) {
02195 return fsl_vv_comp(v1,v2);
02196 }
02197
02198 inline bool operator==(const rvector_slice& v1, const sivector_slice& v2) {
02199 return fsl_vv_comp(v1,v2);
02200 }
02201
02202 inline bool operator==(const ivector_slice& v1, const sivector_slice& v2) {
02203 return fsl_vv_comp(v1,v2);
02204 }
02205
02206 inline bool operator!=(const sivector_slice& v1, const srvector_slice& v2) {
02207 return !slsl_vv_comp(v1,v2);
02208 }
02209
02210 inline bool operator!=(const srvector_slice& v1, const sivector_slice& v2) {
02211 return !slsl_vv_comp(v1,v2);
02212 }
02213
02214 inline bool operator!=(const sivector_slice& v1, const sivector_slice& v2) {
02215 return !slsl_vv_comp(v1,v2);
02216 }
02217
02218 inline bool operator!=(const sivector_slice& v1, const rvector& v2) {
02219 return !slf_vv_comp(v1,v2);
02220 }
02221
02222 inline bool operator!=(const srvector_slice& v1, const ivector& v2) {
02223 return !slf_vv_comp(v1,v2);
02224 }
02225
02226 inline bool operator!=(const sivector_slice& v1, const ivector& v2) {
02227 return !slf_vv_comp(v1,v2);
02228 }
02229
02230 inline bool operator!=(const ivector& v1, const srvector_slice& v2) {
02231 return !fsl_vv_comp(v1,v2);
02232 }
02233
02234 inline bool operator!=(const rvector& v1, const sivector_slice& v2) {
02235 return !fsl_vv_comp(v1,v2);
02236 }
02237
02238 inline bool operator!=(const ivector& v1, const sivector_slice& v2) {
02239 return !fsl_vv_comp(v1,v2);
02240 }
02241
02242 inline bool operator!=(const sivector_slice& v1, const srvector& v2) {
02243 return !slsp_vv_comp(v1,v2);
02244 }
02245
02246 inline bool operator!=(const srvector_slice& v1, const sivector& v2) {
02247 return !slsp_vv_comp(v1,v2);
02248 }
02249
02250 inline bool operator!=(const sivector_slice& v1, const sivector& v2) {
02251 return !slsp_vv_comp(v1,v2);
02252 }
02253
02254 inline bool operator!=(const sivector& v1, const srvector_slice& v2) {
02255 return !spsl_vv_comp(v1,v2);
02256 }
02257
02258 inline bool operator!=(const srvector& v1, const sivector_slice& v2) {
02259 return !spsl_vv_comp(v1,v2);
02260 }
02261
02262 inline bool operator!=(const sivector& v1, const sivector_slice& v2) {
02263 return !spsl_vv_comp(v1,v2);
02264 }
02265
02266 inline bool operator!=(const sivector_slice& v1, const rvector_slice& v2) {
02267 return !slf_vv_comp(v1,v2);
02268 }
02269
02270 inline bool operator!=(const srvector_slice& v1, const ivector_slice& v2) {
02271 return !slf_vv_comp(v1,v2);
02272 }
02273
02274 inline bool operator!=(const sivector_slice& v1, const ivector_slice& v2) {
02275 return !slf_vv_comp(v1,v2);
02276 }
02277
02278 inline bool operator!=(const ivector_slice& v1, const srvector_slice& v2) {
02279 return !fsl_vv_comp(v1,v2);
02280 }
02281
02282 inline bool operator!=(const rvector_slice& v1, const sivector_slice& v2) {
02283 return !fsl_vv_comp(v1,v2);
02284 }
02285
02286 inline bool operator!=(const ivector_slice& v1, const sivector_slice& v2) {
02287 return !fsl_vv_comp(v1,v2);
02288 }
02289
02290 inline bool operator<(const srvector_slice& v1, const sivector_slice& v2) {
02291 return slsl_vv_less<srvector_slice,sivector_slice,interval>(v1,v2);
02292 }
02293
02294 inline bool operator<(const sivector_slice& v1, const sivector_slice& v2) {
02295 return slsl_vv_less<sivector_slice,sivector_slice,interval>(v1,v2);
02296 }
02297
02298 inline bool operator<(const srvector_slice& v1, const sivector& v2) {
02299 return slsp_vv_less<srvector_slice,sivector,interval>(v1,v2);
02300 }
02301
02302 inline bool operator<(const sivector_slice& v1, const sivector& v2) {
02303 return slsp_vv_less<sivector_slice,sivector,interval>(v1,v2);
02304 }
02305
02306 inline bool operator<(const srvector& v1, const sivector_slice& v2) {
02307 return spsl_vv_less<srvector,sivector_slice,interval>(v1,v2);
02308 }
02309
02310 inline bool operator<(const sivector& v1, const sivector_slice& v2) {
02311 return spsl_vv_less<sivector,sivector_slice,interval>(v1,v2);
02312 }
02313
02314 inline bool operator<(const srvector_slice& v1, const ivector& v2) {
02315 return slf_vv_less<srvector_slice,ivector,interval>(v1,v2);
02316 }
02317
02318 inline bool operator<(const sivector_slice& v1, const ivector& v2) {
02319 return slf_vv_less<sivector_slice,ivector,interval>(v1,v2);
02320 }
02321
02322 inline bool operator<(const rvector& v1, const sivector_slice& v2) {
02323 return fsl_vv_less<rvector,sivector_slice,interval>(v1,v2);
02324 }
02325
02326 inline bool operator<(const ivector& v1, const sivector_slice& v2) {
02327 return fsl_vv_less<ivector,sivector_slice,interval>(v1,v2);
02328 }
02329
02330 inline bool operator<(const srvector_slice& v1, const ivector_slice& v2) {
02331 return slf_vv_less<srvector_slice,ivector_slice,interval>(v1,v2);
02332 }
02333
02334 inline bool operator<(const sivector_slice& v1, const ivector_slice& v2) {
02335 return slf_vv_less<sivector_slice,ivector_slice,interval>(v1,v2);
02336 }
02337
02338 inline bool operator<(const rvector_slice& v1, const sivector_slice& v2) {
02339 return fsl_vv_less<rvector_slice,sivector_slice,interval>(v1,v2);
02340 }
02341
02342 inline bool operator<(const ivector_slice& v1, const sivector_slice& v2) {
02343 return fsl_vv_less<ivector_slice,sivector_slice,interval>(v1,v2);
02344 }
02345
02346 inline bool operator<=(const sivector_slice& v1, const sivector_slice& v2) {
02347 return slsl_vv_leq<sivector_slice,sivector_slice,interval>(v1,v2);
02348 }
02349 inline bool operator<=(const srvector_slice& v1, const sivector& v2) {
02350 return slsp_vv_leq<srvector_slice,sivector,interval>(v1,v2);
02351 }
02352
02353 inline bool operator<=(const sivector_slice& v1, const sivector& v2) {
02354 return slsp_vv_leq<sivector_slice,sivector,interval>(v1,v2);
02355 }
02356
02357 inline bool operator<=(const srvector& v1, const sivector_slice& v2) {
02358 return spsl_vv_leq<srvector,sivector_slice,interval>(v1,v2);
02359 }
02360
02361 inline bool operator<=(const sivector& v1, const sivector_slice& v2) {
02362 return spsl_vv_leq<sivector,sivector_slice,interval>(v1,v2);
02363 }
02364
02365 inline bool operator<=(const srvector_slice& v1, const ivector& v2) {
02366 return slf_vv_leq<srvector_slice,ivector,interval>(v1,v2);
02367 }
02368
02369 inline bool operator<=(const sivector_slice& v1, const ivector& v2) {
02370 return slf_vv_leq<sivector_slice,ivector,interval>(v1,v2);
02371 }
02372
02373 inline bool operator<=(const rvector& v1, const sivector_slice& v2) {
02374 return fsl_vv_leq<rvector,sivector_slice,interval>(v1,v2);
02375 }
02376
02377 inline bool operator<=(const ivector& v1, const sivector_slice& v2) {
02378 return fsl_vv_leq<ivector,sivector_slice,interval>(v1,v2);
02379 }
02380
02381 inline bool operator<=(const srvector_slice& v1, const ivector_slice& v2) {
02382 return slf_vv_leq<srvector_slice,ivector_slice,interval>(v1,v2);
02383 }
02384
02385 inline bool operator<=(const sivector_slice& v1, const ivector_slice& v2) {
02386 return slf_vv_leq<sivector_slice,ivector_slice,interval>(v1,v2);
02387 }
02388
02389 inline bool operator<=(const rvector_slice& v1, const sivector_slice& v2) {
02390 return fsl_vv_leq<rvector_slice,sivector_slice,interval>(v1,v2);
02391 }
02392
02393 inline bool operator<=(const ivector_slice& v1, const sivector_slice& v2) {
02394 return fsl_vv_leq<ivector_slice,sivector_slice,interval>(v1,v2);
02395 }
02396
02397 inline bool operator>(const sivector_slice& v1, const srvector_slice& v2) {
02398 return slsl_vv_greater<sivector_slice,srvector_slice,interval>(v1,v2);
02399 }
02400
02401 inline bool operator>(const sivector_slice& v1, const sivector_slice& v2) {
02402 return slsl_vv_greater<sivector_slice,sivector_slice,interval>(v1,v2);
02403 }
02404
02405 inline bool operator>(const sivector_slice& v1, const srvector& v2) {
02406 return slsp_vv_greater<sivector_slice,srvector,interval>(v1,v2);
02407 }
02408
02409 inline bool operator>(const sivector_slice& v1, const sivector& v2) {
02410 return slsp_vv_greater<sivector_slice,sivector,interval>(v1,v2);
02411 }
02412
02413 inline bool operator>(const sivector& v1, const srvector_slice& v2) {
02414 return spsl_vv_greater<sivector,srvector_slice,interval>(v1,v2);
02415 }
02416
02417 inline bool operator>(const sivector& v1, const sivector_slice& v2) {
02418 return spsl_vv_greater<sivector,sivector_slice,interval>(v1,v2);
02419 }
02420
02421 inline bool operator>(const sivector_slice& v1, const rvector& v2) {
02422 return slf_vv_greater<sivector_slice,rvector,interval>(v1,v2);
02423 }
02424
02425 inline bool operator>(const sivector_slice& v1, const ivector& v2) {
02426 return slf_vv_greater<sivector_slice,ivector,interval>(v1,v2);
02427 }
02428
02429 inline bool operator>(const ivector& v1, const srvector_slice& v2) {
02430 return fsl_vv_greater<ivector,srvector_slice,interval>(v1,v2);
02431 }
02432
02433 inline bool operator>(const ivector& v1, const sivector_slice& v2) {
02434 return fsl_vv_greater<ivector,sivector_slice,interval>(v1,v2);
02435 }
02436
02437 inline bool operator>(const sivector_slice& v1, const rvector_slice& v2) {
02438 return slf_vv_greater<sivector_slice,rvector_slice,interval>(v1,v2);
02439 }
02440
02441 inline bool operator>(const sivector_slice& v1, const ivector_slice& v2) {
02442 return slf_vv_greater<sivector_slice,ivector_slice,interval>(v1,v2);
02443 }
02444
02445 inline bool operator>(const ivector_slice& v1, const srvector_slice& v2) {
02446 return fsl_vv_greater<ivector_slice,srvector_slice,interval>(v1,v2);
02447 }
02448
02449 inline bool operator>(const ivector_slice& v1, const sivector_slice& v2) {
02450 return fsl_vv_greater<ivector_slice,sivector_slice,interval>(v1,v2);
02451 }
02452
02453 inline bool operator>=(const sivector_slice& v1, const srvector_slice& v2) {
02454 return slsl_vv_geq<sivector_slice,srvector_slice,interval>(v1,v2);
02455 }
02456
02457 inline bool operator>=(const sivector_slice& v1, const sivector_slice& v2) {
02458 return slsl_vv_geq<sivector_slice,sivector_slice,interval>(v1,v2);
02459 }
02460
02461 inline bool operator>=(const sivector_slice& v1, const srvector& v2) {
02462 return slsp_vv_geq<sivector_slice,srvector,interval>(v1,v2);
02463 }
02464
02465 inline bool operator>=(const sivector_slice& v1, const sivector& v2) {
02466 return slsp_vv_geq<sivector_slice,sivector,interval>(v1,v2);
02467 }
02468
02469 inline bool operator>=(const sivector& v1, const srvector_slice& v2) {
02470 return spsl_vv_geq<sivector,srvector_slice,interval>(v1,v2);
02471 }
02472
02473 inline bool operator>=(const sivector& v1, const sivector_slice& v2) {
02474 return spsl_vv_geq<sivector,sivector_slice,interval>(v1,v2);
02475 }
02476
02477 inline bool operator>=(const sivector_slice& v1, const rvector& v2) {
02478 return slf_vv_geq<sivector_slice,rvector,interval>(v1,v2);
02479 }
02480
02481 inline bool operator>=(const sivector_slice& v1, const ivector& v2) {
02482 return slf_vv_geq<sivector_slice,ivector,interval>(v1,v2);
02483 }
02484
02485 inline bool operator>=(const ivector& v1, const srvector_slice& v2) {
02486 return fsl_vv_geq<ivector,srvector_slice,interval>(v1,v2);
02487 }
02488
02489 inline bool operator>=(const ivector& v1, const sivector_slice& v2) {
02490 return fsl_vv_geq<ivector,sivector_slice,interval>(v1,v2);
02491 }
02492
02493 inline bool operator>=(const sivector_slice& v1, const rvector_slice& v2) {
02494 return slf_vv_geq<sivector_slice,rvector_slice,interval>(v1,v2);
02495 }
02496
02497 inline bool operator>=(const sivector_slice& v1, const ivector_slice& v2) {
02498 return slf_vv_geq<sivector_slice,ivector_slice,interval>(v1,v2);
02499 }
02500
02501 inline bool operator>=(const ivector_slice& v1, const srvector_slice& v2) {
02502 return fsl_vv_geq<ivector_slice,srvector_slice,interval>(v1,v2);
02503 }
02504
02505 inline bool operator>=(const ivector_slice& v1, const sivector_slice& v2) {
02506 return fsl_vv_geq<ivector_slice,sivector_slice,interval>(v1,v2);
02507 }
02508
02509 inline std::ostream& operator<<(std::ostream& os, const sivector_slice& v) {
02510 return sl_v_output<sivector_slice,interval>(os,v);
02511 }
02512
02513 inline std::istream& operator>>(std::istream& is, sivector_slice& v) {
02514 return sl_v_input<sivector_slice,interval>(is,v);
02515 }
02516
02517 inline void accumulate(idotprecision& dot, const sivector& x, const sivector& y) {
02518 spsp_vv_accu<idotprecision,sivector,sivector,sparse_idot>(dot,x,y);
02519 }
02520
02521 inline void accumulate(idotprecision& dot, const sivector& x, const srvector& y) {
02522 spsp_vv_accu<idotprecision,sivector,srvector,sparse_idot>(dot,x,y);
02523 }
02524
02525 inline void accumulate(idotprecision& dot, const srvector& x, const sivector& y) {
02526 spsp_vv_accu<idotprecision,srvector,sivector,sparse_idot>(dot,x,y);
02527 }
02528
02529 inline void accumulate(idotprecision& dot, const sivector& x, const ivector& y) {
02530 spf_vv_accu<idotprecision,sivector,ivector,sparse_idot>(dot,x,y);
02531 }
02532
02533 inline void accumulate(idotprecision& dot, const sivector& x, const rvector& y) {
02534 spf_vv_accu<idotprecision,sivector,rvector,sparse_idot>(dot,x,y);
02535 }
02536
02537 inline void accumulate(idotprecision& dot, const srvector& x, const ivector& y) {
02538 spf_vv_accu<idotprecision,srvector,ivector,sparse_idot>(dot,x,y);
02539 }
02540
02541 inline void accumulate(idotprecision& dot, const sivector& x, const ivector_slice& y) {
02542 spf_vv_accu<idotprecision,sivector,ivector_slice,sparse_idot>(dot,x,y);
02543 }
02544
02545 inline void accumulate(idotprecision& dot, const sivector& x, const rvector_slice& y) {
02546 spf_vv_accu<idotprecision,sivector,rvector_slice,sparse_idot>(dot,x,y);
02547 }
02548
02549 inline void accumulate(idotprecision& dot, const srvector& x, const ivector_slice& y) {
02550 spf_vv_accu<idotprecision,srvector,ivector_slice,sparse_idot>(dot,x,y);
02551 }
02552
02553 inline void accumulate(idotprecision& dot, const ivector& x, const sivector& y) {
02554 fsp_vv_accu<idotprecision,ivector,sivector,sparse_idot>(dot,x,y);
02555 }
02556
02557 inline void accumulate(idotprecision& dot, const ivector& x, const srvector& y) {
02558 fsp_vv_accu<idotprecision,ivector,srvector,sparse_idot>(dot,x,y);
02559 }
02560
02561 inline void accumulate(idotprecision& dot, const rvector& x, const sivector& y) {
02562 fsp_vv_accu<idotprecision,rvector,sivector,sparse_idot>(dot,x,y);
02563 }
02564
02565 inline void accumulate(idotprecision& dot, const ivector_slice& x, const sivector& y) {
02566 fsp_vv_accu<idotprecision,ivector_slice,sivector,sparse_idot>(dot,x,y);
02567 }
02568
02569 inline void accumulate(idotprecision& dot, const ivector_slice& x, const srvector& y) {
02570 fsp_vv_accu<idotprecision,ivector_slice,srvector,sparse_idot>(dot,x,y);
02571 }
02572
02573 inline void accumulate(idotprecision& dot, const rvector_slice& x, const sivector& y) {
02574 fsp_vv_accu<idotprecision,rvector_slice,sivector,sparse_idot>(dot,x,y);
02575 }
02576
02577 inline void accumulate(idotprecision& dot, const sivector_slice& x, const ivector& y) {
02578 slf_vv_accu<idotprecision,sivector_slice,ivector,sparse_idot>(dot,x,y);
02579 }
02580
02581 inline void accumulate(idotprecision& dot, const sivector_slice& x, const rvector& y) {
02582 slf_vv_accu<idotprecision,sivector_slice,rvector,sparse_idot>(dot,x,y);
02583 }
02584
02585 inline void accumulate(idotprecision& dot, const srvector_slice& x, const ivector& y) {
02586 slf_vv_accu<idotprecision,srvector_slice,ivector,sparse_idot>(dot,x,y);
02587 }
02588
02589 inline void accumulate(idotprecision& dot, const sivector_slice& x, const ivector_slice& y) {
02590 slf_vv_accu<idotprecision,sivector_slice,ivector_slice,sparse_idot>(dot,x,y);
02591 }
02592
02593 inline void accumulate(idotprecision& dot, const sivector_slice& x, const rvector_slice& y) {
02594 slf_vv_accu<idotprecision,sivector_slice,rvector_slice,sparse_idot>(dot,x,y);
02595 }
02596
02597 inline void accumulate(idotprecision& dot, const srvector_slice& x, const ivector_slice& y) {
02598 slf_vv_accu<idotprecision,srvector_slice,ivector_slice,sparse_idot>(dot,x,y);
02599 }
02600
02601 inline void accumulate(idotprecision& dot, const ivector& x, const sivector_slice& y) {
02602 fsl_vv_accu<idotprecision,ivector,sivector_slice,sparse_idot>(dot,x,y);
02603 }
02604
02605 inline void accumulate(idotprecision& dot, const ivector& x, const srvector_slice& y) {
02606 fsl_vv_accu<idotprecision,ivector,srvector_slice,sparse_idot>(dot,x,y);
02607 }
02608
02609 inline void accumulate(idotprecision& dot, const rvector& x, const sivector_slice& y) {
02610 fsl_vv_accu<idotprecision,rvector,sivector_slice,sparse_idot>(dot,x,y);
02611 }
02612
02613 inline void accumulate(idotprecision& dot, const ivector_slice& x, const sivector_slice& y) {
02614 fsl_vv_accu<idotprecision,ivector_slice,sivector_slice,sparse_idot>(dot,x,y);
02615 }
02616
02617 inline void accumulate(idotprecision& dot, const ivector_slice& x, const srvector_slice& y) {
02618 fsl_vv_accu<idotprecision,ivector_slice,srvector_slice,sparse_idot>(dot,x,y);
02619 }
02620
02621 inline void accumulate(idotprecision& dot, const rvector_slice& x, const sivector_slice& y) {
02622 fsl_vv_accu<idotprecision,rvector_slice,sivector_slice,sparse_idot>(dot,x,y);
02623 }
02624
02625 inline void accumulate(idotprecision& dot, const sivector_slice& x, const sivector_slice& y) {
02626 slsl_vv_accu<idotprecision,sivector_slice,sivector_slice,sparse_idot>(dot,x,y);
02627 }
02628
02629 inline void accumulate(idotprecision& dot, const sivector_slice& x, const srvector_slice& y) {
02630 slsl_vv_accu<idotprecision,sivector_slice,srvector_slice,sparse_idot>(dot,x,y);
02631 }
02632
02633 inline void accumulate(idotprecision& dot, const srvector_slice& x, const sivector_slice& y) {
02634 slsl_vv_accu<idotprecision,srvector_slice,sivector_slice,sparse_idot>(dot,x,y);
02635 }
02636
02637 inline void accumulate(idotprecision& dot, const sivector& x, const sivector_slice& y) {
02638 spsl_vv_accu<idotprecision,sivector,sivector_slice,sparse_idot>(dot,x,y);
02639 }
02640
02641 inline void accumulate(idotprecision& dot, const sivector& x, const srvector_slice& y) {
02642 spsl_vv_accu<idotprecision,sivector,srvector_slice,sparse_idot>(dot,x,y);
02643 }
02644
02645 inline void accumulate(idotprecision& dot, const srvector& x, const sivector_slice& y) {
02646 spsl_vv_accu<idotprecision,srvector,sivector_slice,sparse_idot>(dot,x,y);
02647 }
02648
02649 inline void accumulate(idotprecision& dot, const sivector_slice& x, const sivector& y) {
02650 slsp_vv_accu<idotprecision,sivector_slice,sivector,sparse_idot>(dot,x,y);
02651 }
02652
02653 inline void accumulate(idotprecision& dot, const sivector_slice& x, const srvector& y) {
02654 slsp_vv_accu<idotprecision,sivector_slice,srvector,sparse_idot>(dot,x,y);
02655 }
02656
02657 inline void accumulate(idotprecision& dot, const srvector_slice& x, const sivector& y) {
02658 slsp_vv_accu<idotprecision,srvector_slice,sivector,sparse_idot>(dot,x,y);
02659 }
02660
02661 inline void accumulate(cidotprecision& dot, const sivector& x, const sivector& y) {
02662 idotprecision tmp(0.0);
02663 tmp.set_k(dot.get_k());
02664 accumulate(tmp,x,y);
02665 SetRe(dot, Re(dot) + tmp);
02666 }
02667
02668 inline void accumulate(cidotprecision& dot, const sivector& x, const srvector& y) {
02669 idotprecision tmp(0.0);
02670 tmp.set_k(dot.get_k());
02671 accumulate(tmp,x,y);
02672 SetRe(dot, Re(dot) + tmp);
02673 }
02674
02675 inline void accumulate(cidotprecision& dot, const srvector& x, const sivector& y) {
02676 idotprecision tmp(0.0);
02677 tmp.set_k(dot.get_k());
02678 accumulate(tmp,x,y);
02679 SetRe(dot, Re(dot) + tmp);
02680 }
02681
02682 inline void accumulate(cidotprecision& dot, const sivector& x, const ivector& y) {
02683 idotprecision tmp(0.0);
02684 tmp.set_k(dot.get_k());
02685 accumulate(tmp,x,y);
02686 SetRe(dot, Re(dot) + tmp);
02687 }
02688
02689 inline void accumulate(cidotprecision& dot, const sivector& x, const rvector& y) {
02690 idotprecision tmp(0.0);
02691 tmp.set_k(dot.get_k());
02692 accumulate(tmp,x,y);
02693 SetRe(dot, Re(dot) + tmp);
02694 }
02695
02696 inline void accumulate(cidotprecision& dot, const srvector& x, const ivector& y) {
02697 idotprecision tmp(0.0);
02698 tmp.set_k(dot.get_k());
02699 accumulate(tmp,x,y);
02700 SetRe(dot, Re(dot) + tmp);
02701 }
02702
02703 inline void accumulate(cidotprecision& dot, const sivector& x, const ivector_slice& y) {
02704 idotprecision tmp(0.0);
02705 tmp.set_k(dot.get_k());
02706 accumulate(tmp,x,y);
02707 SetRe(dot, Re(dot) + tmp);
02708 }
02709
02710 inline void accumulate(cidotprecision& dot, const sivector& x, const rvector_slice& y) {
02711 idotprecision tmp(0.0);
02712 tmp.set_k(dot.get_k());
02713 accumulate(tmp,x,y);
02714 SetRe(dot, Re(dot) + tmp);
02715 }
02716
02717 inline void accumulate(cidotprecision& dot, const srvector& x, const ivector_slice& y) {
02718 idotprecision tmp(0.0);
02719 tmp.set_k(dot.get_k());
02720 accumulate(tmp,x,y);
02721 SetRe(dot, Re(dot) + tmp);
02722 }
02723
02724 inline void accumulate(cidotprecision& dot, const ivector& x, const sivector& y) {
02725 idotprecision tmp(0.0);
02726 tmp.set_k(dot.get_k());
02727 accumulate(tmp,x,y);
02728 SetRe(dot, Re(dot) + tmp);
02729 }
02730
02731 inline void accumulate(cidotprecision& dot, const ivector& x, const srvector& y) {
02732 idotprecision tmp(0.0);
02733 tmp.set_k(dot.get_k());
02734 accumulate(tmp,x,y);
02735 SetRe(dot, Re(dot) + tmp);
02736 }
02737
02738 inline void accumulate(cidotprecision& dot, const rvector& x, const sivector& y) {
02739 idotprecision tmp(0.0);
02740 tmp.set_k(dot.get_k());
02741 accumulate(tmp,x,y);
02742 SetRe(dot, Re(dot) + tmp);
02743 }
02744
02745 inline void accumulate(cidotprecision& dot, const ivector_slice& x, const sivector& y) {
02746 idotprecision tmp(0.0);
02747 tmp.set_k(dot.get_k());
02748 accumulate(tmp,x,y);
02749 SetRe(dot, Re(dot) + tmp);
02750 }
02751
02752 inline void accumulate(cidotprecision& dot, const ivector_slice& x, const srvector& y) {
02753 idotprecision tmp(0.0);
02754 tmp.set_k(dot.get_k());
02755 accumulate(tmp,x,y);
02756 SetRe(dot, Re(dot) + tmp);
02757 }
02758
02759 inline void accumulate(cidotprecision& dot, const rvector_slice& x, const sivector& y) {
02760 idotprecision tmp(0.0);
02761 tmp.set_k(dot.get_k());
02762 accumulate(tmp,x,y);
02763 SetRe(dot, Re(dot) + tmp);
02764 }
02765
02766 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const ivector& y) {
02767 idotprecision tmp(0.0);
02768 tmp.set_k(dot.get_k());
02769 accumulate(tmp,x,y);
02770 SetRe(dot, Re(dot) + tmp);
02771 }
02772
02773 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const rvector& y) {
02774 idotprecision tmp(0.0);
02775 tmp.set_k(dot.get_k());
02776 accumulate(tmp,x,y);
02777 SetRe(dot, Re(dot) + tmp);
02778 }
02779
02780 inline void accumulate(cidotprecision& dot, const srvector_slice& x, const ivector& y) {
02781 idotprecision tmp(0.0);
02782 tmp.set_k(dot.get_k());
02783 accumulate(tmp,x,y);
02784 SetRe(dot, Re(dot) + tmp);
02785 }
02786
02787 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const ivector_slice& y) {
02788 idotprecision tmp(0.0);
02789 tmp.set_k(dot.get_k());
02790 accumulate(tmp,x,y);
02791 SetRe(dot, Re(dot) + tmp);
02792 }
02793
02794 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const rvector_slice& y) {
02795 idotprecision tmp(0.0);
02796 tmp.set_k(dot.get_k());
02797 accumulate(tmp,x,y);
02798 SetRe(dot, Re(dot) + tmp);
02799 }
02800
02801 inline void accumulate(cidotprecision& dot, const srvector_slice& x, const ivector_slice& y) {
02802 idotprecision tmp(0.0);
02803 tmp.set_k(dot.get_k());
02804 accumulate(tmp,x,y);
02805 SetRe(dot, Re(dot) + tmp);
02806 }
02807
02808 inline void accumulate(cidotprecision& dot, const ivector& x, const sivector_slice& y) {
02809 idotprecision tmp(0.0);
02810 tmp.set_k(dot.get_k());
02811 accumulate(tmp,x,y);
02812 SetRe(dot, Re(dot) + tmp);
02813 }
02814
02815 inline void accumulate(cidotprecision& dot, const ivector& x, const srvector_slice& y) {
02816 idotprecision tmp(0.0);
02817 tmp.set_k(dot.get_k());
02818 accumulate(tmp,x,y);
02819 SetRe(dot, Re(dot) + tmp);
02820 }
02821
02822 inline void accumulate(cidotprecision& dot, const rvector& x, const sivector_slice& y) {
02823 idotprecision tmp(0.0);
02824 tmp.set_k(dot.get_k());
02825 accumulate(tmp,x,y);
02826 SetRe(dot, Re(dot) + tmp);
02827 }
02828
02829 inline void accumulate(cidotprecision& dot, const ivector_slice& x, const sivector_slice& y) {
02830 idotprecision tmp(0.0);
02831 tmp.set_k(dot.get_k());
02832 accumulate(tmp,x,y);
02833 SetRe(dot, Re(dot) + tmp);
02834 }
02835
02836 inline void accumulate(cidotprecision& dot, const ivector_slice& x, const srvector_slice& y) {
02837 idotprecision tmp(0.0);
02838 tmp.set_k(dot.get_k());
02839 accumulate(tmp,x,y);
02840 SetRe(dot, Re(dot) + tmp);
02841 }
02842
02843 inline void accumulate(cidotprecision& dot, const rvector_slice& x, const sivector_slice& y) {
02844 idotprecision tmp(0.0);
02845 tmp.set_k(dot.get_k());
02846 accumulate(tmp,x,y);
02847 SetRe(dot, Re(dot) + tmp);
02848 }
02849
02850 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const sivector_slice& y) {
02851 idotprecision tmp(0.0);
02852 tmp.set_k(dot.get_k());
02853 accumulate(tmp,x,y);
02854 SetRe(dot, Re(dot) + tmp);
02855 }
02856
02857 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const srvector_slice& y) {
02858 idotprecision tmp(0.0);
02859 tmp.set_k(dot.get_k());
02860 accumulate(tmp,x,y);
02861 SetRe(dot, Re(dot) + tmp);
02862 }
02863
02864 inline void accumulate(cidotprecision& dot, const srvector_slice& x, const sivector_slice& y) {
02865 idotprecision tmp(0.0);
02866 tmp.set_k(dot.get_k());
02867 accumulate(tmp,x,y);
02868 SetRe(dot, Re(dot) + tmp);
02869 }
02870
02871 inline void accumulate(cidotprecision& dot, const sivector& x, const sivector_slice& y) {
02872 idotprecision tmp(0.0);
02873 tmp.set_k(dot.get_k());
02874 accumulate(tmp,x,y);
02875 SetRe(dot, Re(dot) + tmp);
02876 }
02877
02878 inline void accumulate(cidotprecision& dot, const sivector& x, const srvector_slice& y) {
02879 idotprecision tmp(0.0);
02880 tmp.set_k(dot.get_k());
02881 accumulate(tmp,x,y);
02882 SetRe(dot, Re(dot) + tmp);
02883 }
02884
02885 inline void accumulate(cidotprecision& dot, const srvector& x, const sivector_slice& y) {
02886 idotprecision tmp(0.0);
02887 tmp.set_k(dot.get_k());
02888 accumulate(tmp,x,y);
02889 SetRe(dot, Re(dot) + tmp);
02890 }
02891
02892 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const sivector& y) {
02893 idotprecision tmp(0.0);
02894 tmp.set_k(dot.get_k());
02895 accumulate(tmp,x,y);
02896 SetRe(dot, Re(dot) + tmp);
02897 }
02898
02899 inline void accumulate(cidotprecision& dot, const sivector_slice& x, const srvector& y) {
02900 idotprecision tmp(0.0);
02901 tmp.set_k(dot.get_k());
02902 accumulate(tmp,x,y);
02903 SetRe(dot, Re(dot) + tmp);
02904 }
02905
02906 inline void accumulate(cidotprecision& dot, const srvector_slice& x, const sivector& y) {
02907 idotprecision tmp(0.0);
02908 tmp.set_k(dot.get_k());
02909 accumulate(tmp,x,y);
02910 SetRe(dot, Re(dot) + tmp);
02911 }
02912
02913 }
02914
02915 #include "sparsevector.inl"
02916
02917 #endif