Is there something like a consuming take?

berni someone at somewhere.com
Sat Jul 6 14:40:23 UTC 2019


A small example showing this strange behaviour:

>import std.stdio;
>import std.algorithm.iteration;
>import std.range;
>
>enum BUFFER_SIZE = 1024;
>
>void main(string[] args)
>{
>    auto a = (new File(args[1]))
>        .byChunk(BUFFER_SIZE)
>        .joiner;
>
>    writeln(a.take(5));
>    writeln(a);
>}

Using a file, containing the bytes 1 to 10 I get:

>[ 1, 2, 3, 4, 5 ]
>[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

take does not consume.

When I now change BUFFER_SIZE to 2 I get:

>[ 1, 2, 3, 4, 5 ]
>[ 5, 6, 7, 8, 9, 10 ]

Now the first two buffers have been consumend and the third ([5, 
6]) not.

Feels like a bug in Phobos. But maybe I do not understand, what's 
happening and this is correct behaviour. Can anyone explain or 
confirm, that this is a bug?


More information about the Digitalmars-d-learn mailing list