1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_ARRAYWRAPPER_H 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_ARRAYWRAPPER_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \class ArrayWrapper 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \ingroup Core_Module 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Expression of a mathematical vector or matrix as an array object 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This class is the return type of MatrixBase::array(), and most of the time 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * this is the only way it is use. 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::array(), class MatrixWrapper 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct traits<ArrayWrapper<ExpressionType> > 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : public traits<typename remove_all<typename ExpressionType::Nested>::type > 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef ArrayXpr XprKind; 32615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray // Let's remove NestByRefBit 33615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray enum { 34615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags, 35615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Flags = Flags0 & ~NestByRefBit 36615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray }; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass ArrayWrapper : public ArrayBase<ArrayWrapper<ExpressionType> > 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public: 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef ArrayBase<ArrayWrapper> Base; 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper) 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper) 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::conditional< 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath internal::is_lvalue<ExpressionType>::value, 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar, 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath >::type ScalarWithConstIfNotLvalue; 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::nested<ExpressionType>::type NestedExpressionType; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline ArrayWrapper(ExpressionType& matrix) : m_expression(matrix) {} 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index rows() const { return m_expression.rows(); } 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index cols() const { return m_expression.cols(); } 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index outerStride() const { return m_expression.outerStride(); } 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index innerStride() const { return m_expression.innerStride(); } 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 637faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline ScalarWithConstIfNotLvalue* data() { return m_expression.const_cast_derived().data(); } 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar* data() const { return m_expression.data(); } 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 667faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline CoeffReturnType coeff(Index rowId, Index colId) const 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 687faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.coeff(rowId, colId); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 717faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline Scalar& coeffRef(Index rowId, Index colId) 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 737faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.const_cast_derived().coeffRef(rowId, colId); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 767faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline const Scalar& coeffRef(Index rowId, Index colId) const 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 787faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.const_cast_derived().coeffRef(rowId, colId); 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline CoeffReturnType coeff(Index index) const 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.coeff(index); 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Scalar& coeffRef(Index index) 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.const_cast_derived().coeffRef(index); 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar& coeffRef(Index index) const 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.const_cast_derived().coeffRef(index); 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 977faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline const PacketScalar packet(Index rowId, Index colId) const 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 997faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.template packet<LoadMode>(rowId, colId); 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 1037faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline void writePacket(Index rowId, Index colId, const PacketScalar& val) 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1057faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m_expression.const_cast_derived().template writePacket<LoadMode>(rowId, colId, val); 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const PacketScalar packet(Index index) const 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.template packet<LoadMode>(index); 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 1157faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline void writePacket(Index index, const PacketScalar& val) 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1177faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m_expression.const_cast_derived().template writePacket<LoadMode>(index, val); 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<typename Dest> 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline void evalTo(Dest& dst) const { dst = m_expression; } 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const typename internal::remove_all<NestedExpressionType>::type& 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath nestedExpression() const 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1297faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez /** Forwards the resizing request to the nested expression 1307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \sa DenseBase::resize(Index) */ 1317faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); } 1327faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez /** Forwards the resizing request to the nested expression 1337faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \sa DenseBase::resize(Index,Index)*/ 1347faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); } 1357faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath protected: 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath NestedExpressionType m_expression; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath/** \class MatrixWrapper 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \ingroup Core_Module 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \brief Expression of an array as a mathematical vector or matrix 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * This class is the return type of ArrayBase::matrix(), and most of the time 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * this is the only way it is use. 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath * \sa MatrixBase::matrix(), class ArrayWrapper 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath */ 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct traits<MatrixWrapper<ExpressionType> > 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : public traits<typename remove_all<typename ExpressionType::Nested>::type > 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef MatrixXpr XprKind; 157615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray // Let's remove NestByRefBit 158615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray enum { 159615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags, 160615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray Flags = Flags0 & ~NestByRefBit 161615d816d068b4d0f5e8df601930b5f160bf7eda1Tim Murray }; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass MatrixWrapper : public MatrixBase<MatrixWrapper<ExpressionType> > 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath public: 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef MatrixBase<MatrixWrapper<ExpressionType> > Base; 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper) 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper) 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::conditional< 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath internal::is_lvalue<ExpressionType>::value, 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Scalar, 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const Scalar 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath >::type ScalarWithConstIfNotLvalue; 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef typename internal::nested<ExpressionType>::type NestedExpressionType; 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline MatrixWrapper(ExpressionType& a_matrix) : m_expression(a_matrix) {} 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index rows() const { return m_expression.rows(); } 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index cols() const { return m_expression.cols(); } 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index outerStride() const { return m_expression.outerStride(); } 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Index innerStride() const { return m_expression.innerStride(); } 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 188810535bb0c575a003b32076e5352ab8fd3f23a1cAmi Patel inline ScalarWithConstIfNotLvalue* data() { return m_expression.const_cast_derived().data(); } 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar* data() const { return m_expression.data(); } 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1917faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline CoeffReturnType coeff(Index rowId, Index colId) const 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1937faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.coeff(rowId, colId); 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1967faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline Scalar& coeffRef(Index rowId, Index colId) 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 1987faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.const_cast_derived().coeffRef(rowId, colId); 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2017faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline const Scalar& coeffRef(Index rowId, Index colId) const 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2037faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.derived().coeffRef(rowId, colId); 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline CoeffReturnType coeff(Index index) const 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.coeff(index); 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline Scalar& coeffRef(Index index) 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.const_cast_derived().coeffRef(index); 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const Scalar& coeffRef(Index index) const 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.const_cast_derived().coeffRef(index); 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 2227faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline const PacketScalar packet(Index rowId, Index colId) const 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2247faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez return m_expression.template packet<LoadMode>(rowId, colId); 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 2287faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline void writePacket(Index rowId, Index colId, const PacketScalar& val) 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2307faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m_expression.const_cast_derived().template writePacket<LoadMode>(rowId, colId, val); 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath inline const PacketScalar packet(Index index) const 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression.template packet<LoadMode>(index); 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath template<int LoadMode> 2407faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez inline void writePacket(Index index, const PacketScalar& val) 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 2427faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez m_expression.const_cast_derived().template writePacket<LoadMode>(index, val); 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath const typename internal::remove_all<NestedExpressionType>::type& 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath nestedExpression() const 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return m_expression; 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2517faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez /** Forwards the resizing request to the nested expression 2527faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \sa DenseBase::resize(Index) */ 2537faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez void resize(Index newSize) { m_expression.const_cast_derived().resize(newSize); } 2547faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez /** Forwards the resizing request to the nested expression 2557faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez * \sa DenseBase::resize(Index,Index)*/ 2567faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez void resize(Index nbRows, Index nbCols) { m_expression.const_cast_derived().resize(nbRows,nbCols); } 2577faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandez 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath protected: 259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath NestedExpressionType m_expression; 260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_ARRAYWRAPPER_H 265