Interest in std.algorithm.joiner?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Jul 27 12:04:12 PDT 2010


Steven Schveighoffer wrote:
> On Tue, 27 Jul 2010 14:27:20 -0400, Andrei Alexandrescu 
> <SeeWebsiteForEmail at erdani.org> wrote:
> 
>> Steven Schveighoffer wrote:
>>> On Tue, 27 Jul 2010 14:12:34 -0400, Andrei Alexandrescu 
>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>
>>>> Steven Schveighoffer wrote:
>>>>> On Tue, 27 Jul 2010 11:21:08 -0400, Andrei Alexandrescu 
>>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>>
>>>>>> We have std.algorithm.splitter which splits a range into 
>>>>>> components without allocating a new array.
>>>>>>
>>>>>> Is there an interest in joiner(), the corresponding function for 
>>>>>> join() that joins elements of a range in conjunction with a 
>>>>>> separator without allocating a new array?
>>>>>  How do you do that?
>>>>
>>>> Well joiner would offer an input or in best case a forward range 
>>>> with the range primitives.
>>>  How do you store all the ranges you joined for future reference 
>>> without creating an array of those ranges?  With splitter, it's 
>>> straightforward, there's one range to store.
>>>  Or am I missing something?
>>
>> It's just one range and one separator.
>>
>> auto joined = joiner(["Mary", "has"], "\t");
>> assert(joined.front == 'M');
> 
> Ah, Ok.  I was under the impression that the input was a bunch of 
> individual ranges to join.
> 
> So basically, you are pushing the "range of ranges" allocation onto the 
> user.  That works.
> 
> That is quite an interesting problem, esp if you intend to keep it lazy 
> and forward things like random access to the joined range.  Or output 
> the result to writeln.  Hey, could it potentially be used as a formatter 
> to writefln?

As of the upcoming release, I changed write() and writeln() to fully 
support input ranges.

Andrei


More information about the Digitalmars-d mailing list