Method template optimization that works in C++, but not very well D

Ali Çehreli acehreli at yahoo.com
Thu Feb 20 14:36:57 PST 2014


On 02/19/2014 10:18 PM, Vladimir wrote:

 >> Full version my very simplified example such task:
 >> https://gist.github.com/Vladimir-Z/1a1755ce91cb0e7636b5

Notes:

* It is "process", not "proccess". :)

* isUseField is not used by proccessRowTemplate(). Removing it from the 
parameter list (and doing necessary modifications elsewhere) reduced the 
optimized time from 18ms to 15ms for me.

* Applied ^^ operator for proccessRowTemplate as well. (No effect on 
performance.)

* I liked the simple template syntax for proccessRowTemplate:

int proccessRowTemplate(size_t optionVariant)(in Row table)
{
     int sum = 0;
     foreach(size_t i; StaticRange!(Row.numberField))
     {
         static if (optionVariant & 1<<i)
         {
             sum += table.Fields[i] ^^ 2 - i;
         }
     }
     return sum;
}

Results on my system after that change:

Process table result: 142459540
Simple processing: 35 ms
Process table result: 142459540
Template processing: 15 ms

Ali



More information about the Digitalmars-d-learn mailing list