diff --git a/gtsam/3rdparty/Eigen/Eigen/src/Core/CommaInitializer.h b/gtsam/3rdparty/Eigen/Eigen/src/Core/CommaInitializer.h index a96867af4..57ffb6b9d 100644 --- a/gtsam/3rdparty/Eigen/Eigen/src/Core/CommaInitializer.h +++ b/gtsam/3rdparty/Eigen/Eigen/src/Core/CommaInitializer.h @@ -25,10 +25,14 @@ namespace Eigen { * \sa \ref MatrixBaseCommaInitRef "MatrixBase::operator<<", CommaInitializer::finished() */ template -struct CommaInitializer +struct CommaInitializer : + public internal::dense_xpr_base >::type { - typedef typename XprType::Scalar Scalar; - typedef typename XprType::Index Index; + typedef typename internal::dense_xpr_base >::type Base; + EIGEN_DENSE_PUBLIC_INTERFACE(CommaInitializer) + typedef typename internal::conditional::ret, + XprType, const XprType&>::type ExpressionTypeNested; + typedef typename XprType::InnerIterator InnerIterator; inline CommaInitializer(XprType& xpr, const Scalar& s) : m_xpr(xpr), m_row(0), m_col(1), m_currentBlockRows(1) @@ -104,11 +108,81 @@ struct CommaInitializer */ inline XprType& finished() { return m_xpr; } + // The following implement the DenseBase interface + + inline Index rows() const { return m_xpr.rows(); } + inline Index cols() const { return m_xpr.cols(); } + inline Index outerStride() const { return m_xpr.outerStride(); } + inline Index innerStride() const { return m_xpr.innerStride(); } + + inline CoeffReturnType coeff(Index row, Index col) const + { + return m_xpr.coeff(row, col); + } + + inline CoeffReturnType coeff(Index index) const + { + return m_xpr.coeff(index); + } + + inline const Scalar& coeffRef(Index row, Index col) const + { + return m_xpr.const_cast_derived().coeffRef(row, col); + } + + inline const Scalar& coeffRef(Index index) const + { + return m_xpr.const_cast_derived().coeffRef(index); + } + + inline Scalar& coeffRef(Index row, Index col) + { + return m_xpr.const_cast_derived().coeffRef(row, col); + } + + inline Scalar& coeffRef(Index index) + { + return m_xpr.const_cast_derived().coeffRef(index); + } + + template + inline const PacketScalar packet(Index row, Index col) const + { + return m_xpr.template packet(row, col); + } + + template + inline void writePacket(Index row, Index col, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket(row, col, x); + } + + template + inline const PacketScalar packet(Index index) const + { + return m_xpr.template packet(index); + } + + template + inline void writePacket(Index index, const PacketScalar& x) + { + m_xpr.const_cast_derived().template writePacket(index, x); + } + + const XprType& _expression() const { return m_xpr; } + XprType& m_xpr; // target expression Index m_row; // current row id Index m_col; // current col id Index m_currentBlockRows; // current block height }; + +namespace internal { + template + struct traits > : traits + { + }; +} /** \anchor MatrixBaseCommaInitRef * Convenient operator to set the coefficients of a matrix.