00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 namespace cxsc {
00025
00029 inline lx_civector::lx_civector () throw():dat(NULL),l(1),u(0),size(0)
00030 { }
00031
00037 inline lx_civector::lx_civector(int i) throw():l(1),u(i),size(i)
00038 {
00039 dat=new lx_cinterval[i];
00040 }
00041
00048 inline lx_civector::lx_civector(int i1, int i2)
00049 #if(CXSC_INDEX_CHECK)
00050 throw(ERROR_IVECTOR_WRONG_BOUNDARIES,ERROR_IVECTOR_NO_MORE_MEMORY):
00051 l(i1),u(i2),size(i2-i1+1)
00052 #else
00053 throw():l(i1),u(i2),size(i2-i1+1)
00054 #endif
00055 {
00056 #if(CXSC_INDEX_CHECK)
00057 if(i1>i2) cxscthrow(ERROR_IVECTOR_WRONG_BOUNDARIES(
00058 "lx_civector(const int &i1,const int &i2)"));
00059 #endif
00060 dat=new lx_cinterval[size];
00061 }
00062
00063 inline lx_civector::lx_civector(const lx_cinterval &r) throw():l(1),u(1),size(1)
00064 {
00065 dat=new lx_cinterval[1];
00066 *dat=r;
00067 }
00068
00069 inline lx_civector::lx_civector(const l_cinterval &r) throw():l(1),u(1),size(1)
00070 {
00071 dat=new lx_cinterval[1];
00072 *dat=r;
00073 }
00074
00075 inline lx_civector::lx_civector(const cinterval &r) throw():l(1),u(1),size(1)
00076 {
00077 dat=new lx_cinterval[1];
00078 *dat=r;
00079 }
00080
00081 inline lx_civector::lx_civector(const lx_complex &r) throw():l(1),u(1),size(1)
00082 {
00083 dat=new lx_cinterval[1];
00084 *dat=r;
00085 }
00086
00087 inline lx_civector::lx_civector(const l_complex &r) throw():l(1),u(1),size(1)
00088 {
00089 dat=new lx_cinterval[1];
00090 *dat=r;
00091 }
00092
00093 inline lx_civector::lx_civector(const complex &r) throw():l(1),u(1),size(1)
00094 {
00095 dat=new lx_cinterval[1];
00096 *dat=r;
00097 }
00098
00099 inline lx_civector::lx_civector(const lx_interval &r) throw():l(1),u(1),size(1)
00100 {
00101 dat=new lx_cinterval[1];
00102 *dat=r;
00103 }
00104
00105 inline lx_civector::lx_civector(const l_interval &r) throw():l(1),u(1),size(1)
00106 {
00107 dat=new lx_cinterval[1];
00108 *dat=r;
00109 }
00110
00111 inline lx_civector::lx_civector(const interval &r) throw():l(1),u(1),size(1)
00112 {
00113 dat=new lx_cinterval[1];
00114 *dat=r;
00115 }
00116
00117 inline lx_civector::lx_civector(const lx_real &r) throw():l(1),u(1),size(1)
00118 {
00119 dat=new lx_cinterval[1];
00120 *dat=r;
00121 }
00122
00123 inline lx_civector::lx_civector(const l_real &r) throw():l(1),u(1),size(1)
00124 {
00125 dat=new lx_cinterval[1];
00126 *dat=r;
00127 }
00128
00129 inline lx_civector::lx_civector(const real &r) throw():l(1),u(1),size(1)
00130 {
00131 dat=new lx_cinterval[1];
00132 *dat=r;
00133 }
00134
00135 inline lx_civector::lx_civector(const lx_civector &v)
00136 throw():l(v.l),u(v.u),size(v.size)
00137 {
00138 dat=new lx_cinterval[size];
00139 for (int i=0;i<size;i++)
00140 dat[i]=v.dat[i];
00141 }
00142
00143 inline lx_civector &lx_civector::operator =(const lx_civector &rv) throw()
00144 {
00145 l = rv.l; u = rv.u; size = rv.size;
00146 dat=new lx_cinterval[size];
00147 for (int i=0;i<size;i++)
00148 dat[i]=rv.dat[i];
00149 return *this;
00150 }
00151
00152 inline lx_civector &lx_civector::operator =(const lx_cinterval &r) throw()
00153 {
00154 lx_cinterval *newdat = new lx_cinterval[size];
00155 for (int i=0;i<size;i++)
00156 newdat[i] = r;
00157 delete [] dat;
00158 dat = newdat;
00159 return *this;
00160 }
00161
00162 inline lx_civector &lx_civector::operator =(const l_cinterval &r) throw()
00163 {
00164 lx_cinterval *newdat = new lx_cinterval[size];
00165 for (int i=0;i<size;i++)
00166 newdat[i] = r;
00167 delete [] dat;
00168 dat = newdat;
00169 return *this;
00170 }
00171
00172 inline lx_civector &lx_civector::operator =(const cinterval &r) throw()
00173 {
00174 lx_cinterval *newdat = new lx_cinterval[size];
00175 for (int i=0;i<size;i++)
00176 newdat[i] = r;
00177 delete [] dat;
00178 dat = newdat;
00179 return *this;
00180 }
00181
00182 inline lx_civector &lx_civector::operator =(const lx_complex &r) throw()
00183 {
00184 lx_cinterval *newdat = new lx_cinterval[size];
00185 for (int i=0;i<size;i++)
00186 newdat[i] = r;
00187 delete [] dat;
00188 dat = newdat;
00189 return *this;
00190 }
00191
00192 inline lx_civector &lx_civector::operator =(const l_complex &r) throw()
00193 {
00194 lx_cinterval *newdat = new lx_cinterval[size];
00195 for (int i=0;i<size;i++)
00196 newdat[i] = r;
00197 delete [] dat;
00198 dat = newdat;
00199 return *this;
00200 }
00201
00202 inline lx_civector &lx_civector::operator =(const complex &r) throw()
00203 {
00204 lx_cinterval *newdat = new lx_cinterval[size];
00205 for (int i=0;i<size;i++)
00206 newdat[i] = r;
00207 delete [] dat;
00208 dat = newdat;
00209 return *this;
00210 }
00211
00212 inline lx_civector &lx_civector::operator =(const lx_interval &r) throw()
00213 {
00214 lx_cinterval *newdat = new lx_cinterval[size];
00215 for (int i=0;i<size;i++)
00216 newdat[i] = r;
00217 delete [] dat;
00218 dat = newdat;
00219 return *this;
00220 }
00221
00222 inline lx_civector &lx_civector::operator =(const l_interval &r) throw()
00223 {
00224 lx_cinterval *newdat = new lx_cinterval[size];
00225 for (int i=0;i<size;i++)
00226 newdat[i] = r;
00227 delete [] dat;
00228 dat = newdat;
00229 return *this;
00230 }
00231
00232 inline lx_civector &lx_civector::operator =(const interval &r) throw()
00233 {
00234 lx_cinterval *newdat = new lx_cinterval[size];
00235 for (int i=0;i<size;i++)
00236 newdat[i] = r;
00237 delete [] dat;
00238 dat = newdat;
00239 return *this;
00240 }
00241
00242 inline lx_civector &lx_civector::operator =(const lx_real &r) throw()
00243 {
00244 lx_cinterval *newdat = new lx_cinterval[size];
00245 for (int i=0;i<size;i++)
00246 newdat[i] = r;
00247 delete [] dat;
00248 dat = newdat;
00249 return *this;
00250 }
00251
00252 inline lx_civector &lx_civector::operator =(const l_real &r) throw()
00253 {
00254 lx_cinterval *newdat = new lx_cinterval[size];
00255 for (int i=0;i<size;i++)
00256 newdat[i] = r;
00257 delete [] dat;
00258 dat = newdat;
00259 return *this;
00260 }
00261
00262 inline lx_civector &lx_civector::operator =(const real &r) throw()
00263 {
00264 lx_cinterval *newdat = new lx_cinterval[size];
00265 for (int i=0;i<size;i++)
00266 newdat[i] = r;
00267 delete [] dat;
00268 dat = newdat;
00269 return *this;
00270 }
00271
00272 inline lx_cinterval & lx_civector::operator [](const int &i)
00273 #if(CXSC_INDEX_CHECK)
00274 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC)
00275 #else
00276 throw()
00277 #endif
00278 {
00279 #if(CXSC_INDEX_CHECK)
00280 if(i<l||i>u) cxscthrow(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC(
00281 "lx_cinterval & lx_civector::operator [](const int &i)"));
00282 #endif
00283 return dat[i-l];
00284 }
00285
00286 inline const lx_cinterval & lx_civector::operator [](const int &i) const
00287 #if(CXSC_INDEX_CHECK)
00288 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC)
00289 #else
00290 throw()
00291 #endif
00292 {
00293 #if(CXSC_INDEX_CHECK)
00294 if(i<l || i>u) cxscthrow(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC(
00295 "lx_cinterval & lx_civector::operator [](const int &i)"));
00296 #endif
00297 return dat[i-l];
00298 }
00299
00300 inline void Resize(lx_civector &rv, int len)
00301 #if(CXSC_INDEX_CHECK)
00302 throw(ERROR__WRONG_BOUNDARIES<lx_civector>);
00303 #else
00304 throw()
00305 #endif
00306 {
00307 if (rv.size == len)
00308 SetLb(rv,1);
00309 else
00310 {
00311 #if(CXSC_INDEX_CHECK)
00312 if (len<0)
00313 cxscthrow(ERROR__WRONG_BOUNDARIES(
00314 "Resize(lx_civector &rv, int len)"));
00315 #endif
00316 lx_cinterval *ndat = new lx_cinterval[len];
00317 int beg, end;
00318 beg = (rv.l>1)? rv.l : 1;
00319 end = (rv.u<len)? rv.u : len;
00320 for(int i=beg-1;i<end;i++)
00321 ndat[i]=rv.dat[i-rv.l+1];
00322 delete [] rv.dat;
00323 rv.dat=ndat;
00324 rv.size=rv.u=len;
00325 rv.l=1;
00326 }
00327 }
00328
00329 inline void Resize(lx_civector &rv, int lb, int ub)
00330 #if(CXSC_INDEX_CHECK)
00331 throw(ERROR__WRONG_BOUNDARIES<lx_civector>)
00332 #else
00333 throw()
00334 #endif
00335 {
00336 if (rv.size == ub-lb+1)
00337 SetUb(rv,ub);
00338 else
00339 {
00340 rv.size = ub-lb+1;
00341 #if(CXSC_INDEX_CHECK)
00342 if (rv.size<0)
00343 cxscthrow(ERROR__WRONG_BOUNDARIES(
00344 "Resize(lx_civector &rv, int lb, int ub)"));
00345 #endif
00346 lx_cinterval *ndat = new lx_cinterval[rv.size];
00347 int beg, end;
00348 beg = (rv.l>lb)? rv.l : lb;
00349 end = (rv.u<ub)? rv.u : ub;
00350 for(int i=0;i<=rv.size-1;i++)
00351 ndat[i]=interval(0);
00352 for(int i=beg;i<=end;i++)
00353 ndat[i-lb]=rv.dat[i-rv.l];
00354 delete [] rv.dat;
00355 rv.dat=ndat;
00356 rv.l=lb;
00357 rv.u=ub;
00358 }
00359 }
00360
00361 inline void DoubleSize(lx_civector& x) throw()
00362 {
00363 int n = Lb(x);
00364 Resize(x,n,2*Ub(x)-n+1);
00365 }
00366
00367 }