10 #ifndef EIGEN_SPARSE_MAP_H 11 #define EIGEN_SPARSE_MAP_H 17 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
19 :
public traits<SparseMatrix<MatScalar,MatOptions,MatIndex> >
24 Flags = TraitsBase::Flags & (~NestByRefBit)
28 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
30 :
public traits<SparseMatrix<MatScalar,MatOptions,MatIndex> >
35 Flags = TraitsBase::Flags & (~ (NestByRefBit |
LvalueBit))
41 template<
typename Derived,
49 template<
typename Derived>
55 typedef typename Base::Scalar Scalar;
56 typedef typename Base::StorageIndex StorageIndex;
57 enum { IsRowMajor = Base::IsRowMajor };
58 using Base::operator=;
66 StorageIndex *,
const StorageIndex *>::type IndexPointer;
71 IndexPointer m_outerIndex;
72 IndexPointer m_innerIndices;
73 ScalarPointer m_values;
74 IndexPointer m_innerNonZeros;
79 inline Index rows()
const {
return IsRowMajor ? m_outerSize : m_innerSize; }
81 inline Index cols()
const {
return IsRowMajor ? m_innerSize : m_outerSize; }
95 inline const Scalar*
valuePtr()
const {
return m_values; }
97 inline const StorageIndex*
innerIndexPtr()
const {
return m_innerIndices; }
99 inline const StorageIndex*
outerIndexPtr()
const {
return m_outerIndex; }
107 const Index outer = IsRowMajor ? row : col;
108 const Index inner = IsRowMajor ? col : row;
110 Index start = m_outerIndex[outer];
111 Index end = isCompressed() ? m_outerIndex[outer+1] : start + m_innerNonZeros[outer];
114 else if (end>0 && inner==m_innerIndices[end-1])
115 return m_values[end-1];
119 const StorageIndex* r = std::lower_bound(&m_innerIndices[start],&m_innerIndices[end-1],inner);
120 const Index id = r-&m_innerIndices[0];
121 return ((*r==inner) && (
id<end)) ? m_values[id] : Scalar(0);
125 ScalarPointer valuePtr, IndexPointer innerNonZerosPtr = 0)
126 : m_outerSize(IsRowMajor?rows:cols), m_innerSize(IsRowMajor?cols:rows), m_zero_nnz(0,internal::convert_index<StorageIndex>(nnz)), m_outerIndex(outerIndexPtr),
127 m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(innerNonZerosPtr)
132 : m_outerSize(1), m_innerSize(size), m_zero_nnz(0,internal::convert_index<StorageIndex>(nnz)), m_outerIndex(m_zero_nnz.
data()),
133 m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(0)
147 template<
typename Derived>
155 typedef typename Base::Scalar Scalar;
156 typedef typename Base::StorageIndex StorageIndex;
157 enum { IsRowMajor = Base::IsRowMajor };
159 using Base::operator=;
165 using Base::valuePtr;
166 using Base::innerIndexPtr;
167 using Base::outerIndexPtr;
168 using Base::innerNonZeroPtr;
170 inline Scalar*
valuePtr() {
return Base::m_values; }
182 const Index outer = IsRowMajor ? row : col;
183 const Index inner = IsRowMajor ? col : row;
185 Index start = Base::m_outerIndex[outer];
186 Index end = Base::isCompressed() ? Base::m_outerIndex[outer+1] : start + Base::m_innerNonZeros[outer];
187 eigen_assert(end>=start &&
"you probably called coeffRef on a non finalized matrix");
188 eigen_assert(end>start &&
"coeffRef cannot be called on a zero coefficient");
189 StorageIndex* r = std::lower_bound(&Base::m_innerIndices[start],&Base::m_innerIndices[end],inner);
190 const Index id = r - &Base::m_innerIndices[0];
191 eigen_assert((*r==inner) && (
id<end) &&
"coeffRef cannot be called on a zero coefficient");
192 return const_cast<Scalar*
>(Base::m_values)[
id];
196 Scalar* valuePtr, StorageIndex* innerNonZerosPtr = 0)
197 : Base(rows, cols, nnz, outerIndexPtr, innerIndexPtr, valuePtr, innerNonZerosPtr)
202 : Base(size, nnz, innerIndexPtr, valuePtr)
220 #ifndef EIGEN_PARSED_BY_DOXYGEN 221 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
223 :
public SparseMapBase<Map<SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> >
225 template<typename SparseMatrixType>
226 class
Map<SparseMatrixType>
232 EIGEN_SPARSE_PUBLIC_INTERFACE(
Map)
233 enum { IsRowMajor = Base::IsRowMajor };
246 StorageIndex* innerIndexPtr, Scalar* valuePtr, StorageIndex* innerNonZerosPtr = 0)
247 : Base(rows, cols, nnz, outerIndexPtr, innerIndexPtr, valuePtr, innerNonZerosPtr)
249 #ifndef EIGEN_PARSED_BY_DOXYGEN 254 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
256 :
public SparseMapBase<Map<const SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> >
260 EIGEN_SPARSE_PUBLIC_INTERFACE(
Map)
261 enum { IsRowMajor = Base::IsRowMajor };
271 const StorageIndex* innerIndexPtr,
const Scalar* valuePtr,
const StorageIndex* innerNonZerosPtr = 0)
272 : Base(rows, cols, nnz, outerIndexPtr, innerIndexPtr, valuePtr, innerNonZerosPtr)
281 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
283 :
evaluator<SparseCompressedBase<Map<SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> > >
288 explicit evaluator(
const XprType &mat) : Base(mat) {}
291 template<
typename MatScalar,
int MatOptions,
typename MatIndex,
int Options,
typename Str
ideType>
293 :
evaluator<SparseCompressedBase<Map<const SparseMatrix<MatScalar,MatOptions,MatIndex>, Options, StrideType> > >
298 explicit evaluator(
const XprType &mat) : Base(mat) {}
305 #endif // EIGEN_SPARSE_MAP_H Index innerSize() const
Definition: SparseMap.h:83
const StorageIndex * innerNonZeroPtr() const
Definition: SparseMap.h:101
const StorageIndex * innerIndexPtr() const
Definition: SparseMap.h:97
Map(Index rows, Index cols, Index nnz, StorageIndex *outerIndexPtr, StorageIndex *innerIndexPtr, Scalar *valuePtr, StorageIndex *innerNonZerosPtr=0)
Constructs a read-write Map to a sparse matrix of size rows x cols, containing nnz non-zero coefficie...
Definition: SparseMap.h:245
Read/write access via member functions.
Definition: Constants.h:368
Scalar & coeffRef(Index row, Index col)
Definition: SparseMap.h:180
Specialization of class Map for SparseMatrix-like storage.
Definition: SparseMap.h:222
A versatible sparse matrix representation.
Definition: SparseMatrix.h:92
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar * data() const
Definition: PlainObjectBase.h:249
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:88
class SparseMapBase
Definition: SparseMap.h:50
const StorageIndex * outerIndexPtr() const
Definition: SparseMap.h:99
~SparseMapBase()
Empty destructor.
Definition: SparseMap.h:137
bool isCompressed() const
Definition: SparseMap.h:90
const unsigned int LvalueBit
Means the expression has a coeffRef() method, i.e.
Definition: Constants.h:139
Definition: CoreEvaluators.h:90
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:85
Scalar coeff(Index row, Index col) const
Definition: SparseMap.h:105
~Map()
Empty destructor.
Definition: SparseMap.h:276
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:37
Index nonZeros() const
Definition: SparseMap.h:87
StorageIndex * innerIndexPtr()
Definition: SparseMap.h:172
StorageIndex * outerIndexPtr()
Definition: SparseMap.h:174
Read-only access via a member function.
Definition: Constants.h:366
StorageIndex * innerNonZeroPtr()
Definition: SparseMap.h:176
Base class of any sparse matrices or sparse expressions.
Definition: ForwardDeclarations.h:281
Base class for dense Map and Block expression with direct access.
Definition: MapBase.h:37
Definition: SparseMap.h:255
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
Index rows() const
Definition: SparseMap.h:79
~Map()
Empty destructor.
Definition: SparseMap.h:251
Definition: BandTriangularSolver.h:13
Definition: ForwardDeclarations.h:30
Scalar * valuePtr()
Definition: SparseMap.h:170
Index outerSize() const
Definition: SparseMap.h:85
~SparseMapBase()
Empty destructor.
Definition: SparseMap.h:206
Map(Index rows, Index cols, Index nnz, const StorageIndex *outerIndexPtr, const StorageIndex *innerIndexPtr, const Scalar *valuePtr, const StorageIndex *innerNonZerosPtr=0)
This is the const version of the above constructor.
Definition: SparseMap.h:270
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition: CwiseUnaryOp.h:55
Definition: SparseMap.h:43
Common base class for sparse [compressed]-{row|column}-storage format.
Definition: SparseCompressedBase.h:15
Definition: ForwardDeclarations.h:17
Definition: XprHelper.h:630
const Scalar * valuePtr() const
Definition: SparseMap.h:95
Index cols() const
Definition: SparseMap.h:81