color lib

Nicholas Wilson via Digitalmars-d digitalmars-d at puremagic.com
Sat Oct 8 21:03:27 PDT 2016


On Saturday, 8 October 2016 at 13:06:42 UTC, Manu wrote:
> Oh no, you too? >_<
> Incidentally, have you had a geez over the core API? An 
> efficient API
> will emerge when we work out how to work batched operations into
> ranges...

How far would `r.inBatchesOf!(N)` go in terms of compiler 
optimisations (e.g. vectorisation) if N is a power of 2?

auto inBatchesOf(size_t N,R)(R r) if(N!=0 &&isInputRange!R &&  
hasLength!R)
{
     struct InBatchesOfN
     {
         R r;
         ElementType!(R)[N] batch;
         this(R _r)
         {
              assert(_r.length % N ==0);// could have overloads 
where undefined elements == ElementType!(R).init
              r = _r;
              foreach( i; 0..N)
              {
                   batch[i] = r.front;
                   r.popFront;
              }
         }

         bool empty() { return r.empty; }
         auto front { return batch; }
         void popFront()
         {
              foreach( i; 0..N)
              {
                   batch[i] = r.front;
                   r.popFront;
              }
         }
     }

     return InBatchesOfN(r);
}



More information about the Digitalmars-d mailing list