On 5/29/2012 1:44 AM, Karsten Ahnert wrote: > I have an arithmetic expression template where multiplication is > commutative. Is there an easy way to order a chain of multiplications > such that terminals with values (like proto::terminal< double >) appear > at the beginning? For example that > > arg1 * arg1 * 1.5 * arg1 > > will be transformed to > > 1.5 * arg1 * arg1 * arg1 > > ? > > I can imagine some complicated algorithms swapping expressions and child > expressions but I wonder if there is a simpler way.
There is no clever built-in Proto algorithm for commutative transformations like this, I'm afraid. I was going to suggest flattening to a fusion vector and using fusion sort, but I see there is no fusion sort! :-( Nevertheless, that seems like a promising direction to me. Once you have the sorted vector, you should(?) be able to use fusion::fold to build the correct proto tree from it. -- Eric Niebler BoostPro Computing http://www.boostpro.com _______________________________________________ proto mailing list proto@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/proto