Introduce StringBuilder utility around raw_string_ostream
Alp Toker
alp at nuanti.com
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.
Alp.
>
> On Wed, Jun 11, 2014 at 9:25 PM, Alp Toker <alp at nuanti.com> 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.
>>
>> --
>> http://www.nuanti.com
>> the browser experts
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
--
http://www.nuanti.com
the browser experts
More information about the llvm-commits
mailing list