00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 namespace cxsc {
00027
00031 inline lx_ivector::lx_ivector () throw():dat(NULL),l(1),u(0),size(0)
00032 { }
00033
00039 inline lx_ivector::lx_ivector(int i) throw():l(1),u(i),size(i)
00040 {
00041 dat=new lx_interval[i];
00042 }
00043
00050 inline lx_ivector::lx_ivector(int i1, int i2)
00051 #if(CXSC_INDEX_CHECK)
00052 throw(ERROR_IVECTOR_WRONG_BOUNDARIES,ERROR_IVECTOR_NO_MORE_MEMORY):
00053 l(i1),u(i2),size(i2-i1+1)
00054 #else
00055 throw():l(i1),u(i2),size(i2-i1+1)
00056 #endif
00057 {
00058 #if(CXSC_INDEX_CHECK)
00059 if(i1>i2) cxscthrow(ERROR_IVECTOR_WRONG_BOUNDARIES(
00060 "lx_ivector(const int &i1,const int &i2)"));
00061 #endif
00062 dat=new lx_interval[size];
00063 }
00064
00065 inline lx_ivector::lx_ivector(const lx_interval &r) throw():l(1),u(1),size(1)
00066 {
00067 dat=new lx_interval[1];
00068 *dat=r;
00069 }
00070
00071 inline lx_ivector::lx_ivector(const l_interval &r) throw():l(1),u(1),size(1)
00072 {
00073 dat=new lx_interval[1];
00074 *dat=r;
00075 }
00076
00077 inline lx_ivector::lx_ivector(const interval &r) throw():l(1),u(1),size(1)
00078 {
00079 dat=new lx_interval[1];
00080 *dat=r;
00081 }
00082
00083 inline lx_ivector::lx_ivector(const lx_real &r) throw():l(1),u(1),size(1)
00084 {
00085 dat=new lx_interval[1];
00086 *dat=r;
00087 }
00088
00089 inline lx_ivector::lx_ivector(const l_real &r) throw():l(1),u(1),size(1)
00090 {
00091 dat=new lx_interval[1];
00092 *dat=r;
00093 }
00094
00095 inline lx_ivector::lx_ivector(const real &r) throw():l(1),u(1),size(1)
00096 {
00097 dat=new lx_interval[1];
00098 *dat=r;
00099 }
00100
00101 inline lx_ivector::lx_ivector(const lx_ivector &v)
00102 throw():l(v.l),u(v.u),size(v.size)
00103 {
00104 dat=new lx_interval[size];
00105 for (int i=0;i<size;i++)
00106 dat[i]=v.dat[i];
00107 }
00108
00109 inline lx_ivector &lx_ivector::operator =(const lx_ivector &rv) throw()
00110 {
00111 l = rv.l; u = rv.u; size = rv.size;
00112 dat=new lx_interval[size];
00113 for (int i=0;i<size;i++)
00114 dat[i]=rv.dat[i];
00115 return *this;
00116 }
00117
00118 inline lx_ivector &lx_ivector::operator =(const lx_interval &r) throw()
00119 {
00120 lx_interval *newdat = new lx_interval[size];
00121 for (int i=0;i<size;i++)
00122 newdat[i] = r;
00123 delete [] dat;
00124 dat = newdat;
00125 return *this;
00126 }
00127
00128 inline lx_ivector &lx_ivector::operator =(const l_interval &r) throw()
00129 {
00130 lx_interval *newdat = new lx_interval[size];
00131 for (int i=0;i<size;i++)
00132 newdat[i] = r;
00133 delete [] dat;
00134 dat = newdat;
00135 return *this;
00136 }
00137
00138 inline lx_ivector &lx_ivector::operator =(const interval &r) throw()
00139 {
00140 lx_interval *newdat = new lx_interval[size];
00141 for (int i=0;i<size;i++)
00142 newdat[i] = r;
00143 delete [] dat;
00144 dat = newdat;
00145 return *this;
00146 }
00147
00148 inline lx_ivector &lx_ivector::operator =(const lx_real &r) throw()
00149 {
00150 lx_interval *newdat = new lx_interval[size];
00151 for (int i=0;i<size;i++)
00152 newdat[i] = r;
00153 delete [] dat;
00154 dat = newdat;
00155 return *this;
00156 }
00157
00158 inline lx_ivector &lx_ivector::operator =(const l_real &r) throw()
00159 {
00160 lx_interval *newdat = new lx_interval[size];
00161 for (int i=0;i<size;i++)
00162 newdat[i] = r;
00163 delete [] dat;
00164 dat = newdat;
00165 return *this;
00166 }
00167
00168 inline lx_ivector &lx_ivector::operator =(const real &r) throw()
00169 {
00170 lx_interval *newdat = new lx_interval[size];
00171 for (int i=0;i<size;i++)
00172 newdat[i] = r;
00173 delete [] dat;
00174 dat = newdat;
00175 return *this;
00176 }
00177
00178 inline lx_interval & lx_ivector::operator [](const int &i)
00179 #if(CXSC_INDEX_CHECK)
00180 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC)
00181 #else
00182 throw()
00183 #endif
00184 {
00185 #if(CXSC_INDEX_CHECK)
00186 if(i<l||i>u) cxscthrow(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC(
00187 "lx_interval & lx_ivector::operator [](const int &i)"));
00188 #endif
00189 return dat[i-l];
00190 }
00191
00192 inline const lx_interval & lx_ivector::operator [](const int &i) const
00193 #if(CXSC_INDEX_CHECK)
00194 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC)
00195 #else
00196 throw()
00197 #endif
00198 {
00199 #if(CXSC_INDEX_CHECK)
00200 if(i<l || i>u) cxscthrow(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC(
00201 "lx_interval & lx_ivector::operator [](const int &i)"));
00202 #endif
00203 return dat[i-l];
00204 }
00205
00206 inline void Resize(lx_ivector &rv, int len)
00207 #if(CXSC_INDEX_CHECK)
00208 throw(ERROR__WRONG_BOUNDARIES<lx_ivector>);
00209 #else
00210 throw()
00211 #endif
00212 {
00213 if (rv.size == len)
00214 SetLb(rv,1);
00215 else
00216 {
00217 #if(CXSC_INDEX_CHECK)
00218 if (len<0)
00219 cxscthrow(ERROR__WRONG_BOUNDARIES(
00220 "Resize(lx_ivector &rv, int len)"));
00221 #endif
00222 lx_interval *ndat = new lx_interval[len];
00223 int beg, end;
00224 beg = (rv.l>1)? rv.l : 1;
00225 end = (rv.u<len)? rv.u : len;
00226 for(int i=beg-1;i<end;i++)
00227 ndat[i]=rv.dat[i-rv.l+1];
00228 delete [] rv.dat;
00229 rv.dat=ndat;
00230 rv.size=rv.u=len;
00231 rv.l=1;
00232 }
00233 }
00234
00235 inline void Resize(lx_ivector &rv, int lb, int ub)
00236 #if(CXSC_INDEX_CHECK)
00237 throw(ERROR__WRONG_BOUNDARIES<lx_ivector>)
00238 #else
00239 throw()
00240 #endif
00241 {
00242 if (rv.size == ub-lb+1)
00243 SetUb(rv,ub);
00244 else
00245 {
00246 rv.size = ub-lb+1;
00247 #if(CXSC_INDEX_CHECK)
00248 if (rv.size<0)
00249 cxscthrow(ERROR__WRONG_BOUNDARIES(
00250 "Resize(lx_ivector &rv, int lb, int ub)"));
00251 #endif
00252 lx_interval *ndat = new lx_interval[rv.size];
00253 int beg, end;
00254 beg = (rv.l>lb)? rv.l : lb;
00255 end = (rv.u<ub)? rv.u : ub;
00256 for(int i=0;i<=rv.size-1;i++)
00257 ndat[i]=interval(0);
00258 for(int i=beg;i<=end;i++)
00259 ndat[i-lb]=rv.dat[i-rv.l];
00260 delete [] rv.dat;
00261 rv.dat=ndat;
00262 rv.l=lb;
00263 rv.u=ub;
00264 }
00265 }
00266
00267 inline void DoubleSize(lx_ivector& x) throw()
00268 {
00269 int n = Lb(x);
00270 Resize(x,n,2*Ub(x)-n+1);
00271 }
00272
00273 }