00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _CXSC_LX_CIVECTOR_HPP_INCLUDED
00027 #define _CXSC_LX_CIVECTOR_HPP_INCLUDED
00028
00029 #include <xscclass.hpp>
00030 #include <real.hpp>
00031 #include <except.hpp>
00032 #include "lx_cinterval.hpp"
00033
00034 #include <iostream>
00035
00036 namespace cxsc {
00037
00039
00045 class lx_civector
00046 {
00047 private:
00048 lx_cinterval *dat;
00049 int l,u,size;
00050
00051 public:
00052
00053
00055 inline lx_civector () throw();
00056
00061 explicit inline lx_civector(int i) throw();
00062
00064 explicit inline lx_civector(int i1, int i2)
00065 #if(CXSC_INDEX_CHECK)
00066 throw(ERROR_IVECTOR_WRONG_BOUNDARIES,ERROR_IVECTOR_NO_MORE_MEMORY);
00067 #else
00068 throw();
00069 #endif
00070
00072 explicit inline lx_civector(const lx_cinterval &) throw();
00074 explicit inline lx_civector(const l_cinterval &) throw();
00076 explicit inline lx_civector(const cinterval &) throw();
00078 explicit inline lx_civector(const lx_complex &) throw();
00080 explicit inline lx_civector(const l_complex &) throw();
00082 explicit inline lx_civector(const complex &) throw();
00083
00085 explicit inline lx_civector(const lx_interval &) throw();
00087 explicit inline lx_civector(const l_interval &) throw();
00089 explicit inline lx_civector(const interval &) throw();
00091 explicit inline lx_civector(const lx_real &) throw();
00093 explicit inline lx_civector(const l_real &) throw();
00095 explicit inline lx_civector(const real &) throw();
00096
00098 inline lx_civector(const lx_civector &) throw();
00099
00100
00102 inline lx_civector & operator = (const lx_civector &) throw();
00103
00105 inline lx_civector & operator =(const lx_cinterval &) throw();
00107 inline lx_civector & operator =(const l_cinterval &) throw();
00109 inline lx_civector & operator =(const cinterval &) throw();
00111 inline lx_civector & operator =(const lx_complex &) throw();
00113 inline lx_civector & operator =(const l_complex &) throw();
00115 inline lx_civector & operator =(const complex &) throw();
00116
00118 inline lx_civector & operator =(const lx_interval &) throw();
00120 inline lx_civector & operator =(const l_interval &) throw();
00122 inline lx_civector & operator =(const interval &) throw();
00124 inline lx_civector & operator =(const lx_real &) throw();
00126 inline lx_civector & operator =(const l_real &) throw();
00128 inline lx_civector & operator =(const real &) throw();
00129
00130
00131 inline ~lx_civector() { delete [] dat; }
00132
00133
00135 inline lx_cinterval & operator [](const int &i)
00136 #if(CXSC_INDEX_CHECK)
00137 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC);
00138 #else
00139 throw();
00140 #endif
00141
00142 inline const lx_cinterval & operator [](const int &i) const
00143 #if(CXSC_INDEX_CHECK)
00144 throw(ERROR_IVECTOR_ELEMENT_NOT_IN_VEC);
00145 #else
00146 throw();
00147 #endif
00148
00149
00150
00152 friend inline int Lb(const lx_civector &a) throw() { return a.l; }
00154 friend inline int Ub(const lx_civector &a) throw() { return a.u; }
00156 friend inline int VecLen(const lx_civector &a) throw() { return a.size; }
00158 friend inline lx_civector& SetLb(lx_civector &a, int l) throw()
00159 { a.l=l; a.u=l+a.size-1; return a; }
00161 friend inline lx_civector & SetUb(lx_civector &a, int u) throw()
00162 { a.u=u; a.l=u-a.size+1; return a; }
00163
00165 friend inline void Resize(lx_civector &rv, int lb, int ub)
00166 #if(CXSC_INDEX_CHECK)
00167 throw(ERROR__WRONG_BOUNDARIES<lx_civector>);
00168 #else
00169 throw();
00170 #endif
00171
00173 friend inline void Resize(lx_civector &rv, int len)
00174 #if(CXSC_INDEX_CHECK)
00175 throw(ERROR__WRONG_BOUNDARIES<lx_civector>);
00176 #else
00177 throw();
00178 #endif
00179
00180 };
00181
00183 inline void DoubleSize(lx_civector&) throw();
00184
00185 inline void Resize(lx_civector &rv, int lb, int ub)
00186 #if(CXSC_INDEX_CHECK)
00187 throw(ERROR__WRONG_BOUNDARIES<lx_civector>);
00188 #else
00189 throw();
00190 #endif
00191
00192 inline void Resize(lx_civector &rv, int len)
00193 #if(CXSC_INDEX_CHECK)
00194 throw(ERROR__WRONG_BOUNDARIES<lx_civector>);
00195 #else
00196 throw();
00197 #endif
00198
00199 }
00200
00201
00202 #include "lx_civector.inl"
00203
00204 #endif