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