1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <Eigen/Core>
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream>
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace Eigen;
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived>
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathEigen::Block<Derived>
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathtopLeftCorner(MatrixBase<Derived>& m, int rows, int cols)
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return Eigen::Block<Derived>(m.derived(), 0, 0, rows, cols);
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived>
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathconst Eigen::Block<const Derived>
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan KamathtopLeftCorner(const MatrixBase<Derived>& m, int rows, int cols)
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return Eigen::Block<const Derived>(m.derived(), 0, 0, rows, cols);
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main(int, char**)
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  Matrix4d m = Matrix4d::Identity();
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  cout << topLeftCorner(4*m, 2, 3) << endl; // calls the const version
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  topLeftCorner(m, 2, 3) *= 5;              // calls the non-const version
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  cout << "Now the matrix m is:" << endl << m << endl;
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  return 0;
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}
28