00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef SELDON_FILE_SHARE_MATRIXFLAG_CXX
00021
00022
00023 #include "MatrixFlag.hxx"
00024
00025
00026 namespace Seldon
00027 {
00028
00029
00031
00033
00034
00035 SeldonTranspose::SeldonTranspose(int status)
00036 {
00037 status_ = status;
00038 #ifdef SELDON_WITH_BLAS
00039 if (status_ == 0)
00040 cblas_status_ = CblasTrans;
00041 else if (status_ == 1)
00042 cblas_status_ = CblasNoTrans;
00043 else
00044 cblas_status_ = CblasConjTrans;
00045 #endif
00046 }
00047
00048
00049 #ifdef SELDON_WITH_BLAS
00050 SeldonTranspose::SeldonTranspose(const enum CBLAS_TRANSPOSE status):
00051 cblas_status_(status)
00052 {
00053 if (cblas_status_ == CblasTrans)
00054 status_ = 0;
00055 else if (cblas_status_ == CblasNoTrans)
00056 status_ = 1;
00057 else
00058 status_ = 2;
00059 }
00060 #endif
00061
00062
00063 #ifdef SELDON_WITH_BLAS
00064 SeldonTranspose::operator CBLAS_TRANSPOSE() const
00065 {
00066 return cblas_status_;
00067 }
00068 #endif
00069
00070
00071 char SeldonTranspose::Char() const
00072 {
00073 if (status_ == 0)
00074 return 'T';
00075 else if (status_ == 1)
00076 return 'N';
00077 else
00078 return 'C';
00079 }
00080
00081
00082 char SeldonTranspose::RevChar() const
00083 {
00084 if (status_ == 0)
00085 return 'N';
00086 else if (status_ == 1)
00087 return 'T';
00088 else
00089 return 'N';
00090 }
00091
00092
00093 bool SeldonTranspose::Trans() const
00094 {
00095 return (status_ == 0);
00096 }
00097
00098
00099 bool SeldonTranspose::NoTrans() const
00100 {
00101 return (status_ == 1);
00102 }
00103
00104
00105 bool SeldonTranspose::ConjTrans() const
00106 {
00107 return (status_ == 2);
00108 }
00109
00110
00111 class_SeldonTrans::class_SeldonTrans(): SeldonTranspose(0)
00112 {
00113 }
00114
00115
00116 class_SeldonNoTrans::class_SeldonNoTrans(): SeldonTranspose(1)
00117 {
00118 }
00119
00120
00121 class_SeldonConjTrans::class_SeldonConjTrans(): SeldonTranspose(2)
00122 {
00123 }
00124
00125
00126 #ifndef SELDON_WITH_COMPILED_LIBRARY
00127 class_SeldonTrans SeldonTrans;
00128 class_SeldonNoTrans SeldonNoTrans;
00129 class_SeldonConjTrans SeldonConjTrans;
00130 #endif
00131
00132
00134
00136
00137
00138 SeldonDiag::SeldonDiag(int status)
00139 {
00140 status_ = status;
00141 #ifdef SELDON_WITH_BLAS
00142 if (status_ == 0)
00143 cblas_status_ = CblasNonUnit;
00144 else
00145 cblas_status_ = CblasUnit;
00146 #endif
00147 }
00148
00149
00150 #ifdef SELDON_WITH_BLAS
00151 SeldonDiag::operator CBLAS_DIAG() const
00152 {
00153 return cblas_status_;
00154 }
00155 #endif
00156
00157
00158 char SeldonDiag::Char() const
00159 {
00160 return (status_ == 0) ? 'N' : 'U';
00161 }
00162
00163
00164 bool SeldonDiag::NonUnit() const
00165 {
00166 return (status_ == 0);
00167 }
00168
00169
00170 bool SeldonDiag::Unit() const
00171 {
00172 return (status_ == 1);
00173 }
00174
00175
00176 class_SeldonNonUnit::class_SeldonNonUnit(): SeldonDiag(0)
00177 {
00178 }
00179
00180
00181 class_SeldonUnit::class_SeldonUnit(): SeldonDiag(1)
00182 {
00183 }
00184
00185
00186 #ifndef SELDON_WITH_COMPILED_LIBRARY
00187 class_SeldonNonUnit SeldonNonUnit;
00188 class_SeldonUnit SeldonUnit;
00189 #endif
00190
00191
00193
00195
00196
00197 SeldonUplo::SeldonUplo(int status)
00198 {
00199 status_ = status;
00200 #ifdef SELDON_WITH_BLAS
00201 if (status_ == 0)
00202 cblas_status_ = CblasUpper;
00203 else
00204 cblas_status_ = CblasLower;
00205 #endif
00206 }
00207
00208
00209 #ifdef SELDON_WITH_BLAS
00210 SeldonUplo::operator CBLAS_UPLO() const
00211 {
00212 return cblas_status_;
00213 }
00214 #endif
00215
00216
00217 SeldonUplo::operator char() const
00218 {
00219 return (status_ == 0) ? 'U' : 'L';
00220 }
00221
00222
00223 bool SeldonUplo::Upper() const
00224 {
00225 return (status_ == 0);
00226 }
00227
00228
00229 bool SeldonUplo::Lower() const
00230 {
00231 return (status_ == 1);
00232 }
00233
00234
00235 char SeldonUplo::Char() const
00236 {
00237 return (status_ == 0) ? 'U' : 'L';
00238 }
00239
00240
00241 char SeldonUplo::RevChar() const
00242 {
00243 return (status_ == 0) ? 'L' : 'U';
00244 }
00245
00246
00247 #ifndef SELDON_WITH_COMPILED_LIBRARY
00248 SeldonUplo SeldonUpper(0);
00249 SeldonUplo SeldonLower(1);
00250 #endif
00251
00252
00254
00256
00257
00258 SeldonNorm::SeldonNorm(int status)
00259 {
00260 status_ = status;
00261 }
00262
00263
00264 SeldonNorm::operator char() const
00265 {
00266 return (status_ == 0) ? 'I' : '1';
00267 }
00268
00269
00270 char SeldonNorm::Char() const
00271 {
00272 return (status_ == 0) ? 'I' : '1';
00273 }
00274
00275
00276 char SeldonNorm::RevChar() const
00277 {
00278 return (status_ == 0) ? '1' : 'I';
00279 }
00280
00281
00282 #ifndef SELDON_WITH_COMPILED_LIBRARY
00283 SeldonNorm SeldonNormInf(0);
00284 SeldonNorm SeldonNorm1(1);
00285 #endif
00286
00287
00289
00291
00292
00293 SeldonConjugate::SeldonConjugate(bool status)
00294 {
00295 status_ = status;
00296 }
00297
00298
00299 inline bool SeldonConjugate::Conj() const
00300 {
00301 return status_;
00302 }
00303
00304
00305 #ifndef SELDON_WITH_COMPILED_LIBRARY
00306 SeldonConjugate SeldonUnconj(false);
00307 SeldonConjugate SeldonConj(true);
00308 #endif
00309
00310
00312
00314
00315
00316 SeldonSide::SeldonSide(int status)
00317 {
00318 status_ = status;
00319 #ifdef SELDON_WITH_BLAS
00320 if (status_ == 0)
00321 cblas_status_ = CblasLeft;
00322 else
00323 cblas_status_ = CblasRight;
00324 #endif
00325 }
00326
00327
00328 #ifdef SELDON_WITH_BLAS
00329 SeldonSide::SeldonSide(const enum CBLAS_SIDE status):
00330 cblas_status_(status)
00331 {
00332 if (cblas_status_ == CblasLeft)
00333 status_ = 0;
00334 else
00335 status_ = 1;
00336 }
00337 #endif
00338
00339
00340 #ifdef SELDON_WITH_BLAS
00341 SeldonSide::operator CBLAS_SIDE() const
00342 {
00343 return cblas_status_;
00344 }
00345 #endif
00346
00347
00348 bool SeldonSide::Left() const
00349 {
00350 return (status_ == 0);
00351 }
00352
00353
00354 bool SeldonSide::Right() const
00355 {
00356 return (status_ == 1);
00357 }
00358
00359
00360 class_SeldonLeft::class_SeldonLeft(): SeldonSide(0)
00361 {
00362 }
00363
00364
00365 class_SeldonRight::class_SeldonRight(): SeldonSide(1)
00366 {
00367 }
00368
00369
00370 #ifndef SELDON_WITH_COMPILED_LIBRARY
00371 class_SeldonLeft SeldonLeft;
00372 class_SeldonRight SeldonRight;
00373 #endif
00374
00375
00376 }
00377
00378
00379 #define SELDON_FILE_SHARE_MATRIXFLAG_CXX
00380 #endif