The constructor uses arr.capacity to determine how much it can append.

assumeSafeAppend will ensure that arr.capacity is as large as possible, so yes, 
calling before creating the Appender will maximize the capacity, regardless of 
whether it will stomp or not.

One thing that Appender will do, which is bad, but I'm not sure we need to 
care, 
it can be given a string literal, and then try to write over the string literal 
like this:

auto app = appender("hello");
// app.put('c'); // this would be ok
app.clear();
app.put('c'); // segfault on Linux

I'm not sure how to get around this.  I thought of checking the heap to see if 
it owns the pointer, but then you disallow useful things like using a 
stack-allocated buffer.  I think this case may be uncommon enough to not care.

-Steve

>
>From: David Simcha <[email protected]>
>To: Discuss the phobos library for D <[email protected]>
>Sent: Thu, August 26, 2010 1:10:31 PM
>Subject: Re: [phobos] phobos commit, revision 1930
>
>Nice work.  One small question/possible feature request, though:  Will calling 
>assumeSafeAppend() on an array before constructing an Appender using it 
>prevent 

>it from being reallocated on the first append?  If not, can Appender have some 
>kind of assumeSafeAppend workaround in it?


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

Reply via email to