/*
*
* Template Numerical Toolkit (TNT)
*
* Mathematical and Computational Sciences Division
* National Institute of Technology,
* Gaithersburg, MD USA
*
*
* This software was developed at the National Institute of Standards and
* Technology (NIST) by employees of the Federal Government in the course
* of their official duties. Pursuant to title 17 Section 105 of the
* United States Code, this software is not subject to copyright protection
* and is in the public domain. NIST assumes no responsibility whatsoever for
* its use by other parties, and makes no guarantees, expressed or implied,
* about its quality, reliability, or any other characteristic.
*
*/
#ifndef IMPALGEBRA_TNT_SPARSE_MATRIX_CSR_H
#define IMPALGEBRA_TNT_SPARSE_MATRIX_CSR_H
#include "../algebra_config.h"
#include "tnt_array1d.h"
IMPALGEBRA_BEGIN_INTERNAL_NAMESPACE
namespace TNT
{
using namespace std;
/**
Read-only view of a sparse matrix in compressed-row storage
format. Neither array elements (nonzeros) nor sparsity
structure can be modified. If modifications are required,
create a new view.
Index values begin at 0.
Storage requirements: An (m x n) matrix with
nz nonzeros requires no more than ((T+I)*nz + M*I)
bytes, where T is the size of data elements and
I is the size of integers.
*/
template
class Sparse_Matrix_CompRow {
private:
Array1D val_; // data values (nz_ elements)
Array1D rowptr_; // row_ptr (dim_[0]+1 elements)
Array1D colind_; // col_ind (nz_ elements)
int dim1_; // number of rows
int dim2_; // number of cols
public:
Sparse_Matrix_CompRow(const Sparse_Matrix_CompRow &S);
Sparse_Matrix_CompRow(int M, int N, int nz, const T *val,
const int *r, const int *c);
inline const T& val(int i) const { return val_[i]; }
inline const int& row_ptr(int i) const { return rowptr_[i]; }
inline const int& col_ind(int i) const { return colind_[i];}
inline int dim1() const {return dim1_;}
inline int dim2() const {return dim2_;}
int NumNonzeros() const {return val_.dim1();}
Sparse_Matrix_CompRow& operator=(
const Sparse_Matrix_CompRow &R);
};
/**
Construct a read-only view of existing sparse matrix in
compressed-row storage format.
@param M the number of rows of sparse matrix
@param N the number of columns of sparse matrix
@param nz the number of nonzeros
@param val a contiguous list of nonzero values
@param r row-pointers: r[i] denotes the begining position of row i
(i.e. the ith row begins at val[row[i]]).
@param c column-indices: c[i] denotes the column location of val[i]
*/
template
Sparse_Matrix_CompRow::Sparse_Matrix_CompRow(int M, int N, int nz,
const T *val, const int *r, const int *c) : val_(nz,val),
rowptr_(M, r), colind_(nz, c), dim1_(M), dim2_(N) {}
}
// namespace TNT
IMPALGEBRA_END_INTERNAL_NAMESPACE
#endif /* IMPALGEBRA_TNT_SPARSE_MATRIX_CSR_H */