51 typedef typename Base::Scalar Scalar;
52 typedef typename Base::StorageIndex StorageIndex;
53 enum { IsRowMajor = Base::IsRowMajor };
54 using Base::operator=;
62 StorageIndex *,
const StorageIndex *>::type
IndexPointer;
74 inline Index rows()
const {
return IsRowMajor ? m_outerSize : m_innerSize; }
75 inline Index cols()
const {
return IsRowMajor ? m_innerSize : m_outerSize; }
76 inline Index innerSize()
const {
return m_innerSize; }
77 inline Index outerSize()
const {
return m_outerSize; }
78 inline Index nonZeros()
const {
return m_zero_nnz[1]; }
80 bool isCompressed()
const {
return m_innerNonZeros==0; }
84 inline const Scalar* valuePtr()
const {
return m_values; }
85 inline const StorageIndex* innerIndexPtr()
const {
return m_innerIndices; }
86 inline const StorageIndex* outerIndexPtr()
const {
return m_outerIndex; }
87 inline const StorageIndex* innerNonZeroPtr()
const {
return m_innerNonZeros; }
90 inline Scalar coeff(Index row, Index col)
const
92 const Index outer = IsRowMajor ? row : col;
93 const Index inner = IsRowMajor ? col : row;
95 Index start = m_outerIndex[outer];
96 Index end = isCompressed() ? m_outerIndex[outer+1] : start + m_innerNonZeros[outer];
99 else if (end>0 && inner==m_innerIndices[end-1])
100 return m_values[end-1];
104 const StorageIndex* r = std::lower_bound(&m_innerIndices[start],&m_innerIndices[end-1],inner);
105 const Index
id = r-&m_innerIndices[0];
106 return ((*r==inner) && (
id<end)) ? m_values[id] : Scalar(0);
111 : m_outerSize(IsRowMajor?rows:cols), m_innerSize(IsRowMajor?cols:rows), m_zero_nnz(0,internal::convert_index<StorageIndex>(nnz)), m_outerIndex(outerIndexPtr),
112 m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(
innerNonZerosPtr)
117 : m_outerSize(1), m_innerSize(size), m_zero_nnz(0,internal::convert_index<StorageIndex>(nnz)), m_outerIndex(m_zero_nnz.data()),
118 m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(0)
136 typedef typename Base::Scalar Scalar;
137 typedef typename Base::StorageIndex StorageIndex;
138 enum { IsRowMajor = Base::IsRowMajor };
140 using Base::operator=;
146 using Base::valuePtr;
147 using Base::innerIndexPtr;
148 using Base::outerIndexPtr;
149 using Base::innerNonZeroPtr;
150 inline Scalar* valuePtr() {
return Base::m_values; }
151 inline StorageIndex* innerIndexPtr() {
return Base::m_innerIndices; }
152 inline StorageIndex* outerIndexPtr() {
return Base::m_outerIndex; }
153 inline StorageIndex* innerNonZeroPtr() {
return Base::m_innerNonZeros; }
156 inline Scalar& coeffRef(Index row, Index col)
158 const Index outer = IsRowMajor ? row : col;
159 const Index inner = IsRowMajor ? col : row;
161 Index start = Base::m_outerIndex[outer];
162 Index end = Base::isCompressed() ? Base::m_outerIndex[outer+1] : start + Base::m_innerNonZeros[outer];
163 eigen_assert(end>=start &&
"you probably called coeffRef on a non finalized matrix");
164 eigen_assert(end>start &&
"coeffRef cannot be called on a zero coefficient");
165 Index* r = std::lower_bound(&Base::m_innerIndices[start],&Base::m_innerIndices[end],inner);
166 const Index
id = r - &Base::m_innerIndices[0];
167 eigen_assert((*r==inner) && (
id<end) &&
"coeffRef cannot be called on a zero coefficient");
168 return const_cast<Scalar*
>(Base::m_values)[
id];
171 inline SparseMapBase(Index rows, Index cols, Index nnz, StorageIndex* outerIndexPtr, StorageIndex* innerIndexPtr,
177 inline SparseMapBase(Index size, Index nnz, StorageIndex* innerIndexPtr, Scalar* valuePtr)
178 :
Base(size, nnz, innerIndexPtr, valuePtr)
190 :
public SparseMapBase<Map<SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> >
194 EIGEN_SPARSE_PUBLIC_INTERFACE(
Map)
195 enum { IsRowMajor = Base::IsRowMajor };
199 inline Map(Index rows, Index cols, Index nnz, StorageIndex* outerIndexPtr,
200 StorageIndex* innerIndexPtr, Scalar* valuePtr, StorageIndex*
innerNonZerosPtr = 0)
210 :
public SparseMapBase<Map<const SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> >
214 EIGEN_SPARSE_PUBLIC_INTERFACE(
Map)
215 enum { IsRowMajor = Base::IsRowMajor };
219 inline Map(Index rows, Index cols, Index nnz,
const StorageIndex* outerIndexPtr,
220 const StorageIndex* innerIndexPtr,
const Scalar* valuePtr,
const StorageIndex*
innerNonZerosPtr = 0)
const unsigned int LvalueBit
Means the expression has a coeffRef() method, i.e.
Definition Constants.h:138