Todo List

Member cml::et::detail::MatrixAssignmentUnroller::operator() (matrix_type &dest, const SrcT &src, cml::dynamic_size_tag)
This needs to be specialized for efficient row-major or col-major layout access.

Member cml::et::QuaternionInverseOp::imaginary () const
This could be returned as a VectorXpr also.

Member cml::quaternion::normalize ()
Make this return a QuaternionXpr.

File cml.h
load vectors, matrices, and quaternions from a stream.

File cml.h
Move common vector and matrix class ops to a base class (requires SCOOP-like programming, see below).

File cml.h
Implement matrix<>::orthogonalize().

File cml.h
Add is_square<>, is_rectangular<>, etc. to make it easier to detect specific matrix types.

File cml.h
Implement dedicated square matrix classes to get rid of duplicated code in the specialized matrix classes.

File cml.h
Implement automatic temporary generation, along with expression node return types for mat-vec and mat-mat operators.

File cml.h
switch to ssize_t instead of size_t to avoid having to explicitly deal with wrap-arounds to 2^32-1 when a size_t is subtracted from.

File cml.h
Finish tests for mat-vec multiply.

File cml.h
Differentiate between references used for function arguments, and those used for variable types. In particular, GCC 3.4 requires const T & function arguments to ensure complete unrolling/inlining of expressions.

File cml.h
Specialize matrix multiplication based upon the size type (fixed or dynamic). This makes a difference for at least GCC 3.4.

File cml.h
need a build system for the tests/ and examples/ directories.

File cml.h
clean up the testing infrastructure, and make it easier to add new tests

File cml.h
figure out if scalars should be passed by value or reference, or if it should be determined by traits

File cml.h
change use of typename and class to be like Alexandrescu book

File cml.h
figure out if it makes sense to unroll assignment if either the source expression or the target vector/matrix has a fixed size (right now, unrolling happens only if the target has a fixed size)

File cml.h
Allow addition of new types, a la glommable ETs (but simpler). Can use ideas from "SCOOP" method: Nicolas Burrus, Alexandre Duret-Lutz, Thierry Géraud, David Lesage and Raphaël Poss. A Static C++ Object-Oriented Programming (SCOOP) Paradigm Mixing Benefits of Traditional OOP and Generic Programming. In the Proceedings of the Workshop on Multiple Paradigm with OO Languages (MPOOL'03) Anaheim, CA, USA Oct. 2003

File external_1D.h
Need a better way to designate non-resizable, run-time sized arrays (e.g. by a resizeable tag).

File external_2D.h
Would casting get better performance in the external_2D<> element access methods?

File array_promotions.h
Can/should an expression with a fixed-size argument promote to a fixed array instead of a dynamic array?

Member cml::random_unit (vector< E, A > &v)
: This is just placeholder code for what will be a more thorough 'random unit' implementation:

Member cml::random_unit (vector< E, A > &v)
: Once N-d random vectors are supported, add a 'random unit quaternion' function that wraps a call to random_unit() with a 4D vector as the argument.

File determinant.h
This should be specialized on the matrix size for small matrices.

File lu.h
The LU implementation does not check for a zero diagonal entry (implying that the input has no LU factorization).

File lu.h
Should also have a pivoting implementation.

File lu.h
need to throw a numeric error if the determinant of the matrix given to lu(), lu_solve(), or inverse() is 0.

File matrix_comparison.h
The matrix and matrix order operators could probably be combined into a single templated implementation, since the only thing that is different is the access method.

File matrix_expr.h
Dynamic resizing needs to be integrated more naturally into mul() and matrix transpose():

Member cml::identity (const matrix< E, AT, BO, L > &m)
This should return a MatrixXpr to allow loop unrolling, as should the class method.

File matrix_mul.h
Does it make sense to put mat-mat multiplication as a node into the expression tree?

File matrix_transpose.h
Currently, the transpose() and T() functions copy the transposed result into a temporary, and return it to avoid aliasing problems, e.g. C = transpose(C). By checking for C on the right-hand side, this can be avoided, but experimentation is needed to determine the impact on performance. Another option is to use a function to explicitly specify when a temporary is needed; e.g. C = transpose(temp(C)).

File matrix_unroller.h
Need to implement unrolling for efficient col-major array access.

File matrix_unroller.h
Does it make sense to unroll an assignment if either side of the assignment has a fixed size, or just when the target matrix is fixed size?

File matvec_mul.h
Implement smarter temporary generation.

File matvec_mul.h
Does it make sense to put mat-vec multiplication as a node into the expression tree?

File quaternion.h
Return a VectorXpr adaptor from the imaginary() method of quaternion and the expression node types.

File quaternion.h
swap multiplication order based upon template param

File quaternion.h
change element order based upon template param

File quaternion_functions.h
The functions that return quaternions and vectors should be changed to return quaternion expression nodes, as should the corresponding class methods.

File vecop_macros.h
Should ScalarT in expressions be passed by reference or by value?

File vector_products.h
Figure out if the source or destination size type should trigger unrolling. May need a per-compiler compile-time option for this.

File vector_unroller.h
Add unrolling for dynamic vectors, and for vectors longer than CML_VECTOR_UNROLL_LIMIT.

File vector_unroller.h
Does it make sense to unroll an assignment if either side of the assignment has a fixed size, or just when the target vector is fixed size?

Generated on Sat Jul 18 19:35:36 2009 for CML 1.0 by  doxygen 1.5.9