Add a DynamicIndex constant for signed quantities and use it to fix the conflict

between Diagonal<S,-1> (the first sub diagonal) and a runtime super/sub diagonal which is now:
Diagonal<S,DynamicIndex>
This commit is contained in:
Gael Guennebaud
2012-07-10 23:04:17 +02:00
parent 3e6329a0d9
commit 904ecdf9d8
5 changed files with 43 additions and 20 deletions

View File

@@ -46,17 +46,14 @@ template<typename MatrixType> void diagonal(const MatrixType& m)
if (rows>2)
{
enum {
N1 = MatrixType::RowsAtCompileTime>1 ? 1 : 0,
N2 = MatrixType::RowsAtCompileTime>2 ? -2 : 0
N1 = MatrixType::RowsAtCompileTime>2 ? 2 : 0,
N2 = MatrixType::RowsAtCompileTime>1 ? -1 : 0
};
// check sub/super diagonal
if(m1.template diagonal<N1>().RowsAtCompileTime!=Dynamic)
if(MatrixType::SizeAtCompileTime!=Dynamic)
{
VERIFY(m1.template diagonal<N1>().RowsAtCompileTime == m1.diagonal(N1).size());
}
if(m1.template diagonal<N2>().RowsAtCompileTime!=Dynamic)
{
VERIFY(m1.template diagonal<N2>().RowsAtCompileTime == m1.diagonal(N2).size());
}