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