Phobos Wish List/Next in Review Queue?
so
so at so.so
Mon Nov 28 05:18:38 PST 2011
On Mon, 28 Nov 2011 14:54:07 +0200, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Sat, 26 Nov 2011 16:39:38 -0500, Walter Bright
> <newshound2 at digitalmars.com> wrote:
>
>> On 11/26/2011 5:46 AM, Steven Schveighoffer wrote:
>>> Ranges are not good for reading N bytes from a file
>>> descriptor.
>>
>> Why not? Isn't that exactly what a range is supposed to be good for?
>
> A range has a specific interface:
>
> T front()
> void popFront()
> bool empty()
>
> An input stream has a specific interface:
>
> size_t read(ubyte[] buffer)
> or alternatively:
> ubyte[] read(ubyte[] buffer)
>
> How does one map that interface into an input range? What is T? I
> remember proposals where there was some extra function setFrontBytes, or
> an additional parameter to front, that allows you to set the number of
> bytes to read. This seems like trying to fit a square peg in a round
> hole.
>
> Now, a range fits very well on top of an input stream with a given
> context. That context defines *what* front() is going to return. For
> example, the next line of text.
>
> But you still need a well-designed buffered stream interface that a
> range can use to do its work from. Streams are not going to be the main
> interface for most users, but they will be the tools that range
> developers use to create easily iterated streams. And when the user
> wants to read data from a file that has no well-defined T that you can
> define a range for, the stream should provide all the tools necessary to
> read that data.
>
> Now, an output stream *does* fit quite well as a range, since an output
> range's single put method coincides with an ouptut stream's write method.
>
> -Steve
I was absent from range discussions, probably it has been said, sorry.
A ### range means, a structure which implements:
T front()
void popFront()
bool empty()
This matches with:
T peek()
void seek(1)
bool eof()
T is ubyte.
I believe we are asking the wrong questions, first question should be why
someone would like this simple range interface (3 functions) for streams?
Any use? Yes with these 3 we can do quite many things, not optimal but we
can. For the real use we need a new range.
T[] get(size_t)
bool put(size_t, T[])
bool seek(size_t)
...
Don't we need a range like this in any case? I doubt we can do much
without it.
More information about the Digitalmars-d
mailing list