On Sun, 22 May 2011 21:39:55 -0400, Vladimir Panteleev <[email protected]> wrote:
On Mon, 23 May 2011 04:14:32 +0300, Robert Jacques <[email protected]> wrote:

On Sun, 22 May 2011 19:30:58 -0400, Vladimir Panteleev <[email protected]> wrote:

On Mon, 23 May 2011 02:15:49 +0300, Robert Jacques <[email protected]> wrote:

As for performance, using appender is never slower than ~=, as it uses essentially the same code.

I don't think using ~= when appending a string to a string will validate the UTF. Will it?


For string ~= string, appender calls string[] = string, which does a memcopy, iirc.

Right, so my complexity rant was BS, but appender will still validate UTF on every append, unlike ~=. Isn't that a bug?


Appender doesn't validate UTF when the character widths are the same.
For example,

string test = "\&lt;" ~ "\&gt;" ~ "\&Alpha;" ~ "\&Beta;" ~ "\&Gamma;"~ "\&spades;" ~ "\&diams;"~ "\U0001D11E";
    Appender!string app;
    foreach(i;0..ds.length-1) {
        app.put(test[i..$]);
    }

Runs fine, even though at times test[i..$] is an invalid string, because the type of test and appender are both strings. However, if you change Appender to a wstring, then encoding and decoding occur and those routines always validate. Hence, if app is a Appender!wstring, it will throw a UTF validation error.

Reply via email to