On 8/26/2011 11:18 AM, Eric Niebler wrote:
On 8/26/2011 10:56 AM, Joel Falcou wrote:
On 26/08/2011 16:45, Eric Niebler wrote:
Before I answer, can you tell me why you've decided to put vector and
matrix operations into separate domains? This seems like an artificial
and unnecessary separation to me.


We have a system of specialisation where being able to make this
distinction allowed us to replace sub proto tree by a pregenerated call
to some BLAS functions or to apply some other Linear Algebra math based
simplification.

We also have a covector domain which allow us to know that : covector *
vector is a dot product while vector * covector generate a matrix. In
the same way, covector * matrix and matrix * vector can be recognized
and handled in a proper way.

Why can't you use a grammar to recognize patterns like these and take
appropriate action?


I solved this kind of problem by tagging the various types in traits structs and then embedding these traits in the transforms for the various operations.

Here are examples of my expression, grammar, and binary function definitions:

https://github.com/brandon-kohn/Geometrix/blob/master/geometrix/algebra/expression.hpp

https://github.com/brandon-kohn/Geometrix/blob/master/geometrix/algebra/grammar.hpp

https://github.com/brandon-kohn/Geometrix/blob/master/geometrix/algebra/binary_functions.hpp

I'm not sure if this is the best way to do these, but it does work.

Cheers,

Brandon

_______________________________________________
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto

Reply via email to