Adding a read primitive to ranges

Freddy via Digitalmars-d digitalmars-d at puremagic.com
Mon May 4 17:50:43 PDT 2015


On Monday, 4 May 2015 at 23:20:57 UTC, Alex Parrill wrote:
> On Monday, 4 May 2015 at 19:23:08 UTC, Freddy wrote:
>> On Monday, 4 May 2015 at 15:16:25 UTC, Alex Parrill wrote:
>>
>> The ploblem is that all the functions in 
>> std.range,std.algorithm and many other wrappers would ignore 
>> byChucks and produce much slower code.
>
> How so? `file.byChunks(4096).joiner` is a range that acts as if 
> you read each byte out of the file one at a time, but actually 
> reads them in 4096-byte buffers. It's still compatible with all 
> of the range and algorithm functions.

Reading an arbitrary number of data after being wrapped.
For example
----
void func(R)(R range){//expects range of strings
     string[] elms=range.read(5);
     string[] elms2=range.read(9);
     /++..++/
}


void caller(){
     auto file=...;//unbuffered file
     file.map!(a=>a.to!string).func();
}
----
Using byChucks would cause much more reallocation.


More information about the Digitalmars-d mailing list