10 #ifndef EIGEN_MAPPED_SPARSEMATRIX_H 11 #define EIGEN_MAPPED_SPARSEMATRIX_H 25 template<
typename _Scalar,
int _Flags,
typename _Index>
30 template<
typename _Scalar,
int _Flags,
typename _Index>
36 enum { IsRowMajor = Base::IsRowMajor };
44 Index* m_innerIndices;
49 inline Index rows()
const {
return IsRowMajor ? m_outerSize : m_innerSize; }
50 inline Index cols()
const {
return IsRowMajor ? m_innerSize : m_outerSize; }
51 inline Index innerSize()
const {
return m_innerSize; }
52 inline Index outerSize()
const {
return m_outerSize; }
54 bool isCompressed()
const {
return true; }
58 inline const Scalar* valuePtr()
const {
return m_values; }
59 inline Scalar* valuePtr() {
return m_values; }
61 inline const Index* innerIndexPtr()
const {
return m_innerIndices; }
62 inline Index* innerIndexPtr() {
return m_innerIndices; }
64 inline const Index* outerIndexPtr()
const {
return m_outerIndex; }
65 inline Index* outerIndexPtr() {
return m_outerIndex; }
68 inline Scalar coeff(Index row, Index col)
const 70 const Index outer = IsRowMajor ? row : col;
71 const Index inner = IsRowMajor ? col : row;
73 Index start = m_outerIndex[outer];
74 Index end = m_outerIndex[outer+1];
77 else if (end>0 && inner==m_innerIndices[end-1])
78 return m_values[end-1];
82 const Index* r = std::lower_bound(&m_innerIndices[start],&m_innerIndices[end-1],inner);
83 const Index
id = r-&m_innerIndices[0];
84 return ((*r==inner) && (
id<end)) ? m_values[id] :
Scalar(0);
87 inline Scalar& coeffRef(Index row, Index col)
89 const Index outer = IsRowMajor ? row : col;
90 const Index inner = IsRowMajor ? col : row;
92 Index start = m_outerIndex[outer];
93 Index end = m_outerIndex[outer+1];
94 eigen_assert(end>=start &&
"you probably called coeffRef on a non finalized matrix");
95 eigen_assert(end>start &&
"coeffRef cannot be called on a zero coefficient");
96 Index* r = std::lower_bound(&m_innerIndices[start],&m_innerIndices[end],inner);
97 const Index
id = r-&m_innerIndices[0];
98 eigen_assert((*r==inner) && (
id<end) &&
"coeffRef cannot be called on a zero coefficient");
108 inline MappedSparseMatrix(Index rows, Index cols, Index nnz, Index* outerIndexPtr, Index* innerIndexPtr, Scalar* valuePtr)
109 : m_outerSize(IsRowMajor?rows:cols), m_innerSize(IsRowMajor?cols:rows), m_nnz(nnz), m_outerIndex(outerIndexPtr),
110 m_innerIndices(innerIndexPtr), m_values(valuePtr)
117 template<
typename Scalar,
int _Flags,
typename _Index>
124 m_id(mat.outerIndexPtr()[outer]),
126 m_end(mat.outerIndexPtr()[outer+1])
131 inline Scalar value()
const {
return m_matrix.valuePtr()[m_id]; }
132 inline Scalar& valueRef() {
return const_cast<Scalar&
>(m_matrix.valuePtr()[m_id]); }
134 inline Index index()
const {
return m_matrix.innerIndexPtr()[m_id]; }
135 inline Index row()
const {
return IsRowMajor ? m_outer : index(); }
136 inline Index col()
const {
return IsRowMajor ? index() : m_outer; }
138 inline operator bool()
const {
return (m_id < m_end) && (m_id>=m_start); }
148 template<
typename Scalar,
int _Flags,
typename _Index>
155 m_id(mat.outerIndexPtr()[outer+1]),
156 m_start(mat.outerIndexPtr()[outer]),
162 inline Scalar value()
const {
return m_matrix.valuePtr()[m_id-1]; }
163 inline Scalar& valueRef() {
return const_cast<Scalar&
>(m_matrix.valuePtr()[m_id-1]); }
165 inline Index index()
const {
return m_matrix.innerIndexPtr()[m_id-1]; }
166 inline Index row()
const {
return IsRowMajor ? m_outer : index(); }
167 inline Index col()
const {
return IsRowMajor ? index() : m_outer; }
169 inline operator bool()
const {
return (m_id <= m_end) && (m_id>m_start); }
181 #endif // EIGEN_MAPPED_SPARSEMATRIX_H Definition: MappedSparseMatrix.h:149
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: TestIMU_Common.h:87
~MappedSparseMatrix()
Empty destructor.
Definition: MappedSparseMatrix.h:114
Base class of any sparse matrices or sparse expressions.
Definition: ForwardDeclarations.h:239
Definition: BandTriangularSolver.h:13
Definition: MappedSparseMatrix.h:118
Index nonZeros() const
Definition: MappedSparseMatrix.h:106
Sparse matrix.
Definition: MappedSparseMatrix.h:31
Definition: ForwardDeclarations.h:17
double Scalar
Common scalar type.
Definition: FlexibleKalmanBase.h:48