On 07/05/2010 09:10 AM, Ellery Newcomer wrote:
On 07/05/2010 12:37 AM, Andrei Alexandrescu wrote:
- Input streams have the read primitive. What is wrong with an input
range of ubyte[]? Then accessing front() gives you a buffer and
popFront reads in a new buffer.
How do you handle heterogeneous reads? e.g.

ubyte[] x = new ubyte[](4);
inp.read(x);
ubyte[] y = new ubyte[](100);
inp.read(y);

Good point. With ByChunk you only get to set the size once at construction time. A natural extension of that would be to define a property bufferSize that you can assign before calling popFront. That would allow code like:

inp.bufferSize = 4;
inp.popFront();
process(inp.front);
inp.bufferSize = 100;
inp.popFront();
process(inp.front);

I reckon that just calling read() with different lengths is a bit more appealing. Also if you need to save the data you need to call inp.front.dup which makes for an extra copy. The question is how often you need to do all that versus just getting whatever data is available.

- What's the purpose of StreamWrapper?

Having input stream types which aren't runtime type compatible is kind
of a sucky situation. That's what the interfaces are for, and that's
what the wrapper provides for e.g. input streams which are structs.

Makes sense. Probably with time we'll need to add interfaces for all kinds of ranges.

For wrapping structs in general, I hope we could have a more general version similar to BlackHole and WhiteHole - automatic wrapping. Consider:

struct A {
    this(int);
    void foo();
    int bar(string);
}

alias Classify!A ClassA;

ClassA is as if somebody sat down and wrote the following class by hand:

class ClassA {
    private A payload;
    this(int x) { payload = A(x); }
    void foo() { return payload.foo(); }
    int bar(string x) { return payload.bar(x); }
}

Things get more complicated with functions that receive or return type A, properties, qualifiers etc. I think Classify would be an excellent test of D's introspection capabilities, in addition to being useful in practice.


Andrei
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to