On Thursday, 5 June 2014 at 16:29:09 UTC, monarch_dodra wrote:
On Thursday, 5 June 2014 at 16:21:21 UTC, monarch_dodra wrote:
Well, one issue is that for a "Range", "put" really just means overwrite the front element, and pop it. So...

I see. I wasn't aware of that.

That said, having an explicit OutputRange adapator:

struct BackInserter(Container)
{
    Container* c;
    void put(T)(ref T t)
    {
        c.insertBack(t);
    }
}
auto backInserter(Container)(ref Container c)
{
    return BackInserter!Container(&c);
}


Useage:
inputRange.copy(someArray.backInserter());

There: Clear and un-ambiguous.

Agreed. This is much nicer.

Should I file an enhancement request or is there something fundamentally wrong with this idea? For Array it should be as simple as adding

alias doPut = insertBack;

doPut is not a range primitive. Implementing "doPut" on your container should have no effect. If it does, it is a bug and will *quickly* be fixed. Don't count on it working.

The correct primitive is "put".

Thanks. I skimmed the documentation for std.range.put a bit too fast :). Reading it more carefully I see it also mentions your first point regarding front + popFront.

Reply via email to