<div dir="rtl"><div dir="ltr">This looks like a very useful class. It should work for the similar SmallString pattern, right?</div><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr">  SmallString<256> OutName;</div>

<div dir="ltr">  llvm::raw_svector_ostream Out(OutName);</div><div dir="ltr">  cast<ItaniumMangleContext>(CGM.getCXXABI().getMangleContext()).mangleCXXVTT(RD, Out);</div><div dir="ltr">  Out.flush(); </div><div dir="ltr">

<div dir="ltr">  StringRef Name = OutName.str();</div><div><br></div></div><div>-></div><div><br></div><div>  StringBuilder Out;</div><div dir="ltr"><div dir="ltr">  cast<ItaniumMangleContext>(CGM.getCXXABI().getMangleContext()).mangleCXXVTT(RD, Out);</div>

<div><div dir="ltr">  StringRef Name = Out.str();</div></div><div><br></div></div><div>Yaron<br></div><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div dir="ltr">2014-06-12 8:01 GMT+03:00 Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span>:</div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
On 12/06/2014 07:41, David Blaikie wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(would find this a little easier to review if it were in Phab)<br>
<br>
One off-the-cuff thought: If it's not already documented, you might<br>
want to put a comment in raw_string_ostream's ctor that declares that<br>
it /really shouldn't/ touch the string (since you're passing in an<br>
object in the derived class that won't itself be constructed until<br>
after the raw_string_ostream's ctor has finished). Or, better yet, if<br>
there's a way to build a raw_string_ostream without a string, then<br>
attach it later (in the constructor of StringBuilder) that might be<br>
good.<br>
</blockquote>
<br>
Sure, I'll add a comment. (But I don't think it's a big concern to justify any major shuffle -- the ctor is right there inline to see a few lines above, and it seems unlikely a stream adapter would ever touch its storage unless written to.)<br>


<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
(insert various bikeshedding about the name - though I'm not really<br>
sure raw_ostream ever needed to adopt the C++ standard library naming<br>
convention in the first place, but I haven't looked closely)<br>
</blockquote>
<br>
So, I thought about that..<br>
<br>
Having tried raw_string_builder_ostream, string_builder_ostream, raw_string_builder, I ended up with StringBuilder as the only one that looked beautiful in use.<br>
<br>
Hard to say why, but it's probably because it has a dual role as storage and streaming interface unlike the ostream adapter classes, making the distinction significant.<br>
<br>
Alp.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On Wed, Jun 11, 2014 at 9:25 PM, Alp Toker <<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Replaces the pattern:<br>
<br>
   std::string buf;<br>
   raw_string_ostream os(buf);<br>
   ...<br>
   os.flush();<br>
   use(buf);<br>
<br>
with:<br>
   StringBuilder os;<br>
   ...<br>
   use (os.str());<br>
<br>
Benefits:<br>
<br>
  * Provides an inherently safe and opaque interface for building std::string<br>
instances<br>
  * Opens up the possibility of changing the underlying storage in future.<br>
<br>
Patch also converts various uses, some of which were accessing the storage<br>
without flushing.<br>
<br>
Alp.<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
<a href="http://www.nuanti.com" target="_blank">http://www.nuanti.com</a><br>
the browser experts<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
<br>
</font></span></blockquote></blockquote><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
<a href="http://www.nuanti.com" target="_blank">http://www.nuanti.com</a><br>
the browser experts<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</font></span></blockquote></div><br></div>