On Thu, 27 Mar 2014 17:24:11 -0400, Walter Bright <newshou...@digitalmars.com> wrote:

On 3/27/2014 2:13 PM, Steven Schveighoffer wrote:
Note that a stream makes a terrible range, simply because of what you say -- reading is destructive, and determining emptiness is dependent on reading. You need a buffered stream to make a good range, and then the logic becomes much
more straightforward.

The range becomes the one element buffer in this case. It is completely workable.


A 1 byte buffered stream? If it's performance you are looking for, you will not find it there.

The range protocol is designed to work with streams. It's a giant fail if they do not, or if you want to create a separate, non-range universe to deal with streams.

Ranges work well on top of buffered streams, but not AS streams.

Even a single byte buffer is not enough, you need a bool to indicate the stream
is done.

Right. But empty for a stream still has to read. Just follow the protocol, and the range will work, even with streams.


A stream requires one primitive -- read. In one function call, you get the data you want, you can tell if it's empty, and the stream object does not need to concern itself with projecting a cached element. Adding range primitives on top of a stream does not make sense.

-Steve

Reply via email to