36 SizeAtCompileTime = Base::SizeAtCompileTime
41 typedef typename internal::packet_traits<Scalar>::type PacketScalar;
42 typedef typename NumTraits<Scalar>::Real
RealScalar;
53 using Base::MaxRowsAtCompileTime;
54 using Base::MaxColsAtCompileTime;
55 using Base::MaxSizeAtCompileTime;
56 using Base::IsVectorAtCompileTime;
58 using Base::IsRowMajor;
65 using Base::lazyAssign;
68 using Base::innerStride;
69 using Base::outerStride;
70 using Base::rowStride;
71 using Base::colStride;
74 using Base::operator=;
76 typedef typename Base::CoeffReturnType CoeffReturnType;
90 inline const Scalar& coeff(Index
rowId, Index
colId)
const
92 return m_data[
colId * colStride() +
rowId * rowStride()];
96 inline const Scalar& coeff(Index index)
const
98 EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived)
99 return m_data[index * innerStride()];
103 inline const Scalar& coeffRef(Index rowId, Index colId)
const
105 return this->m_data[colId * colStride() + rowId * rowStride()];
109 inline const Scalar& coeffRef(Index index)
const
111 EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived)
112 return this->m_data[index * innerStride()];
115 template<
int LoadMode>
116 inline PacketScalar packet(Index rowId, Index colId)
const
118 return internal::ploadt<PacketScalar, LoadMode>
119 (m_data + (colId * colStride() + rowId * rowStride()));
122 template<
int LoadMode>
123 inline PacketScalar packet(Index index)
const
125 EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived)
126 return internal::ploadt<PacketScalar, LoadMode>(m_data + index * innerStride());
130 explicit inline MapBase(PointerType dataPtr) : m_data(dataPtr), m_rows(RowsAtCompileTime), m_cols(ColsAtCompileTime)
132 EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
137 inline MapBase(PointerType dataPtr, Index vecSize)
139 m_rows(RowsAtCompileTime == Dynamic ? vecSize : Index(RowsAtCompileTime)),
140 m_cols(ColsAtCompileTime == Dynamic ? vecSize : Index(ColsAtCompileTime))
142 EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
143 eigen_assert(vecSize >= 0);
144 eigen_assert(dataPtr == 0 || SizeAtCompileTime == Dynamic || SizeAtCompileTime == vecSize);
149 inline MapBase(PointerType dataPtr, Index rows, Index cols)
150 : m_data(dataPtr), m_rows(rows), m_cols(cols)
152 eigen_assert( (dataPtr == 0)
153 || ( rows >= 0 && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == rows)
154 && cols >= 0 && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == cols)));
158 #ifdef EIGEN_MAPBASE_PLUGIN
159 #include EIGEN_MAPBASE_PLUGIN
165 void checkSanity()
const
167#if EIGEN_MAX_ALIGN_BYTES>0
168 eigen_assert(((
size_t(m_data) % EIGEN_PLAIN_ENUM_MAX(1,internal::traits<Derived>::Alignment)) == 0) &&
"data is not aligned");
173 const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows;
174 const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols;
178 :
public MapBase<Derived, ReadOnlyAccessors>
185 typedef typename Base::Scalar Scalar;
186 typedef typename Base::PacketScalar PacketScalar;
187 typedef typename Base::StorageIndex StorageIndex;
195 using Base::coeffRef;
197 using Base::innerStride;
198 using Base::outerStride;
199 using Base::rowStride;
200 using Base::colStride;
209 inline const Scalar* data()
const {
return this->m_data; }
216 return this->m_data[col * colStride() + row * rowStride()];
222 EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived)
223 return this->m_data[index * innerStride()];
226 template<
int StoreMode>
227 inline void writePacket(Index row, Index col,
const PacketScalar& val)
229 internal::pstoret<Scalar, PacketScalar, StoreMode>
230 (this->m_data + (col * colStride() + row * rowStride()), val);
233 template<
int StoreMode>
234 inline void writePacket(Index index,
const PacketScalar& val)
236 EIGEN_STATIC_ASSERT_INDEX_BASED_ACCESS(Derived)
237 internal::pstoret<Scalar, PacketScalar, StoreMode>
238 (this->m_data + index * innerStride(), val);
246 Derived& operator=(
const MapBase& other)
248 ReadOnlyMapBase::Base::operator=(other);
254 using ReadOnlyMapBase::Base::operator=;