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