Performance of map!()

Chris via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 24 03:22:04 PDT 2015


I replaced a range that was similar to map with map and the 
performance dropped by ~0.5 msec.

The range I used previously is based on Adam's D Cookbook. It is 
consistently faster than map.

private struct Transformer(alias agent, R) if (isInputRange!R) {

   private R r;
   this (R r) {
     this.r = r;
   }

   static if (isInfinite!R) {
     enum bool empty = false;
   }
   else {
     @property bool empty() {
       return r.empty;
     }
   }

   void popFront() {
     r.popFront();

   }
   @property ref auto front() {
     return agent(r.front);
   }

   static if (isForwardRange!R) {
     @property auto save() {
       return Transformer!(agent, R)(r.save);
     }
   }

   static if (isBidirectionalRange!R) {
     @property auto back() {
       return agent(r.back);
     }
     void popBack() {
       r.popBack();
     }
   }

   static if (isRandomAccessRange!R) {
     auto opIndex(size_t i) {
       return agent(r[i]);
     }
   }

   static if (hasLength!R) {
     @property auto length() {
       return r.length;
     }
   }
}



More information about the Digitalmars-d mailing list