00001 /*
00002 File: SubSMat.h
00003
00004 Function: Defines a scatter-gather sparse matrix, i.e., a submatrix of another sparse
00005 matrix.
00006
00007 Author(s): Andrew Willmott
00008
00009 Copyright: (c) 1995-2000, Andrew Willmott
00010 */
00011
00012
00013 #ifndef __SubSMat__
00014 #define __SubSMat__
00015
00016 #include "vl/VL.h"
00017 #include "vl/Mat.h"
00018
00019
00020 // --- SubSMat Class ----------------------------------------------------------
00021
00022
00023 class TSubSVec;
00024 class TSparseVec;
00025 class TSparseMat;
00026
00027 class TSubSMat
00028 {
00029 public:
00030
00031 // Constructors
00032
00033 TSubSMat(Int m, Int n, Int start, TMSparseVec *target);
00034 TSubSMat(const TSubSMat &m);
00035
00036 // Accessor functions
00037
00038 inline Int Rows() const { return rows; };
00039 inline Int Cols() const { return cols; };
00040
00041 inline TMSubSVec operator [] (Int i) const;
00042
00043 // Assignment operators
00044
00045 TSubSMat &operator = (const TSubSMat &m);
00046 TSubSMat &operator = (const TSparseMat &m);
00047 TSubSMat &operator = (const TMat &m);
00048
00049 protected:
00050
00051 Int rows;
00052 Int cols;
00053 Int start;
00054 TMSparseVec *target;
00055 };
00056
00057 TMSubSVec col(const TSparseMat &m, Int i);
00058 TMSubSVec diag(const TSparseMat &m, Int diagNum);
00059 // -i = diag. starting on row i, +i = diag. starting on col i
00060 TSubSMat sub(const TSparseMat &m, Int top, Int left, Int nrows, Int ncols);
00061 TSubSMat sub(const TSparseMat &m, Int nrows, Int ncols);
00062
00063
00064 // --- SubSMat Inlines --------------------------------------------------------
00065
00066 #include "vl/SubSVec.h"
00067 #include "vl/SparseVec.h"
00068
00069 inline TMSubSVec TSubSMat::operator [] (Int i) const
00070 {
00071 Assert(i >= 0 && i < Rows(), "(SubSMat::[]) index out of range");
00072 return(sub(target[i], start, Cols()));
00073 }
00074
00075 #endif
00076