/*************************************************************************** * blitz/mstruct.h Matrix structure classes * * $Id: mstruct.h,v 1.1.1.1 1999-04-09 17:59:00 ansari Exp $ * * Copyright (C) 1997,1998 Todd Veldhuizen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * * Suggestions: blitz-suggest@cybervision.com * Bugs: blitz-bugs@cybervision.com * * For more information, please see the Blitz++ Home Page: * http://seurat.uwaterloo.ca/blitz/ * *************************************************************************** * $Log: not supported by cvs2svn $ * Revision 1.5 1998/03/14 00:04:47 tveldhui * 0.2-alpha-05 * * Revision 1.4 1997/07/16 14:51:20 tveldhui * Update: Alpha release 0.2 (Arrays) * * Revision 1.3 1997/01/24 14:42:00 tveldhui * Periodic RCS update * * Revision 1.2 1997/01/13 22:19:58 tveldhui * Periodic RCS update * * */ #ifndef BZ_MSTRUCT_H #define BZ_MSTRUCT_H #ifndef BZ_BLITZ_H #include #endif #ifndef BZ_ZERO_H #include #endif /* * Each matrix structure class encapsulates a storage format for matrix * data. It is responsible for: * - Storing the size of the matrix * - Calculating how many unique elements the matrix will have * - Mapping indices (i,j) onto memory locations * - Performing any sign reversals or conjugations when matrix * elements are retrieved (e.g. in a Hermitian or Skew symmetric * matrix) * * Every matrix structure class must provide these methods: * * ctor() * ctor(unsigned rows, unsigned cols) * unsigned columns() const; * unsigned cols() const; * unsigned firstInRow() const; * unsigned firstInCol() const; * template T& get(T* data, unsigned i, unsigned j); * template T get(const T* data, unsigned i, unsigned j) const; * bool inRange(unsigned i, unsigned j) const * unsigned lastInRow() const; * unsigned lastInCol() const; * unsigned numElements() const; * void resize(unsigned rows, unsigned cols); * unsigned rows() const; * * Each matrix structure class must declare a public type * T_iterator which is an iterator to scan through the unique * entries of the matrix. The iterator class must provide * these methods: * * ctor(unsigned rows, unsigned cols) * unsigned offset() const * operator bool() const * unsigned row() const * unsigned col() const */ BZ_NAMESPACE(blitz) class MatrixStructure { }; class AsymmetricMatrix : public MatrixStructure { public: AsymmetricMatrix() : rows_(0), cols_(0) { } AsymmetricMatrix(unsigned rows, unsigned cols) : rows_(rows), cols_(cols) { } unsigned columns() const { return cols_; } unsigned cols() const { return cols_; } _bz_bool inRange(unsigned i, unsigned j) const { return (i < rows_) && (j < cols_); } void resize(unsigned rows, unsigned cols) { rows_ = rows; cols_ = cols; } unsigned rows() const { return rows_; } protected: unsigned rows_, cols_; }; // Still to be implemented: // SkewSymmetric // Hermitian // Tridiagonal // Banded // Upper bidiagonal // Lower bidiagonal // Upper Hessenberg // Lower Hessenberg BZ_NAMESPACE_END #include // RowMajor and ColumnMajor general matrices #include // Symmetric #include // Diagonal #include // Toeplitz #include // Lower triangular #include // Upper triangular #endif // BZ_MSTRUCT_H