On Saturday, 8 April 2017 at 11:24:02 UTC, Nicholas Wilson wrote:

The ':' means that it applies to everything that follows it, so while it doesn't matters in this example if you had
pragma( inline, true ):
int kroundup32( int x) { ... }

auto someVeryLargeFunction( Args args)
{
    // ...
}

and then you used someVeryLargeFunction in a bunch of places then that would cause a lot of binary bloat.

That's big difference! Thank you for pointing this out for me.


if you want the the function to affect the variable use a 'ref' as in

 void kroundup32(T)(ref T x) {
     pragma(inline, true);
     --(x);
     (x)|=(x)>>1;
     (x)|=(x)>>2;
     (x)|=(x)>>4;
     (x)|=(x)>>8;
     (x)|=(x)>>16;
     return ++(x);
 }

 int main(){
   int num = 31;
   writeln("Before: ",num); // 31
   kroundup32(num);
   writeln("After: ", num);   //32
   return 0;
 }

is it a good idea? I would not think it is necessary.

As an aside the C version has parentheses around the "x" because it is a macro and it is substituted as text not symbolically, they are not needed in D.

This thing now is clear and settled while I try to navigate my mind around many new things. Really appreciate your help, Nicolas.


Reply via email to