toString refactor in druntime

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 30 09:03:01 PDT 2014


On 10/30/14 11:54 AM, Kagamin wrote:
> On Thursday, 30 October 2014 at 15:32:30 UTC, Steven Schveighoffer wrote:
>> This would require sink to write the buffer before it's first call,
>> since you don't track that.
>
> That's delegated to the sink delegate.

Keep in mind, sink delegate is not a singly implemented function, it's 
implemented wherever the output is done. So it's a lot of boilerplate to 
copy around.

>
>> Wouldn't it be better to track the "used" length in buff directly so
>> write can handle that?
>
> The used length is tracked by shrinking the buff. This only shows the
> callee's perspective.

No, what I mean is:

struct Sink
{
    char[] buff;
    uint used; // buff[used..$] is what your buff used to be.
    void delegate(in char[]) sink;
    ...
}

This way, when write finds it runs out of space, first thing it does is 
sink the buff, then starts sinking the rest. In fact, you can just keep 
using buff once you sink it, to avoid future "extra calls" to sink.

Note, that this can be implemented right on top of the existing sink 
mechanism.

-Steve


More information about the Digitalmars-d mailing list