Introduce StringBuilder utility around raw_string_ostream

Alp Toker alp at
Wed Jun 11 22:01:06 PDT 2014

On 12/06/2014 07:41, David Blaikie wrote:
> (would find this a little easier to review if it were in Phab)
> One off-the-cuff thought: If it's not already documented, you might
> want to put a comment in raw_string_ostream's ctor that declares that
> it /really shouldn't/ touch the string (since you're passing in an
> object in the derived class that won't itself be constructed until
> after the raw_string_ostream's ctor has finished). Or, better yet, if
> there's a way to build a raw_string_ostream without a string, then
> attach it later (in the constructor of StringBuilder) that might be
> good.

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.)

> (insert various bikeshedding about the name - though I'm not really
> sure raw_ostream ever needed to adopt the C++ standard library naming
> convention in the first place, but I haven't looked closely)

So, I thought about that..

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.

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.


> On Wed, Jun 11, 2014 at 9:25 PM, Alp Toker <alp at> wrote:
>> Replaces the pattern:
>>    std::string buf;
>>    raw_string_ostream os(buf);
>>    ...
>>    os.flush();
>>    use(buf);
>> with:
>>    StringBuilder os;
>>    ...
>>    use (os.str());
>> Benefits:
>>   * Provides an inherently safe and opaque interface for building std::string
>> instances
>>   * Opens up the possibility of changing the underlying storage in future.
>> Patch also converts various uses, some of which were accessing the storage
>> without flushing.
>> Alp.
>> --
>> the browser experts
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at

the browser experts

More information about the llvm-commits mailing list