26 #ifndef EIGEN_BLOCKMETHODS_H
27 #define EIGEN_BLOCKMETHODS_H
29 #ifndef EIGEN_PARSED_BY_DOXYGEN
32 typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime, 1, !IsRowMajor> ColXpr;
33 typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime, 1, !IsRowMajor> ConstColXpr;
35 typedef Block<Derived, 1, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> RowXpr;
36 typedef const Block<const Derived, 1, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> ConstRowXpr;
38 typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime,
Dynamic, !IsRowMajor> ColsBlockXpr;
39 typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime,
Dynamic, !IsRowMajor> ConstColsBlockXpr;
41 typedef Block<Derived, Dynamic, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> RowsBlockXpr;
42 typedef const Block<const Derived, Dynamic, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> ConstRowsBlockXpr;
44 template<
int N>
struct NColsBlockXpr {
typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime, N, !IsRowMajor>
Type; };
45 template<
int N>
struct ConstNColsBlockXpr {
typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime, N, !IsRowMajor>
Type; };
47 template<
int N>
struct NRowsBlockXpr {
typedef Block<Derived, N, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor>
Type; };
48 template<
int N>
struct ConstNRowsBlockXpr {
typedef const Block<const Derived, N, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor>
Type; };
51 #endif // not EIGEN_PARSED_BY_DOXYGEN
69 inline Block<Derived>
block(Index startRow, Index startCol, Index blockRows, Index blockCols)
71 return Block<Derived>(derived(), startRow, startCol, blockRows, blockCols);
75 inline const Block<const Derived>
block(Index startRow, Index startCol, Index blockRows, Index blockCols)
const
77 return Block<const Derived>(derived(), startRow, startCol, blockRows, blockCols);
95 return Block<Derived>(derived(), 0, cols() - cCols, cRows, cCols);
99 inline const Block<const Derived>
topRightCorner(Index cRows, Index cCols)
const
101 return Block<const Derived>(derived(), 0, cols() - cCols, cRows, cCols);
113 template<
int CRows,
int CCols>
116 return Block<Derived, CRows, CCols>(derived(), 0, cols() - CCols);
120 template<
int CRows,
int CCols>
121 inline const Block<const Derived, CRows, CCols>
topRightCorner()
const
123 return Block<const Derived, CRows, CCols>(derived(), 0, cols() - CCols);
141 return Block<Derived>(derived(), 0, 0, cRows, cCols);
145 inline const Block<const Derived>
topLeftCorner(Index cRows, Index cCols)
const
147 return Block<const Derived>(derived(), 0, 0, cRows, cCols);
159 template<
int CRows,
int CCols>
162 return Block<Derived, CRows, CCols>(derived(), 0, 0);
166 template<
int CRows,
int CCols>
167 inline const Block<const Derived, CRows, CCols>
topLeftCorner()
const
169 return Block<const Derived, CRows, CCols>(derived(), 0, 0);
186 return Block<Derived>(derived(), rows() - cRows, cols() - cCols, cRows, cCols);
190 inline const Block<const Derived>
bottomRightCorner(Index cRows, Index cCols)
const
192 return Block<const Derived>(derived(), rows() - cRows, cols() - cCols, cRows, cCols);
204 template<
int CRows,
int CCols>
207 return Block<Derived, CRows, CCols>(derived(), rows() - CRows, cols() - CCols);
211 template<
int CRows,
int CCols>
214 return Block<const Derived, CRows, CCols>(derived(), rows() - CRows, cols() - CCols);
231 return Block<Derived>(derived(), rows() - cRows, 0, cRows, cCols);
235 inline const Block<const Derived>
bottomLeftCorner(Index cRows, Index cCols)
const
237 return Block<const Derived>(derived(), rows() - cRows, 0, cRows, cCols);
249 template<
int CRows,
int CCols>
252 return Block<Derived, CRows, CCols>(derived(), rows() - CRows, 0);
256 template<
int CRows,
int CCols>
259 return Block<const Derived, CRows, CCols>(derived(), rows() - CRows, 0);
275 return RowsBlockXpr(derived(), 0, 0, n, cols());
279 inline ConstRowsBlockXpr
topRows(Index n)
const
281 return ConstRowsBlockXpr(derived(), 0, 0, n, cols());
319 return RowsBlockXpr(derived(), rows() - n, 0, n, cols());
323 inline ConstRowsBlockXpr
bottomRows(Index n)
const
325 return ConstRowsBlockXpr(derived(), rows() - n, 0, n, cols());
362 inline RowsBlockXpr
middleRows(Index startRow, Index numRows)
364 return RowsBlockXpr(derived(), startRow, 0, numRows, cols());
368 inline ConstRowsBlockXpr
middleRows(Index startRow, Index numRows)
const
370 return ConstRowsBlockXpr(derived(), startRow, 0, numRows, cols());
409 return ColsBlockXpr(derived(), 0, 0, rows(), n);
413 inline ConstColsBlockXpr
leftCols(Index n)
const
415 return ConstColsBlockXpr(derived(), 0, 0, rows(), n);
453 return ColsBlockXpr(derived(), 0, cols() - n, rows(), n);
457 inline ConstColsBlockXpr
rightCols(Index n)
const
459 return ConstColsBlockXpr(derived(), 0, cols() - n, rows(), n);
496 inline ColsBlockXpr
middleCols(Index startCol, Index numCols)
498 return ColsBlockXpr(derived(), 0, startCol, rows(), numCols);
502 inline ConstColsBlockXpr
middleCols(Index startCol, Index numCols)
const
504 return ConstColsBlockXpr(derived(), 0, startCol, rows(), numCols);
548 template<
int BlockRows,
int BlockCols>
549 inline Block<Derived, BlockRows, BlockCols>
block(Index startRow, Index startCol)
551 return Block<Derived, BlockRows, BlockCols>(derived(), startRow, startCol);
555 template<
int BlockRows,
int BlockCols>
556 inline const Block<const Derived, BlockRows, BlockCols>
block(Index startRow, Index startCol)
const
558 return Block<const Derived, BlockRows, BlockCols>(derived(), startRow, startCol);
567 inline ColXpr
col(Index i)
569 return ColXpr(derived(), i);
573 inline ConstColXpr
col(Index i)
const
575 return ConstColXpr(derived(), i);
584 inline RowXpr
row(Index i)
586 return RowXpr(derived(), i);
590 inline ConstRowXpr
row(Index i)
const
592 return ConstRowXpr(derived(), i);
595 #endif // EIGEN_BLOCKMETHODS_H