00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef TNT_SPARSE_MATRIX_CSR_H
00022 #define TNT_SPARSE_MATRIX_CSR_H
00023
00024 #include "tnt_array1d.h"
00025
00026 namespace TNT
00027 {
00028
00029
00047 template <class T>
00048 class Sparse_Matrix_CompRow {
00049
00050 private:
00051 Array1D<T> val_;
00052 Array1D<int> rowptr_;
00053 Array1D<int> colind_;
00054
00055 int dim1_;
00056 int dim2_;
00057
00058 public:
00059
00060 Sparse_Matrix_CompRow(const Sparse_Matrix_CompRow &S);
00061 Sparse_Matrix_CompRow(int M, int N, int nz, const T *val,
00062 const int *r, const int *c);
00063
00064
00065
00066 inline const T& val(int i) const { return val_[i]; }
00067 inline const int& row_ptr(int i) const { return rowptr_[i]; }
00068 inline const int& col_ind(int i) const { return colind_[i];}
00069
00070 inline int dim1() const {return dim1_;}
00071 inline int dim2() const {return dim2_;}
00072 int NumNonzeros() const {return val_.dim1();}
00073
00074
00075 Sparse_Matrix_CompRow& operator=(
00076 const Sparse_Matrix_CompRow &R);
00077
00078
00079
00080 };
00081
00094 template <class T>
00095 Sparse_Matrix_CompRow<T>::Sparse_Matrix_CompRow(int M, int N, int nz,
00096 const T *val, const int *r, const int *c) : val_(nz,val),
00097 rowptr_(M, r), colind_(nz, c), dim1_(M), dim2_(N) {}
00098
00099
00100 }
00101
00102
00103 #endif