aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/DenseBase.h
diff options
context:
space:
mode:
Diffstat (limited to 'Eigen/src/Core/DenseBase.h')
-rw-r--r--Eigen/src/Core/DenseBase.h74
1 files changed, 61 insertions, 13 deletions
diff --git a/Eigen/src/Core/DenseBase.h b/Eigen/src/Core/DenseBase.h
index 566b4b410..da464067b 100644
--- a/Eigen/src/Core/DenseBase.h
+++ b/Eigen/src/Core/DenseBase.h
@@ -220,8 +220,18 @@ template<typename Derived> class DenseBase
typedef Matrix<typename NumTraits<typename ei_traits<Derived>::Scalar>::Real, ei_traits<Derived>::ColsAtCompileTime, 1> EigenvaluesReturnType;
/** \internal expression type of a column */
typedef Block<Derived, ei_traits<Derived>::RowsAtCompileTime, 1> ColXpr;
- /** \internal expression type of a column */
+ /** \internal expression type of a row */
typedef Block<Derived, 1, ei_traits<Derived>::ColsAtCompileTime> RowXpr;
+ /** \internal expression type of a block of whole columns */
+ typedef Block<Derived, ei_traits<Derived>::RowsAtCompileTime, Dynamic> ColsBlockXpr;
+ /** \internal expression type of a block of whole rows */
+ typedef Block<Derived, Dynamic, ei_traits<Derived>::ColsAtCompileTime> RowsBlockXpr;
+ /** \internal expression type of a block of whole columns */
+ template<int N> struct NColsBlockXpr { typedef Block<Derived, ei_traits<Derived>::RowsAtCompileTime, N> Type; };
+ /** \internal expression type of a block of whole rows */
+ template<int N> struct NRowsBlockXpr { typedef Block<Derived, N, ei_traits<Derived>::ColsAtCompileTime> Type; };
+
+
#endif // not EIGEN_PARSED_BY_DOXYGEN
const CoeffReturnType x() const;
@@ -334,9 +344,8 @@ template<typename Derived> class DenseBase
ColXpr col(int i);
const ColXpr col(int i) const;
- typename BlockReturnType<Derived>::Type block(int startRow, int startCol, int blockRows, int blockCols);
- const typename BlockReturnType<Derived>::Type
- block(int startRow, int startCol, int blockRows, int blockCols) const;
+ Block<Derived> block(int startRow, int startCol, int blockRows, int blockCols);
+ const Block<Derived> block(int startRow, int startCol, int blockRows, int blockCols) const;
VectorBlock<Derived> segment(int start, int size);
const VectorBlock<Derived> segment(int start, int size) const;
@@ -347,18 +356,46 @@ template<typename Derived> class DenseBase
VectorBlock<Derived> tail(int size);
const VectorBlock<Derived> tail(int size) const;
- typename BlockReturnType<Derived>::Type corner(CornerType type, int cRows, int cCols);
- const typename BlockReturnType<Derived>::Type corner(CornerType type, int cRows, int cCols) const;
+ Block<Derived> topLeftCorner(int cRows, int cCols);
+ const Block<Derived> topLeftCorner(int cRows, int cCols) const;
+ Block<Derived> topRightCorner(int cRows, int cCols);
+ const Block<Derived> topRightCorner(int cRows, int cCols) const;
+ Block<Derived> bottomLeftCorner(int cRows, int cCols);
+ const Block<Derived> bottomLeftCorner(int cRows, int cCols) const;
+ Block<Derived> bottomRightCorner(int cRows, int cCols);
+ const Block<Derived> bottomRightCorner(int cRows, int cCols) const;
+
+ RowsBlockXpr topRows(int n);
+ const RowsBlockXpr topRows(int n) const;
+ RowsBlockXpr bottomRows(int n);
+ const RowsBlockXpr bottomRows(int n) const;
+ ColsBlockXpr leftCols(int n);
+ const ColsBlockXpr leftCols(int n) const;
+ ColsBlockXpr rightCols(int n);
+ const ColsBlockXpr rightCols(int n) const;
+
+ template<int CRows, int CCols> Block<Derived, CRows, CCols> topLeftCorner();
+ template<int CRows, int CCols> const Block<Derived, CRows, CCols> topLeftCorner() const;
+ template<int CRows, int CCols> Block<Derived, CRows, CCols> topRightCorner();
+ template<int CRows, int CCols> const Block<Derived, CRows, CCols> topRightCorner() const;
+ template<int CRows, int CCols> Block<Derived, CRows, CCols> bottomLeftCorner();
+ template<int CRows, int CCols> const Block<Derived, CRows, CCols> bottomLeftCorner() const;
+ template<int CRows, int CCols> Block<Derived, CRows, CCols> bottomRightCorner();
+ template<int CRows, int CCols> const Block<Derived, CRows, CCols> bottomRightCorner() const;
+
+ template<int NRows> typename NRowsBlockXpr<NRows>::Type topRows();
+ template<int NRows> const typename NRowsBlockXpr<NRows>::Type topRows() const;
+ template<int NRows> typename NRowsBlockXpr<NRows>::Type bottomRows();
+ template<int NRows> const typename NRowsBlockXpr<NRows>::Type bottomRows() const;
+ template<int NCols> typename NColsBlockXpr<NCols>::Type leftCols();
+ template<int NCols> const typename NColsBlockXpr<NCols>::Type leftCols() const;
+ template<int NCols> typename NColsBlockXpr<NCols>::Type rightCols();
+ template<int NCols> const typename NColsBlockXpr<NCols>::Type rightCols() const;
template<int BlockRows, int BlockCols>
- typename BlockReturnType<Derived, BlockRows, BlockCols>::Type block(int startRow, int startCol);
+ Block<Derived, BlockRows, BlockCols> block(int startRow, int startCol);
template<int BlockRows, int BlockCols>
- const typename BlockReturnType<Derived, BlockRows, BlockCols>::Type block(int startRow, int startCol) const;
-
- template<int CRows, int CCols>
- typename BlockReturnType<Derived, CRows, CCols>::Type corner(CornerType type);
- template<int CRows, int CCols>
- const typename BlockReturnType<Derived, CRows, CCols>::Type corner(CornerType type) const;
+ const Block<Derived, BlockRows, BlockCols> block(int startRow, int startCol) const;
template<int Size> VectorBlock<Derived,Size> head(void);
template<int Size> const VectorBlock<Derived,Size> head() const;
@@ -523,6 +560,17 @@ template<typename Derived> class DenseBase
const Eigen::Reverse<Derived, BothDirections> reverse() const;
void reverseInPlace();
+#ifdef EIGEN2_SUPPORT
+
+ Block<Derived> corner(CornerType type, int cRows, int cCols);
+ const Block<Derived> corner(CornerType type, int cRows, int cCols) const;
+ template<int CRows, int CCols>
+ Block<Derived, CRows, CCols> corner(CornerType type);
+ template<int CRows, int CCols>
+ const Block<Derived, CRows, CCols> corner(CornerType type) const;
+
+#endif // EIGEN2_SUPPORT
+
#ifdef EIGEN_DENSEBASE_PLUGIN
#include EIGEN_DENSEBASE_PLUGIN
#endif