sivector.hpp

00001 /*
00002 **  CXSC is a C++ library for eXtended Scientific Computing (V 2.5.1)
00003 **
00004 **  Copyright (C) 1990-2000 Institut fuer Angewandte Mathematik,
00005 **                          Universitaet Karlsruhe, Germany
00006 **            (C) 2000-2011 Wiss. Rechnen/Softwaretechnologie
00007 **                          Universitaet Wuppertal, Germany   
00008 **
00009 **  This library is free software; you can redistribute it and/or
00010 **  modify it under the terms of the GNU Library General Public
00011 **  License as published by the Free Software Foundation; either
00012 **  version 2 of the License, or (at your option) any later version.
00013 **
00014 **  This library is distributed in the hope that it will be useful,
00015 **  but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 **  Library General Public License for more details.
00018 **
00019 **  You should have received a copy of the GNU Library General Public
00020 **  License along with this library; if not, write to the Free
00021 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 */
00023 
00024 /* CVS $Id: sivector.hpp,v 1.10 2011/06/07 15:17:42 cxsc Exp $ */
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     /* sivector& operator=(const sivector& v) {
00162       p = v.p;
00163       x = v.x;
00164       return *this;
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 //     friend srvector operator*(const srmatrix&, const srvector_slice&); //ok
01476 //     friend srvector operator*(const srmatrix_slice&, const srvector_slice&); //ok
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 } //namespace cxsc
02914 
02915 #include "sparsevector.inl"
02916 
02917 #endif 

Generated on Thu Jun 9 11:22:19 2011 for C-XSC - A C++ Class Library for Extended Scientific Computing by  doxygen 1.4.6