Re: [eigen] Serious conflict between Dynamic and -1 in Diagonal<> |
[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]
On 10.07.2012 10:34, Gael Guennebaud wrote:
Hi, as pointed out in this thread: http://forum.kde.org/viewtopic.php?f=74&t=106803 there is a serious issue in the Diagonal<Expression, DiagIndex> class. Recall that Diagonal<> represents an expression of the diagonal (DiagIndex==0), a super-diagonal (DiagIndex>0) or a sub-diagonal (DiagIndex<0). Of course, one can also set DiagIndex to Dynamic to pick a given super/sub diagonal at runtime. The problem is that since Dynamic==-1, we cannot distinguish between the first sub-diagonal (DiagIndex==-1) and a runtime selected diagonal. Since changing the value of Dynamic is not an option, I propose to add a special enum for this use case, like RuntimeDiagIndex or DynamicDiagIndex that would be set to a very big value. Opinion? better solution?
Another solution would be to index sub-diagonals by (-idx-1) (i.e. ~idx), so main-diagonal is 0, 1st sub-diagonal is -2=0xfffffffe, etc.
You could still keep the syntax of m.diagonal<-1>() for the first sub-diagonal, and by redefining [Const]DiagonalIndexReturnType you almost keep API-compatibility (not if someone directly uses Diagonal<MatrixType, Index>).
Btw:For direct access types the return type of m.diagonal() could be just a Map with inner stride of m.outerStride()+m.innerStride(), couldn't it?
Christoph -- ---------------------------------------------- Dipl.-Inf. Christoph Hertzberg Cartesium 0.049 Universität Bremen Enrique-Schmidt-Straße 5 28359 Bremen Tel: +49 (421) 218-64252 ----------------------------------------------
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |