Re: [Boost-users] extraction invariants from intensive-loop based on template parameters

----- Original Message ----- From: "Matthieu Brucher" <matthieu.brucher@gmail.com> To: boost-users@lists.boost.org Subject: Re: [Boost-users] extraction invariants from intensive-loop based on template parameters Date: Thu, 19 Feb 2009 14:17:20 +0100
Hi,
The compiler is smart enough to prune an if condition if it knows that the value is always false. So if you add an if(!Lower::IsConstant) before and after your loop, you don't have to rewrite it.
Matthieu
2009/2/19 Hicham Mouline <hicham@mouline.org>:
Hello,
I have an algorithm like:
template <typename Upper, typename Lower> class X {
static void f() { .... for (size_t n=0; n<=N; ++n) { // process for j=0 at every n if Lower::IsConstant is false for (size_t j=1; j<=J-1; ++j) { } // process for j=J at every n if Upper::IsConstant is false } .... }
So I extracted the double for loop in a separate wrapper class and I verbosely wrote 4 specializations with template args begin bool :
<true, true> <false, true> <true, false> <false, false>
for e.g. for <true, true>
// process for j=0 once for (size_t n=0; n<=N; ++n) { for (size_t j=1; j<=J-1; ++j) { } } // process for j=J once
Any advice? Is there a better way than writing explicitly the tmpl specializations? Boost.PP maybe?
rds, _______________________________________________
I've just measured with VS2005, g++4.0 and intel11. At least these 3 compilers are smart enough. Thanks,
participants (1)
-
Hicham Mouline