aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/misc
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-11-09 07:51:31 -0500
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-11-09 07:51:31 -0500
commit9a0900e33e9ca4bc174cfccc26dbf4bdc38f7627 (patch)
tree5d24519203764f0c6b6dc479946e56fd92025cb2 /Eigen/src/misc
parente4e58e8337e82ba76f6bf4fe7000acac9337056c (diff)
last round of changes, mainly to return derived types instead of base types, and fix various compilation issues
Diffstat (limited to 'Eigen/src/misc')
-rw-r--r--Eigen/src/misc/Image.h35
-rw-r--r--Eigen/src/misc/Kernel.h28
-rw-r--r--Eigen/src/misc/Solve.h30
3 files changed, 59 insertions, 34 deletions
diff --git a/Eigen/src/misc/Image.h b/Eigen/src/misc/Image.h
index 01e2b160d..9ed5d5f70 100644
--- a/Eigen/src/misc/Image.h
+++ b/Eigen/src/misc/Image.h
@@ -25,11 +25,11 @@
#ifndef EIGEN_MISC_IMAGE_H
#define EIGEN_MISC_IMAGE_H
-/** \class ei_image_return_value
+/** \class ei_image_retval_base
*
*/
template<typename DecompositionType>
-struct ei_traits<ei_image_return_value<DecompositionType> >
+struct ei_traits<ei_image_retval_base<DecompositionType> >
{
typedef typename DecompositionType::MatrixType MatrixType;
typedef Matrix<
@@ -43,17 +43,13 @@ struct ei_traits<ei_image_return_value<DecompositionType> >
> ReturnMatrixType;
};
-template<typename _DecompositionType> struct ei_image_return_value
- : public ReturnByValue<ei_image_return_value<_DecompositionType> >
+template<typename _DecompositionType> struct ei_image_retval_base
+ : public ReturnByValue<ei_image_retval_base<_DecompositionType> >
{
typedef _DecompositionType DecompositionType;
typedef typename DecompositionType::MatrixType MatrixType;
- const DecompositionType& m_dec;
- int m_rank, m_cols;
- const MatrixType& m_originalMatrix;
-
- ei_image_return_value(const DecompositionType& dec, const MatrixType& originalMatrix)
+ ei_image_retval_base(const DecompositionType& dec, const MatrixType& originalMatrix)
: m_dec(dec), m_rank(dec.rank()),
m_cols(m_rank == 0 ? 1 : m_rank),
m_originalMatrix(originalMatrix)
@@ -61,19 +57,32 @@ template<typename _DecompositionType> struct ei_image_return_value
inline int rows() const { return m_dec.rows(); }
inline int cols() const { return m_cols; }
+ inline int rank() const { return m_rank; }
+ inline const DecompositionType& dec() const { return m_dec; }
+ inline const MatrixType& originalMatrix() const { return m_originalMatrix; }
template<typename Dest> inline void evalTo(Dest& dst) const
{
- static_cast<const ei_image_impl<DecompositionType>*>(this)->evalTo(dst);
+ static_cast<const ei_image_retval<DecompositionType>*>(this)->evalTo(dst);
}
+
+ protected:
+ const DecompositionType& m_dec;
+ int m_rank, m_cols;
+ const MatrixType& m_originalMatrix;
};
#define EIGEN_MAKE_IMAGE_HELPERS(DecompositionType) \
typedef typename DecompositionType::MatrixType MatrixType; \
typedef typename MatrixType::Scalar Scalar; \
typedef typename MatrixType::RealScalar RealScalar; \
- inline const DecompositionType& dec() const { return this->m_dec; } \
- inline const MatrixType& originalMatrix() const { return this->m_originalMatrix; } \
- inline int rank() const { return this->m_rank; }
+ typedef ei_image_retval_base<DecompositionType> Base; \
+ using Base::dec; \
+ using Base::originalMatrix; \
+ using Base::rank; \
+ using Base::rows; \
+ using Base::cols; \
+ ei_image_retval(const DecompositionType& dec, const MatrixType& originalMatrix) \
+ : Base(dec, originalMatrix) {}
#endif // EIGEN_MISC_IMAGE_H
diff --git a/Eigen/src/misc/Kernel.h b/Eigen/src/misc/Kernel.h
index 74ef16abc..717eef450 100644
--- a/Eigen/src/misc/Kernel.h
+++ b/Eigen/src/misc/Kernel.h
@@ -25,11 +25,11 @@
#ifndef EIGEN_MISC_KERNEL_H
#define EIGEN_MISC_KERNEL_H
-/** \class ei_kernel_return_value
+/** \class ei_kernel_retval_base
*
*/
template<typename DecompositionType>
-struct ei_traits<ei_kernel_return_value<DecompositionType> >
+struct ei_traits<ei_kernel_retval_base<DecompositionType> >
{
typedef typename DecompositionType::MatrixType MatrixType;
typedef Matrix<
@@ -45,14 +45,12 @@ struct ei_traits<ei_kernel_return_value<DecompositionType> >
> ReturnMatrixType;
};
-template<typename _DecompositionType> struct ei_kernel_return_value
- : public ReturnByValue<ei_kernel_return_value<_DecompositionType> >
+template<typename _DecompositionType> struct ei_kernel_retval_base
+ : public ReturnByValue<ei_kernel_retval_base<_DecompositionType> >
{
typedef _DecompositionType DecompositionType;
- const DecompositionType& m_dec;
- int m_rank, m_cols;
- ei_kernel_return_value(const DecompositionType& dec)
+ ei_kernel_retval_base(const DecompositionType& dec)
: m_dec(dec),
m_rank(dec.rank()),
m_cols(m_rank==dec.cols() ? 1 : dec.cols() - m_rank)
@@ -60,18 +58,28 @@ template<typename _DecompositionType> struct ei_kernel_return_value
inline int rows() const { return m_dec.cols(); }
inline int cols() const { return m_cols; }
+ inline int rank() const { return m_rank; }
+ inline const DecompositionType& dec() const { return m_dec; }
template<typename Dest> inline void evalTo(Dest& dst) const
{
- static_cast<const ei_kernel_impl<DecompositionType>*>(this)->evalTo(dst);
+ static_cast<const ei_kernel_retval<DecompositionType>*>(this)->evalTo(dst);
}
+
+ protected:
+ const DecompositionType& m_dec;
+ int m_rank, m_cols;
};
#define EIGEN_MAKE_KERNEL_HELPERS(DecompositionType) \
typedef typename DecompositionType::MatrixType MatrixType; \
typedef typename MatrixType::Scalar Scalar; \
typedef typename MatrixType::RealScalar RealScalar; \
- inline const DecompositionType& dec() const { return this->m_dec; } \
- inline int rank() const { return this->m_rank; }
+ typedef ei_kernel_retval_base<DecompositionType> Base; \
+ using Base::dec; \
+ using Base::rank; \
+ using Base::rows; \
+ using Base::cols; \
+ ei_kernel_retval(const DecompositionType& dec) : Base(dec) {}
#endif // EIGEN_MISC_KERNEL_H
diff --git a/Eigen/src/misc/Solve.h b/Eigen/src/misc/Solve.h
index bf8f15773..d93869121 100644
--- a/Eigen/src/misc/Solve.h
+++ b/Eigen/src/misc/Solve.h
@@ -25,11 +25,11 @@
#ifndef EIGEN_MISC_SOLVE_H
#define EIGEN_MISC_SOLVE_H
-/** \class ei_solve_return_value
+/** \class ei_solve_retval_base
*
*/
template<typename DecompositionType, typename Rhs>
-struct ei_traits<ei_solve_return_value<DecompositionType, Rhs> >
+struct ei_traits<ei_solve_retval_base<DecompositionType, Rhs> >
{
typedef typename DecompositionType::MatrixType MatrixType;
typedef Matrix<typename Rhs::Scalar,
@@ -40,33 +40,41 @@ struct ei_traits<ei_solve_return_value<DecompositionType, Rhs> >
Rhs::MaxColsAtCompileTime> ReturnMatrixType;
};
-template<typename _DecompositionType, typename Rhs> struct ei_solve_return_value
- : public ReturnByValue<ei_solve_return_value<_DecompositionType, Rhs> >
+template<typename _DecompositionType, typename Rhs> struct ei_solve_retval_base
+ : public ReturnByValue<ei_solve_retval_base<_DecompositionType, Rhs> >
{
typedef typename ei_cleantype<typename Rhs::Nested>::type RhsNestedCleaned;
typedef _DecompositionType DecompositionType;
- const DecompositionType& m_dec;
- const typename Rhs::Nested m_rhs;
- ei_solve_return_value(const DecompositionType& dec, const Rhs& rhs)
+ ei_solve_retval_base(const DecompositionType& dec, const Rhs& rhs)
: m_dec(dec), m_rhs(rhs)
{}
inline int rows() const { return m_dec.cols(); }
inline int cols() const { return m_rhs.cols(); }
+ inline const DecompositionType& dec() const { return m_dec; }
+ inline const RhsNestedCleaned& rhs() const { return m_rhs; }
template<typename Dest> inline void evalTo(Dest& dst) const
{
- static_cast<const ei_solve_impl<DecompositionType,Rhs>*>(this)->evalTo(dst);
+ static_cast<const ei_solve_retval<DecompositionType,Rhs>*>(this)->evalTo(dst);
}
+
+ protected:
+ const DecompositionType& m_dec;
+ const typename Rhs::Nested m_rhs;
};
#define EIGEN_MAKE_SOLVE_HELPERS(DecompositionType,Rhs) \
typedef typename DecompositionType::MatrixType MatrixType; \
typedef typename MatrixType::Scalar Scalar; \
typedef typename MatrixType::RealScalar RealScalar; \
- typedef typename ei_cleantype<typename Rhs::Nested>::type RhsNestedCleaned; \
- inline const DecompositionType& dec() const { return this->m_dec; } \
- inline const RhsNestedCleaned& rhs() const { return this->m_rhs; }
+ typedef ei_solve_retval_base<DecompositionType,Rhs> Base; \
+ using Base::dec; \
+ using Base::rhs; \
+ using Base::rows; \
+ using Base::cols; \
+ ei_solve_retval(const DecompositionType& dec, const Rhs& rhs) \
+ : Base(dec, rhs) {}
#endif // EIGEN_MISC_SOLVE_H