00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef SELDON_FILE_MATRIX_COLLECTION_CXX
00022
00023 #include "MatrixCollection.hxx"
00024
00025
00026 namespace Seldon
00027 {
00028
00029
00031
00033
00034
00035
00036
00037
00038
00039
00041
00044 template <class T, class Prop, class Storage, class Allocator>
00045 inline MatrixCollection<T, Prop, Storage, Allocator>::MatrixCollection():
00046 Matrix_Base<T, Allocator>(), Mlocal_(), Mlocal_sum_(1),
00047 Nlocal_(), Nlocal_sum_(1), matrix_()
00048 {
00049 nz_ = 0;
00050 Mmatrix_ = 0;
00051 Nmatrix_ = 0;
00052 Mlocal_sum_.Fill(0);
00053 Nlocal_sum_.Fill(0);
00054 }
00055
00056
00058
00062 template <class T, class Prop, class Storage, class Allocator>
00063 inline MatrixCollection<T, Prop, Storage, Allocator>
00064 ::MatrixCollection(int i, int j): Matrix_Base<T, Allocator>(i, j),
00065 Mlocal_(i), Mlocal_sum_(i + 1),
00066 Nlocal_(j), Nlocal_sum_(j + 1),
00067 matrix_(i, j)
00068 {
00069 nz_ = 0;
00070 Mmatrix_ = i;
00071 Nmatrix_ = j;
00072 Mlocal_.Fill(0);
00073 Nlocal_.Fill(0);
00074 Mlocal_sum_.Fill(0);
00075 Nlocal_sum_.Fill(0);
00076 }
00077
00078
00080 template <class T, class Prop, class Storage, class Allocator>
00081 inline MatrixCollection<T, Prop, Storage, Allocator>
00082 ::MatrixCollection(const MatrixCollection<T, Prop, Storage, Allocator>& A)
00083 : Matrix_Base<T, Allocator>()
00084 {
00085 this->Copy(A);
00086 }
00087
00088
00089
00090
00091
00092
00093
00095 template <class T, class Prop, class Storage, class Allocator>
00096 inline MatrixCollection<T, Prop, Storage, Allocator>::~MatrixCollection()
00097 {
00098 Clear();
00099 }
00100
00101
00103
00107 template <class T, class Prop, class Storage, class Allocator>
00108 inline void MatrixCollection<T, Prop, Storage, Allocator>::Clear()
00109 {
00110 for (int i = 0; i < Mmatrix_; i++)
00111 for (int j = 0; j < Nmatrix_; j++)
00112 matrix_(i, j).Nullify();
00113
00114 matrix_.Clear();
00115
00116 nz_ = 0;
00117 Mmatrix_ = 0;
00118 Nmatrix_ = 0;
00119 Mlocal_.Clear();
00120 Nlocal_.Clear();
00121 Mlocal_sum_.Clear();
00122 Nlocal_sum_.Clear();
00123 }
00124
00125
00127
00131 template <class T, class Prop, class Storage, class Allocator>
00132 inline void MatrixCollection<T, Prop, Storage, Allocator>::Nullify()
00133 {
00134 for (int i = 0; i < Mmatrix_; i++)
00135 for (int j = 0; j < Nmatrix_; j++)
00136 matrix_(i, j).Nullify();
00137
00138 nz_ = 0;
00139 Mmatrix_ = 0;
00140 Nmatrix_ = 0;
00141 Mlocal_.Clear();
00142 Nlocal_.Clear();
00143 Mlocal_sum_.Clear();
00144 Nlocal_sum_.Clear();
00145 }
00146
00147
00149
00153 template <class T, class Prop, class Storage, class Allocator>
00154 inline void MatrixCollection<T, Prop, Storage, Allocator>
00155 ::Nullify(int i, int j)
00156 {
00157 nz_ -= matrix_(i, j).GetDataSize();
00158 matrix_(i, j).Nullify();
00159 }
00160
00161
00163 template <class T, class Prop, class Storage, class Allocator>
00164 inline void MatrixCollection<T, Prop, Storage, Allocator>::Deallocate()
00165 {
00166 for (int i = 0; i < Mmatrix_; i++)
00167 for (int j = 0; j < Nmatrix_; j++)
00168 GetMatrix(i, j).Clear();
00169 this->~MatrixCollection();
00170 }
00171
00172
00173
00174
00175
00176
00177
00179
00183 template <class T, class Prop, class Storage, class Allocator>
00184 int MatrixCollection<T, Prop, Storage, Allocator>::GetM() const
00185 {
00186 return this->m_;
00187 }
00188
00189
00191
00195 template <class T, class Prop, class Storage, class Allocator>
00196 int MatrixCollection<T, Prop, Storage, Allocator>::GetMmatrix() const
00197 {
00198 return Mmatrix_;
00199 }
00200
00201
00203
00207 template <class T, class Prop, class Storage, class Allocator>
00208 int MatrixCollection<T, Prop, Storage, Allocator>::GetM(int i) const
00209 {
00210 #ifdef SELDON_CHECK_BOUNDS
00211 if (i < 0 || i >= Mmatrix_)
00212 throw WrongRow("MatrixCollection::GetM()",
00213 string("Index should be in [0, ")
00214 + to_str(Mmatrix_ - 1) + "], but is equal to "
00215 + to_str(i) + ".");
00216 #endif
00217
00218 return Mlocal_(i);
00219 }
00220
00221
00223
00227 template <class T, class Prop, class Storage, class Allocator>
00228 int MatrixCollection<T, Prop, Storage, Allocator>::GetN() const
00229 {
00230 return this->n_;
00231 }
00232
00233
00235
00239 template <class T, class Prop, class Storage, class Allocator>
00240 int MatrixCollection<T, Prop, Storage, Allocator>::GetNmatrix() const
00241 {
00242 return Nmatrix_;
00243 }
00244
00245
00247
00252 template <class T, class Prop, class Storage, class Allocator>
00253 int MatrixCollection<T, Prop, Storage, Allocator>::GetN(int j) const
00254 {
00255 #ifdef SELDON_CHECK_BOUNDS
00256 if (j < 0 || j >= Nmatrix_)
00257 throw WrongCol("MatrixCollection::GetN()",
00258 string("Index should be in [0, ")
00259 + to_str(Nmatrix_ - 1) + "], but is equal to "
00260 + to_str(j) + ".");
00261 #endif
00262
00263 return Nlocal_(j);
00264 }
00265
00266
00268
00271 template <class T, class Prop, class Storage, class Allocator>
00272 int MatrixCollection<T, Prop, Storage, Allocator>::GetSize() const
00273 {
00274 return this->m_ * this->n_;
00275 }
00276
00277
00279
00282 template <class T, class Prop, class Storage, class Allocator>
00283 int MatrixCollection<T, Prop, Storage, Allocator>::GetDataSize() const
00284 {
00285 return nz_;
00286 }
00287
00288
00289
00290
00291
00292
00293
00295
00301 template <class T, class Prop, class Storage, class Allocator>
00302 inline void MatrixCollection<T, Prop, Storage, Allocator>
00303 ::Reallocate(int i, int j)
00304 {
00305 nz_ = 0;
00306 Mmatrix_ = i;
00307 Nmatrix_ = j;
00308 Mlocal_.Reallocate(i);
00309 Nlocal_.Reallocate(j);
00310 Mlocal_sum_.Reallocate(i + 1);
00311 Nlocal_sum_.Reallocate(j + 1);
00312 Mlocal_.Fill(0.);
00313 Nlocal_.Fill(0.);
00314 Mlocal_sum_.Fill(0.);
00315 Nlocal_sum_.Fill(0.);
00316 matrix_.Reallocate(i, j);
00317 }
00318
00319
00321
00326 template <class T, class Prop, class Storage, class Allocator>
00327 template <class T0, class Prop0, class Storage0, class Allocator0>
00328 inline void MatrixCollection<T, Prop, Storage, Allocator>
00329 ::SetMatrix(int i, int j, const Matrix<T0, Prop0, Storage0, Allocator0>& A)
00330 {
00331 #ifdef SELDON_CHECK_BOUNDS
00332 if (i < 0 || i >= Mmatrix_)
00333 throw WrongRow("MatrixCollection::SetMatrix()",
00334 string("Line index should be in [0, ")
00335 + to_str(Mmatrix_ - 1) + "], but is equal to "
00336 + to_str(i) + ".");
00337 if (j < 0 || j >= Nmatrix_)
00338 throw WrongCol("MatrixCollection::SetMatrix()",
00339 string("Column index should be in [0, ")
00340 + to_str(Nmatrix_ - 1) + "], but is equal to "
00341 + to_str(j) + ".");
00342 if ((Mlocal_(i) != 0) && (Mlocal_(i) != A.GetM()))
00343 throw WrongDim("MatrixCollection::SetMatrix()",
00344 string("The matrix expected should have ")
00345 + to_str(this->Mlocal_(i)) + " rows, but has "
00346 + to_str(A.GetM()) + " rows.");
00347 if ((Nlocal_(j) != 0) && (Nlocal_(j) != A.GetN()))
00348 throw WrongDim("MatrixCollection::SetMatrix()",
00349 string("The matrix expected should have ")
00350 + to_str(this->Nlocal_(j)) + " columns, but has "
00351 + to_str(A.GetN()) + " columns.");
00352 #endif
00353
00354 nz_ = A.GetDataSize() - matrix_(i, j).GetDataSize();
00355
00356 int Mdiff = A.GetM() - Mlocal_(i);
00357 int Ndiff = A.GetN() - Nlocal_(j);
00358
00359 Mlocal_(i) = A.GetM();
00360 Nlocal_(j) = A.GetN();
00361
00362 for (int k = i + 1; k < Mmatrix_ + 1; k++)
00363 Mlocal_sum_(k) += Mdiff;
00364
00365 for (int k = j + 1; k < Nmatrix_ + 1; k++)
00366 Nlocal_sum_(k) += Ndiff;
00367
00368 this->m_ = Mlocal_sum_(Mmatrix_);
00369 this->n_ = Nlocal_sum_(Nmatrix_);
00370
00371 matrix_(i, j).SetData(A.GetM(), A.GetN(), A.GetData());
00372 }
00373
00374
00376
00381 template <class T, class Prop, class Storage, class Allocator>
00382 template <class T0, class Prop0, class Allocator0>
00383 inline void MatrixCollection<T, Prop, Storage, Allocator>
00384 ::SetMatrix(int i, int j, const Matrix<T0, Prop0, RowSparse, Allocator0>& A)
00385 {
00386 #ifdef SELDON_CHECK_BOUNDS
00387 if (i < 0 || i >= Mmatrix_)
00388 throw WrongRow("MatrixCollection::SetMatrix()",
00389 string("Index should be in [0, ")
00390 + to_str(Mmatrix_ - 1) + "], but is equal to "
00391 + to_str(i) + ".");
00392 if (j < 0 || j >= Nmatrix_)
00393 throw WrongCol("MatrixCollection::SetMatrix()",
00394 string("Index should be in [0, ")
00395 + to_str(Nmatrix_ - 1) + "], but is equal to "
00396 + to_str(j) + ".");
00397 if ((Mlocal_(i) != 0) && (Mlocal_(i) != A.GetM()))
00398 throw WrongDim("MatrixCollection::SetMatrix()",
00399 string("The matrix expected should have ")
00400 + to_str(this->Mlocal_(i)) + " rows, but has "
00401 + to_str(A.GetM()) + " rows.");
00402 if ((Nlocal_(j) != 0) && (Nlocal_(j) != A.GetN()))
00403 throw WrongDim("MatrixCollection::SetMatrix()",
00404 string("The matrix expected should have ")
00405 + to_str(this->Nlocal_(j)) + " columns, but has "
00406 + to_str(A.GetN()) + " columns.");
00407 #endif
00408
00409 nz_ = A.GetDataSize() - matrix_(i, j).GetDataSize();
00410
00411 int Mdiff = A.GetM() - Mlocal_(i);
00412 int Ndiff = A.GetN() - Nlocal_(j);
00413
00414 Mlocal_(i) = A.GetM();
00415 Nlocal_(j) = A.GetN();
00416
00417 for (int k = i + 1; k < Mmatrix_ + 1; k++)
00418 Mlocal_sum_(k) += Mdiff;
00419
00420 for (int k = j + 1; k < Nmatrix_ + 1; k++)
00421 Nlocal_sum_(k) += Ndiff;
00422
00423 this->m_ = Mlocal_sum_(Mmatrix_);
00424 this->n_ = Nlocal_sum_(Nmatrix_);
00425
00426 matrix_(i, j).SetData(A.GetM(), A.GetN(), A.GetNonZeros(), A.GetData(),
00427 A.GetPtr(), A.GetInd());
00428 }
00429
00430
00431
00432
00433
00434
00435
00437
00443 template <class T, class Prop, class Storage, class Allocator>
00444 inline
00445 typename MatrixCollection<T, Prop, Storage, Allocator>::matrix_reference
00446 MatrixCollection<T, Prop, Storage, Allocator>::GetMatrix(int i, int j)
00447 {
00448 #ifdef SELDON_CHECK_BOUNDS
00449 if (i < 0 || i >= Mmatrix_)
00450 throw WrongRow("MatrixCollection::GetMatrix(int, int)",
00451 string("Row index should be in [0, ")
00452 + to_str(Mmatrix_ - 1) + "], but is equal to "
00453 + to_str(i) + ".");
00454 if (j < 0 || j >= Nmatrix_)
00455 throw WrongCol("MatrixCollection::GetMatrix(int, int)",
00456 string("Column index should be in [0, ")
00457 + to_str(Nmatrix_ - 1) + "], but is equal to "
00458 + to_str(j) + ".");
00459 #endif
00460
00461 return matrix_(i, j);
00462 }
00463
00464
00466
00472 template <class T, class Prop, class Storage, class Allocator>
00473 inline typename MatrixCollection<T, Prop, Storage, Allocator>
00474 ::const_matrix_reference
00475 MatrixCollection<T, Prop, Storage, Allocator>::GetMatrix(int i,
00476 int j) const
00477 {
00478 #ifdef SELDON_CHECK_BOUNDS
00479 if (i < 0 || i >= Mmatrix_)
00480 throw WrongRow("MatrixCollection::GetMatrix(int, int)",
00481 string("Row index should be in [0, ")
00482 + to_str(Mmatrix_ - 1) + "], but is equal to "
00483 + to_str(i) + ".");
00484 if (j < 0 || j >= Nmatrix_)
00485 throw WrongCol("MatrixCollection::GetMatrix(int, int)",
00486 string("Column index should be in [0, ")
00487 + to_str(Nmatrix_ - 1) + "], but is equal to "
00488 + to_str(j) + ".");
00489 #endif
00490
00491 return matrix_(i, j);
00492 }
00493
00494
00496
00502 template <class T, class Prop, class Storage, class Allocator>
00503 inline typename MatrixCollection<T, Prop, Storage, Allocator>
00504 ::value_type
00505 MatrixCollection<T, Prop, Storage, Allocator>::operator() (int i,
00506 int j) const
00507 {
00508 #ifdef SELDON_CHECK_BOUNDS
00509 if (i < 0 || i >= this->Mlocal_sum_(Mmatrix_))
00510 throw WrongRow("MatrixCollection::operator(int, int)",
00511 string("Row index should be in [0, ")
00512 + to_str(this->Mlocal_sum_(Mmatrix_) - 1)
00513 + "], but is equal to " + to_str(i) + ".");
00514 if (j < 0 || j >= this->Nlocal_sum_(Nmatrix_))
00515 throw WrongCol("MatrixCollection::operator(int, int)",
00516 string("Column index should be in [0, ")
00517 + to_str(this->Nlocal_sum_(Nmatrix_) - 1)
00518 + "], but is equal to " + to_str(j) + ".");
00519 #endif
00520
00521 int i_global = 0;
00522 while (i >= Mlocal_sum_(i_global))
00523 i_global++;
00524 i_global--;
00525
00526 int j_global = 0;
00527 while (j >= Nlocal_sum_(j_global))
00528 j_global++;
00529 j_global--;
00530
00531 return matrix_(i_global, j_global)(i - Mlocal_sum_(i_global),
00532 j - Nlocal_sum_(j_global));
00533 }
00534
00535
00537
00542 template <class T, class Prop, class Storage, class Allocator>
00543 inline MatrixCollection<T, Prop, Storage, Allocator>&
00544 MatrixCollection<T, Prop, Storage, Allocator>
00545 ::operator= (const MatrixCollection<T, Prop, Storage, Allocator>& A)
00546 {
00547 this->Copy(A);
00548 return *this;
00549 }
00550
00551
00553
00558 template <class T, class Prop, class Storage, class Allocator>
00559 inline void MatrixCollection<T, Prop, Storage, Allocator>
00560 ::Copy(const MatrixCollection<T, Prop, Storage, Allocator>& A)
00561 {
00562 Clear();
00563
00564 this->nz_ = A.nz_;
00565 this->m_ = A.GetM();
00566 this->n_ = A.GetN();
00567 Mmatrix_ = A.Mmatrix_;
00568 Nmatrix_ = A.Nmatrix_;
00569 this->Mlocal_ = A.Mlocal_;
00570 this->Mlocal_sum_ = A.Mlocal_sum_;
00571 this->Nlocal_ = A.Nlocal_;
00572 this->Nlocal_sum_ = A.Nlocal_sum_;
00573
00574 matrix_.Reallocate(Mmatrix_, Nmatrix_);
00575
00576 for (int i = 0; i < Mmatrix_; i++)
00577 for (int j = 0; j < Nmatrix_; j++)
00578 SetMatrix(i, j, A.GetMatrix(i, j));
00579 }
00580
00581
00582
00583
00584
00585
00586
00588
00591 template <class T, class Prop, class Storage, class Allocator>
00592 void MatrixCollection<T, Prop, Storage, Allocator>::Print() const
00593 {
00594 for (int i = 0; i < Mmatrix_; i++)
00595 {
00596 for (int j = 0; j < Nmatrix_; j++)
00597 cout << GetMatrix(i, j) << endl;
00598 cout << endl;
00599 }
00600 }
00601
00602
00604
00608 template <class T, class Prop, class Storage, class Allocator>
00609 void MatrixCollection<T, Prop, Storage, Allocator>
00610 ::Print(int i, int j) const
00611 {
00612 #ifdef SELDON_CHECK_BOUNDS
00613 if (i < 0 || i >= Mmatrix_)
00614 throw WrongRow("MatrixCollection::Print(int, int)",
00615 string("Row index should be in [0, ")
00616 + to_str(Mmatrix_ - 1) + "], but is equal to "
00617 + to_str(i) + ".");
00618 if (j < 0 || j >= Nmatrix_)
00619 throw WrongCol("MatrixCollection::Print(int, int)",
00620 string("Column index should be in [0, ")
00621 + to_str(Nmatrix_ - 1) + "], but is equal to "
00622 + to_str(j) + ".");
00623 #endif
00624
00625 cout << matrix_(i, j) << endl;
00626 }
00627
00628
00630
00638 template <class T, class Prop, class Storage, class Allocator>
00639 void MatrixCollection<T, Prop, Storage, Allocator>
00640 ::Write(string FileName, bool with_size) const
00641 {
00642 ofstream FileStream;
00643 FileStream.open(FileName.c_str());
00644
00645 #ifdef SELDON_CHECK_IO
00646
00647 if (!FileStream.is_open())
00648 throw IOError("MatrixCollection::Write(string FileName, bool)",
00649 string("Unable to open file \"") + FileName + "\".");
00650 #endif
00651
00652 this->Write(FileStream, with_size);
00653
00654 FileStream.close();
00655 }
00656
00657
00659
00667 template <class T, class Prop, class Storage, class Allocator>
00668 void MatrixCollection<T, Prop, Storage, Allocator>
00669 ::Write(ostream& FileStream, bool with_size = true) const
00670 {
00671
00672 #ifdef SELDON_CHECK_IO
00673
00674 if (!FileStream.good())
00675 throw IOError("MatrixCollection::Write(ostream& FileStream, bool)",
00676 "The stream is not ready.");
00677 #endif
00678
00679 if (with_size)
00680 {
00681 FileStream.write(reinterpret_cast<char*>(const_cast<int*>(&Mmatrix_)),
00682 sizeof(int));
00683 FileStream.write(reinterpret_cast<char*>(const_cast<int*>(&Nmatrix_)),
00684 sizeof(int));
00685 }
00686
00687 int i, j;
00688 for (i = 0; i < this->GetMmatrix(); i++)
00689 {
00690 for (j = 0; j < this->GetNmatrix(); j++)
00691 GetMatrix(i, j).Write(FileStream, with_size);
00692 }
00693
00694 #ifdef SELDON_CHECK_IO
00695
00696 if (!FileStream.good())
00697 throw IOError("MatrixCollection::Write(ostream& FileStream, bool)",
00698 "Output operation failed.");
00699 #endif
00700
00701 }
00702
00703
00705
00710 template <class T, class Prop, class Storage, class Allocator>
00711 void MatrixCollection<T, Prop, Storage, Allocator>
00712 ::WriteText(string FileName) const
00713 {
00714 ofstream FileStream;
00715 FileStream.precision(cout.precision());
00716 FileStream.flags(cout.flags());
00717 FileStream.open(FileName.c_str());
00718
00719 #ifdef SELDON_CHECK_IO
00720
00721 if (!FileStream.is_open())
00722 throw IOError("MatrixCollection::WriteText(string FileName)",
00723 string("Unable to open file \"") + FileName + "\".");
00724 #endif
00725
00726 this->WriteText(FileStream);
00727
00728 FileStream.close();
00729 }
00730
00731
00733
00739 template <class T, class Prop, class Storage, class Allocator>
00740 void MatrixCollection<T, Prop, Storage, Allocator>
00741 ::WriteText(ostream& FileStream) const
00742 {
00743
00744 #ifdef SELDON_CHECK_IO
00745
00746 if (!FileStream.good())
00747 throw IOError("MatrixCollection::WriteText(ostream& FileStream)",
00748 "The stream is not ready.");
00749 #endif
00750
00751 int i, j;
00752 for (i = 0; i < this->GetMmatrix(); i++)
00753 {
00754 for (j = 0; j < this->GetNmatrix(); j++)
00755 GetMatrix(i, j).WriteText(FileStream);
00756 FileStream << endl;
00757 }
00758
00759 #ifdef SELDON_CHECK_IO
00760
00761 if (!FileStream.good())
00762 throw IOError("MatrixCollection::WriteText(ostream& FileStream)",
00763 "Output operation failed.");
00764 #endif
00765
00766 }
00767
00768
00770
00776 template <class T, class Prop, class Storage, class Allocator>
00777 void MatrixCollection<T, Prop, Storage, Allocator>::Read(string FileName)
00778 {
00779 ifstream FileStream;
00780 FileStream.open(FileName.c_str());
00781
00782 #ifdef SELDON_CHECK_IO
00783
00784 if (!FileStream.is_open())
00785 throw IOError("MatrixCollection::Read(string FileName)",
00786 string("Unable to open file \"") + FileName + "\".");
00787 #endif
00788
00789 this->Read(FileStream);
00790
00791 FileStream.close();
00792 }
00793
00794
00796
00802 template <class T, class Prop, class Storage, class Allocator>
00803 void MatrixCollection<T, Prop, Storage, Allocator>
00804 ::Read(istream& FileStream)
00805 {
00806
00807 #ifdef SELDON_CHECK_IO
00808
00809 if (!FileStream.good())
00810 throw IOError("MatrixCollection::Read(istream& FileStream)",
00811 "The stream is not ready.");
00812 #endif
00813
00814 int *new_m, *new_n;
00815 new_m = new int;
00816 new_n = new int;
00817
00818 FileStream.read(reinterpret_cast<char*>(new_m), sizeof(int));
00819 FileStream.read(reinterpret_cast<char*>(new_n), sizeof(int));
00820
00821 this->Reallocate(*new_m, *new_n);
00822
00823 T working_matrix;
00824 int i, j;
00825 for (i = 0; i < *new_m; i++)
00826 for (j = 0; j < *new_n; j++)
00827 {
00828 working_matrix.Read(FileStream);
00829 SetMatrix(i, j, working_matrix);
00830 working_matrix.Nullify();
00831 }
00832
00833
00834 delete new_n;
00835 delete new_m;
00836
00837 #ifdef SELDON_CHECK_IO
00838
00839 if (!FileStream.good())
00840 throw IOError("MatrixCollection::Read(istream& FileStream)",
00841 "Output operation failed.");
00842 #endif
00843
00844 }
00845
00846
00848
00850
00851
00852
00853
00854
00855
00856
00858
00861 template <class T, class Prop, class Allocator>
00862 inline Matrix<T, Prop, ColMajorCollection, Allocator>::Matrix():
00863 MatrixCollection<T, Prop, ColMajor, Allocator>()
00864 {
00865 }
00866
00867
00869
00873 template <class T, class Prop, class Allocator>
00874 inline Matrix<T, Prop, ColMajorCollection, Allocator>::Matrix(int i, int j):
00875 MatrixCollection<T, Prop, ColMajor, Allocator>(i, j)
00876 {
00877 }
00878
00879
00881
00883
00884
00885
00886
00887
00888
00889
00891
00894 template <class T, class Prop, class Allocator>
00895 inline Matrix<T, Prop, RowMajorCollection, Allocator>::Matrix():
00896 MatrixCollection<T, Prop, RowMajor, Allocator>()
00897 {
00898 }
00899
00900
00902
00906 template <class T, class Prop, class Allocator>
00907 inline Matrix<T, Prop, RowMajorCollection, Allocator>::Matrix(int i, int j):
00908 MatrixCollection<T, Prop, RowMajor, Allocator>(i, j)
00909 {
00910 }
00911
00912
00914
00916
00917
00918
00919
00920
00921
00922
00924
00927 template <class T, class Prop, class Allocator>
00928 inline Matrix<T, Prop, ColSymPackedCollection, Allocator>::Matrix():
00929 MatrixCollection<T, Prop, ColSymPacked, Allocator>()
00930 {
00931 }
00932
00933
00935
00939 template <class T, class Prop, class Allocator>
00940 inline Matrix<T, Prop, ColSymPackedCollection, Allocator>
00941 ::Matrix(int i, int j):
00942 MatrixCollection<T, Prop, ColSymPacked, Allocator>(i, j)
00943 {
00944 }
00945
00946
00948
00950
00951
00952
00953
00954
00955
00956
00958
00961 template <class T, class Prop, class Allocator>
00962 inline Matrix<T, Prop, RowSymPackedCollection, Allocator>::Matrix():
00963 MatrixCollection<T, Prop, RowSymPacked, Allocator>()
00964 {
00965 }
00966
00967
00969
00973 template <class T, class Prop, class Allocator>
00974 inline Matrix<T, Prop, RowSymPackedCollection, Allocator>
00975 ::Matrix(int i, int j):
00976 MatrixCollection<T, Prop, RowSymPacked, Allocator>(i, j)
00977 {
00978 }
00979
00980
00981 }
00982
00983
00984 #define SELDON_FILE_MATRIX_COLLECTION_CXX
00985 #endif