mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
* implement the corner() API change: new methods topLeftCorner() etc
* get rid of BlockReturnType: it was not needed, and code was not always using it consistently anyway * add topRows(), leftCols(), bottomRows(), rightCols() * add corners unit-test covering all of that * adapt docs, expand "porting from eigen 2 to 3" * adapt Eigen2Support
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user