[eigen] alpha3

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]

Hi List,

alpha3 is released, website updated.

The goal of this release is to adress the needs of module developers (hey 
Jonas and Ramon!). Indeed, as I said, the API in alpha2 had some shortcomings 
which became apparent after a good irc discussion with Jonas. This new alpha 
release should address all of them, so I really hope that this time it will 
provide a solid foundation for module developers. Here's a summary of the 
changes since alpha2:

* big rework of the block API, but more on this below, suffices for now to say 
that dynBlock() is renamed to block() and block() is renamed to fixedBlock().

* evaluating a dynamic-size expression no longer causes a dynamic memory 
allocation, if a fixed bound is known

Matrix3d m;
m.block(a,b,c,d).eval(); // no dynamic memory allocation because
                         // regardless of a,b,c,d, the size is <= 9

this is really the biggest change. It caused big architecture changes: in 
addition to the "actual" number of rows and cols, Eigen now remember 
the "maximum" possible numbers; in the above examples while the "actual" 
numbers are Dynamic, the "maximum" numbers are 3 so we can avoid a dynamic 
memory allocation.

* some expression classes saw their sizeof() shrink due to a trick allowing to 
not waste space storing an int when it's a compile-time constant while 
allowing it to be a runtime variable in other cases. see class 
IntAtRunTimeIfDynamic in Util.h.

* so, as I said, big rework of the block API. In addition to the above 
renaming, special versions of block() were added for vectors, and convenience 
functions start() and end() were added to access the start and the end of a 
vector. Also, a convenience method corner() was added for matrices:

m.corner(Eigen::BottomLeft, num_rows, num_cols)

* as discussed on this list, we switched to enums which is an optimization, 
even though it seems that g++ was clever enough to do it on its own.

* added setZero(), setOnes(), setRandom(), setIdentity(). This is much more 
convenient than the static methods in the case when it is tedious to write 
down the expression type and dimensions.

* and of course more cleanup and reorganization, e.g. the forward declarations 
are in their own file.

There now are 2455 lines of code, up from 2234.

This time (I know I've been caught saying that many times before) I really 
think this is it and I can get back to math research for now!!



Attachment: signature.asc
Description: This is a digitally signed message part.

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/