diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-10-14 10:12:58 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-10-14 10:12:58 +0200 |
commit | 2598f3987edc704d9c95e1c207d3533e26314ca0 (patch) | |
tree | 54bc135033df686b293b6e4fcde298c2ccad560c /Eigen/src/SparseCore/SparseUtil.h | |
parent | b4c79ee1d3d7b44e58f2bea48cd597aa0fa7e007 (diff) |
Add a plain_object_eval<> helper returning a plain object type based on evaluator's Flags,
and base nested_eval on it.
Diffstat (limited to 'Eigen/src/SparseCore/SparseUtil.h')
-rw-r--r-- | Eigen/src/SparseCore/SparseUtil.h | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Eigen/src/SparseCore/SparseUtil.h b/Eigen/src/SparseCore/SparseUtil.h index 75c604f79..62f0f6864 100644 --- a/Eigen/src/SparseCore/SparseUtil.h +++ b/Eigen/src/SparseCore/SparseUtil.h @@ -74,20 +74,20 @@ template<typename MatrixType,int UpLo> class SparseSymmetricPermutationProduct; namespace internal { -template<typename T,int Rows,int Cols> struct sparse_eval; +template<typename T,int Rows,int Cols,int Flags> struct sparse_eval; template<typename T> struct eval<T,Sparse> - : public sparse_eval<T, traits<T>::RowsAtCompileTime,traits<T>::ColsAtCompileTime> + : sparse_eval<T, traits<T>::RowsAtCompileTime,traits<T>::ColsAtCompileTime,traits<T>::Flags> {}; -template<typename T,int Cols> struct sparse_eval<T,1,Cols> { +template<typename T,int Cols,int Flags> struct sparse_eval<T,1,Cols,Flags> { typedef typename traits<T>::Scalar _Scalar; typedef typename traits<T>::StorageIndex _StorageIndex; public: typedef SparseVector<_Scalar, RowMajor, _StorageIndex> type; }; -template<typename T,int Rows> struct sparse_eval<T,Rows,1> { +template<typename T,int Rows,int Flags> struct sparse_eval<T,Rows,1,Flags> { typedef typename traits<T>::Scalar _Scalar; typedef typename traits<T>::StorageIndex _StorageIndex; public: @@ -95,15 +95,15 @@ template<typename T,int Rows> struct sparse_eval<T,Rows,1> { }; // TODO this seems almost identical to plain_matrix_type<T, Sparse> -template<typename T,int Rows,int Cols> struct sparse_eval { +template<typename T,int Rows,int Cols,int Flags> struct sparse_eval { typedef typename traits<T>::Scalar _Scalar; typedef typename traits<T>::StorageIndex _StorageIndex; - enum { _Options = ((traits<T>::Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor }; + enum { _Options = ((Flags&RowMajorBit)==RowMajorBit) ? RowMajor : ColMajor }; public: typedef SparseMatrix<_Scalar, _Options, _StorageIndex> type; }; -template<typename T> struct sparse_eval<T,1,1> { +template<typename T,int Flags> struct sparse_eval<T,1,1,Flags> { typedef typename traits<T>::Scalar _Scalar; public: typedef Matrix<_Scalar, 1, 1> type; @@ -118,10 +118,15 @@ template<typename T> struct plain_matrix_type<T,Sparse> typedef SparseMatrix<_Scalar, _Options, _StorageIndex> type; }; +template<typename T> +struct plain_object_eval<T,Sparse> + : sparse_eval<T, traits<T>::RowsAtCompileTime,traits<T>::ColsAtCompileTime, evaluator<T>::Flags> +{}; + template<typename Decomposition, typename RhsType> struct solve_traits<Decomposition,RhsType,Sparse> { - typedef typename sparse_eval<RhsType, RhsType::RowsAtCompileTime, RhsType::ColsAtCompileTime>::type PlainObject; + typedef typename sparse_eval<RhsType, RhsType::RowsAtCompileTime, RhsType::ColsAtCompileTime,traits<RhsType>::Flags>::type PlainObject; }; template<typename Derived> |