11 #ifndef EIGEN_MATRIX_H
12 #define EIGEN_MATRIX_H
17 template<
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
18 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
21 enum { size = internal::size_at_compile_time<_Rows,_Cols>::ret };
22 typedef typename find_best_packet<_Scalar,size>::type PacketScalar;
26 max_size = is_dynamic_size_storage ?
Dynamic : _MaxRows*_MaxCols,
27 default_alignment = compute_default_alignment<_Scalar,max_size>::value,
28 actual_alignment = ((_Options&
DontAlign)==0) ? default_alignment : 0,
29 required_alignment = unpacket_traits<PacketScalar>::alignment,
30 packet_access_bit = (packet_traits<_Scalar>::Vectorizable && (EIGEN_UNALIGNED_VECTORIZE || (actual_alignment>=required_alignment))) ?
PacketAccessBit : 0
34 typedef _Scalar Scalar;
35 typedef Dense StorageKind;
37 typedef MatrixXpr XprKind;
39 RowsAtCompileTime = _Rows,
40 ColsAtCompileTime = _Cols,
41 MaxRowsAtCompileTime = _MaxRows,
42 MaxColsAtCompileTime = _MaxCols,
43 Flags = compute_matrix_flags<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::ret,
45 InnerStrideAtCompileTime = 1,
46 OuterStrideAtCompileTime = (Options&
RowMajor) ? ColsAtCompileTime : RowsAtCompileTime,
50 Alignment = actual_alignment
177 template<
typename _Scalar,
int _Rows,
int _Cols,
int _Options,
int _MaxRows,
int _MaxCols>
179 :
public PlainObjectBase<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
188 enum { Options = _Options };
190 EIGEN_DENSE_PUBLIC_INTERFACE(
Matrix)
192 typedef typename Base::PlainObject PlainObject;
221 template<
typename OtherDerived>
234 template<
typename OtherDerived>
241 template<
typename OtherDerived>
243 EIGEN_STRONG_INLINE
Matrix&
operator=(
const ReturnByValue<OtherDerived>& func)
261 Base::_check_template_params();
262 EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
267 explicit Matrix(internal::constructor_without_unaligned_array_assert)
268 :
Base(internal::constructor_without_unaligned_array_assert())
269 { Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
271 #if EIGEN_HAS_RVALUE_REFERENCES
273 Matrix(
Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
274 :
Base(std::move(other))
276 Base::_check_template_params();
288 #ifndef EIGEN_PARSED_BY_DOXYGEN
293 EIGEN_STRONG_INLINE
explicit Matrix(
const T& x)
295 Base::_check_template_params();
296 Base::template _init1<T>(x);
299 template<
typename T0,
typename T1>
301 EIGEN_STRONG_INLINE
Matrix(
const T0& x,
const T1& y)
303 Base::_check_template_params();
304 Base::template _init2<T0,T1>(x, y);
342 Matrix(
const Scalar& x,
const Scalar& y);
347 EIGEN_STRONG_INLINE
Matrix(
const Scalar& x,
const Scalar& y,
const Scalar& z)
349 Base::_check_template_params();
350 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(
Matrix, 3)
351 m_storage.data()[0] = x;
352 m_storage.data()[1] = y;
353 m_storage.data()[2] = z;
357 EIGEN_STRONG_INLINE
Matrix(
const Scalar& x,
const Scalar& y,
const Scalar& z,
const Scalar& w)
359 Base::_check_template_params();
360 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(
Matrix, 4)
361 m_storage.data()[0] = x;
362 m_storage.data()[1] = y;
363 m_storage.data()[2] = z;
364 m_storage.data()[3] = w;
376 template<
typename OtherDerived>
379 :
Base(other.derived())
382 EIGEN_DEVICE_FUNC
inline Index innerStride()
const {
return 1; }
383 EIGEN_DEVICE_FUNC
inline Index outerStride()
const {
return this->
innerSize(); }
387 template<
typename OtherDerived>
389 explicit Matrix(
const RotationBase<OtherDerived,ColsAtCompileTime>& r);
390 template<
typename OtherDerived>
392 Matrix&
operator=(
const RotationBase<OtherDerived,ColsAtCompileTime>& r);
395 #ifdef EIGEN_MATRIX_PLUGIN
396 #include EIGEN_MATRIX_PLUGIN
400 template <
typename Derived,
typename OtherDerived,
bool IsVector>
401 friend struct internal::conservative_resize_like_impl;
403 using Base::m_storage;
426 #define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
428 typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix; \
430 typedef Matrix<Type, Size, 1> Vector##SizeSuffix##TypeSuffix; \
432 typedef Matrix<Type, 1, Size> RowVector##SizeSuffix##TypeSuffix;
434 #define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
436 typedef Matrix<Type, Size, Dynamic> Matrix##Size##X##TypeSuffix; \
438 typedef Matrix<Type, Dynamic, Size> Matrix##X##Size##TypeSuffix;
440 #define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
441 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
442 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
443 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
444 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
445 EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
446 EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
447 EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
449 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(
int, i)
450 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(
float, f)
451 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(
double, d)
452 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
453 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
455 #undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES
456 #undef EIGEN_MAKE_TYPEDEFS
457 #undef EIGEN_MAKE_FIXED_TYPEDEFS
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:47
@ ColsAtCompileTime
Definition: DenseBase.h:106
@ RowsAtCompileTime
Definition: DenseBase.h:100
Index innerSize() const
Definition: DenseBase.h:230
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:180
Matrix & operator=(const Matrix &other)
Assigns matrices to each other.
Definition: Matrix.h:206
Matrix(const Scalar &x, const Scalar &y, const Scalar &z, const Scalar &w)
Constructs an initialized 4D vector with given coefficients.
Definition: Matrix.h:357
Matrix(Index dim)
Constructs a vector or row-vector with given dimension. This is only for vectors (either row-vectors ...
Matrix & operator=(const EigenBase< OtherDerived > &other)
Copies the generic expression other into *this.
Definition: Matrix.h:236
Matrix(const Scalar &x, const Scalar &y)
Constructs an initialized 2D vector with given coefficients.
Matrix(const Scalar &x, const Scalar &y, const Scalar &z)
Constructs an initialized 3D vector with given coefficients.
Definition: Matrix.h:347
Matrix(const Matrix &other)
Copy constructor.
Definition: Matrix.h:370
Matrix()
Default constructor.
Definition: Matrix.h:259
Matrix(const Scalar &x)
Constructs an initialized 1x1 matrix with the given coefficient.
PlainObjectBase< Matrix > Base
Base class typedef.
Definition: Matrix.h:186
Matrix(const EigenBase< OtherDerived > &other)
Copy constructor for generic expressions.
Definition: Matrix.h:378
Matrix(const Scalar *data)
Constructs a fixed-sized matrix initialized with coefficients starting at data.
Matrix(Index rows, Index cols)
Constructs an uninitialized matrix with rows rows and cols columns.
Dense storage base class for matrices and arrays.
Definition: PlainObjectBase.h:94
Derived & _set(const DenseBase< OtherDerived > &other)
Copies the value of the expression other into *this with automatic resizing.
Definition: PlainObjectBase.h:701
Scalar & coeffRef(Index rowId, Index colId)
Definition: PlainObjectBase.h:177
const Scalar * data() const
Definition: PlainObjectBase.h:249
Derived & _set_noalias(const DenseBase< OtherDerived > &other)
Definition: PlainObjectBase.h:714
Derived & operator=(const PlainObjectBase &other)
Definition: PlainObjectBase.h:451
@ DontAlign
Definition: Constants.h:326
@ RowMajor
Definition: Constants.h:322
const unsigned int PacketAccessBit
Definition: Constants.h:89
const unsigned int LinearAccessBit
Definition: Constants.h:125
const unsigned int DirectAccessBit
Definition: Constants.h:150
const unsigned int RowMajorBit
Definition: Constants.h:61
Namespace containing all symbols from the Eigen library.
Definition: Core:287
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:33
const int Dynamic
Definition: Constants.h:21
Definition: EigenBase.h:29