Go to the documentation of this file.00001
00002
00003
00004
00005 #ifndef _LA_LOWER_TRIANG_MAT_DOUBLE_H_
00006 #define _LA_LOWER_TRIANG_MAT_DOUBLE_H_
00007
00008 #include "arch.h"
00009 #ifndef _LA_GEN_MAT_DOUBLE_H_
00010 #include LA_GEN_MAT_DOUBLE_H
00011 #endif
00012
00013
00014
00015 class DLLIMPORT LaLowerTriangMatDouble
00016 {
00017 LaGenMatDouble data_;
00018 static double outofbounds_;
00019 static int debug_;
00020 static int *info_;
00021
00022
00023 public:
00024
00025
00026
00027 inline LaLowerTriangMatDouble();
00028 inline LaLowerTriangMatDouble(int, int);
00029 inline LaLowerTriangMatDouble(double*, int, int);
00030 inline LaLowerTriangMatDouble(const LaLowerTriangMatDouble &);
00031
00032
00033
00034 inline LaLowerTriangMatDouble& ref(LaLowerTriangMatDouble &);
00035 inline LaLowerTriangMatDouble& ref(LaGenMatDouble &);
00036 LaLowerTriangMatDouble& copy(const LaLowerTriangMatDouble &);
00037 LaLowerTriangMatDouble& operator=(double);
00038 inline LaLowerTriangMatDouble& operator=(const LaLowerTriangMatDouble &);
00039 inline double& operator()(int, int);
00040 inline const double& operator()(int, int) const;
00041
00042
00043
00044 inline int size(int) const;
00045 inline int inc(int d) const;
00046 inline int gdim(int d) const;
00047 inline double* addr() const
00048 {
00049 return data_.addr();
00050 }
00051 inline int ref_count() const
00052 {
00053 return data_.ref_count();
00054 }
00055 inline LaIndex index(int d) const
00056 {
00057 return data_.index(d);
00058 }
00059 inline int shallow() const
00060 {
00061 return data_.shallow();
00062 }
00063 inline int debug() const
00064 {
00065 return debug_;
00066 }
00067 inline int debug(int d)
00068 {
00069 return debug_ = d;
00070 }
00071
00072 inline LaLowerTriangMatDouble& resize(const LaLowerTriangMatDouble&);
00074 inline LaLowerTriangMatDouble& resize(int m, int n);
00075
00076 inline const LaLowerTriangMatDouble& info() const
00077 {
00078 int *t = info_;
00079 *t = 1;
00080 return *this;
00081 };
00082
00083
00084
00085 friend DLLIMPORT std::ostream &operator<<(std::ostream &, const LaLowerTriangMatDouble &);
00086
00087
00088
00089 inline ~LaLowerTriangMatDouble();
00090 };
00091
00092 DLLIMPORT std::ostream &operator<<(std::ostream &s, const LaLowerTriangMatDouble &ob);
00093
00094
00095 inline LaLowerTriangMatDouble::LaLowerTriangMatDouble() : data_()
00096 {
00097 *info_ = 0;
00098 }
00099
00100 inline LaLowerTriangMatDouble::LaLowerTriangMatDouble(int i, int j): data_(i, j)
00101 {
00102 *info_ = 0;
00103 }
00104
00105 inline LaLowerTriangMatDouble::LaLowerTriangMatDouble(double *d, int i, int j):
00106 data_(d, i, j)
00107 {
00108 *info_ = 0;
00109 }
00110
00111 inline LaLowerTriangMatDouble::LaLowerTriangMatDouble(const LaLowerTriangMatDouble &A)
00112 {
00113
00114 data_.copy(A.data_);
00115 }
00116
00117
00118
00119
00120 inline LaLowerTriangMatDouble& LaLowerTriangMatDouble::ref(LaLowerTriangMatDouble &ob)
00121 {
00122
00123 data_.ref(ob.data_);
00124
00125 return *this;
00126 }
00127
00128
00129 inline LaLowerTriangMatDouble& LaLowerTriangMatDouble::ref(LaGenMatDouble &ob)
00130 {
00131
00132 data_.ref(ob);
00133
00134 return *this;
00135 }
00136
00137
00138 inline LaLowerTriangMatDouble& LaLowerTriangMatDouble::resize(const LaLowerTriangMatDouble &ob)
00139 {
00140
00141 data_.resize(ob.data_);
00142
00143 return *this;
00144 }
00145
00146 inline LaLowerTriangMatDouble& LaLowerTriangMatDouble::resize(int m, int n)
00147 {
00148
00149 data_.resize(m, n);
00150
00151 return *this;
00152 }
00153
00154
00155 inline LaLowerTriangMatDouble& LaLowerTriangMatDouble::operator=(const LaLowerTriangMatDouble &L)
00156 {
00157
00158 data_ = L.data_;
00159
00160 return *this;
00161 }
00162
00163
00164 inline double& LaLowerTriangMatDouble::operator()(int i, int j)
00165 {
00166
00167
00168 #ifdef LOWER_INDEX_CHK
00169 if (i < j)
00170 {
00171 std::cout << "Warning, index to Lower Triular matrix out of range!\n";
00172 std::cout << " i = " << i << " " << " j = " << j << std::endl;
00173 }
00174 #endif
00175
00176 if (i < j)
00177 return outofbounds_;
00178 else
00179 return data_(i, j);
00180 }
00181
00182
00183 inline const double& LaLowerTriangMatDouble::operator()(int i, int j) const
00184 {
00185
00186 #ifdef LOWER_INDEX_CHK
00187 if (i < j)
00188 {
00189 std::cout << "Warning, index to Lower Triular matrix out of range!\n";
00190 std::cout << " i = " << i << " " << " j = " << j << std::endl;
00191 }
00192 #endif
00193
00194 if (i < j)
00195 return outofbounds_;
00196 else
00197 return data_(i, j);
00198 }
00199
00200
00201
00202
00203 inline LaLowerTriangMatDouble::~LaLowerTriangMatDouble()
00204 {
00205 }
00206
00207 inline int LaLowerTriangMatDouble::size(int d) const
00208 {
00209 return(data_.size(d));
00210 }
00211
00212 inline int LaLowerTriangMatDouble::inc(int d) const
00213 {
00214 return(data_.inc(d));
00215 }
00216
00217 inline int LaLowerTriangMatDouble::gdim(int d) const
00218 {
00219 return(data_.gdim(d));
00220 }
00221
00222
00223 #if 0
00224
00225
00226 inline LaLowerTriangMatDouble::operator LaGenMatDouble()
00227 {
00228 LaGenMatDouble G;
00229
00230 G.ref((*this).data_);
00231
00232 return G;
00233 }
00234 #endif
00235
00236
00237 #endif
00238