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