10 #ifndef EIGEN_ARRAYWRAPPER_H 11 #define EIGEN_ARRAYWRAPPER_H 27 template<
typename ExpressionType>
28 struct traits<ArrayWrapper<ExpressionType> >
29 :
public traits<typename remove_all<typename ExpressionType::Nested>::type >
31 typedef ArrayXpr XprKind;
35 template<
typename ExpressionType>
43 typedef typename internal::conditional<
44 internal::is_lvalue<ExpressionType>::value,
47 >::type ScalarWithConstIfNotLvalue;
49 typedef typename internal::nested<ExpressionType>::type NestedExpressionType;
53 inline Index rows()
const {
return m_expression.rows(); }
54 inline Index cols()
const {
return m_expression.cols(); }
55 inline Index outerStride()
const {
return m_expression.outerStride(); }
56 inline Index innerStride()
const {
return m_expression.innerStride(); }
58 inline ScalarWithConstIfNotLvalue* data() {
return m_expression.data(); }
59 inline const Scalar* data()
const {
return m_expression.data(); }
63 return m_expression.coeff(
row,
col);
68 return m_expression.const_cast_derived().coeffRef(
row,
col);
73 return m_expression.const_cast_derived().coeffRef(
row,
col);
76 inline CoeffReturnType coeff(
Index index)
const 78 return m_expression.coeff(index);
81 inline Scalar& coeffRef(
Index index)
83 return m_expression.const_cast_derived().coeffRef(index);
86 inline const Scalar& coeffRef(
Index index)
const 88 return m_expression.const_cast_derived().coeffRef(index);
91 template<
int LoadMode>
94 return m_expression.template packet<LoadMode>(
row,
col);
97 template<
int LoadMode>
100 m_expression.const_cast_derived().template writePacket<LoadMode>(
row,
col, x);
103 template<
int LoadMode>
104 inline const PacketScalar packet(
Index index)
const 106 return m_expression.template packet<LoadMode>(index);
109 template<
int LoadMode>
110 inline void writePacket(
Index index,
const PacketScalar& x)
112 m_expression.const_cast_derived().template writePacket<LoadMode>(index, x);
115 template<
typename Dest>
116 inline void evalTo(Dest& dst)
const { dst = m_expression; }
118 const typename internal::remove_all<NestedExpressionType>::type&
119 nestedExpression()
const 126 void resize(
Index newSize) { m_expression.const_cast_derived().resize(newSize); }
129 void resize(
Index nbRows,
Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); }
132 NestedExpressionType m_expression;
147 template<
typename ExpressionType>
148 struct traits<MatrixWrapper<ExpressionType> >
149 :
public traits<typename remove_all<typename ExpressionType::Nested>::type >
151 typedef MatrixXpr XprKind;
155 template<
typename ExpressionType>
156 class MatrixWrapper :
public MatrixBase<MatrixWrapper<ExpressionType> >
159 typedef MatrixBase<MatrixWrapper<ExpressionType> > Base;
160 EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper)
161 EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper)
163 typedef typename internal::conditional<
164 internal::is_lvalue<ExpressionType>::value,
167 >::type ScalarWithConstIfNotLvalue;
169 typedef typename internal::nested<ExpressionType>::type NestedExpressionType;
171 inline MatrixWrapper(ExpressionType& matrix) : m_expression(matrix) {}
173 inline Index rows()
const {
return m_expression.rows(); }
174 inline Index cols()
const {
return m_expression.cols(); }
175 inline Index outerStride()
const {
return m_expression.outerStride(); }
176 inline Index innerStride()
const {
return m_expression.innerStride(); }
178 inline ScalarWithConstIfNotLvalue* data() {
return m_expression.data(); }
179 inline const Scalar* data()
const {
return m_expression.data(); }
183 return m_expression.coeff(
row,
col);
188 return m_expression.const_cast_derived().coeffRef(
row,
col);
193 return m_expression.derived().coeffRef(
row,
col);
196 inline CoeffReturnType coeff(
Index index)
const 198 return m_expression.coeff(index);
201 inline Scalar& coeffRef(
Index index)
203 return m_expression.const_cast_derived().coeffRef(index);
206 inline const Scalar& coeffRef(
Index index)
const 208 return m_expression.const_cast_derived().coeffRef(index);
211 template<
int LoadMode>
214 return m_expression.template packet<LoadMode>(
row,
col);
217 template<
int LoadMode>
220 m_expression.const_cast_derived().template writePacket<LoadMode>(
row,
col, x);
223 template<
int LoadMode>
224 inline const PacketScalar packet(
Index index)
const 226 return m_expression.template packet<LoadMode>(index);
229 template<
int LoadMode>
230 inline void writePacket(
Index index,
const PacketScalar& x)
232 m_expression.const_cast_derived().template writePacket<LoadMode>(index, x);
235 const typename internal::remove_all<NestedExpressionType>::type&
236 nestedExpression()
const 243 void resize(
Index newSize) { m_expression.const_cast_derived().resize(newSize); }
246 void resize(
Index nbRows,
Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); }
249 NestedExpressionType m_expression;
254 #endif // EIGEN_ARRAYWRAPPER_H RowXpr row(Index i)
Definition: DenseBase.h:570
Expression of a mathematical vector or matrix as an array object.
Definition: ArrayWrapper.h:36
void resize(Index newSize)
Definition: ArrayWrapper.h:126
ColXpr col(Index i)
Definition: DenseBase.h:553
void resize(Index nbRows, Index nbCols)
Definition: ArrayWrapper.h:246
Base class for all 1D and 2D array, and related expressions.
Definition: ArrayBase.h:39
void resize(Index newSize)
Definition: ArrayWrapper.h:243
internal::traits< Derived >::Index Index
The type of indices.
Definition: DenseBase.h:51
void resize(Index nbRows, Index nbCols)
Definition: ArrayWrapper.h:129
MatrixWrapper< ArrayWrapper< ExpressionType > > matrix()
Definition: ArrayBase.h:148