Make std.container.Array an output range
monarch_dodra via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 5 09:21:20 PDT 2014
On Thursday, 5 June 2014 at 13:51:35 UTC, Rene Zwanenburg wrote:
> I depend heavily on RAII in a project I'm working on. Since
> structs in dynamic arrays never have their destructors called
> I'm using Array!T instead. A pattern that comes up often is
> that I have some input range of T's which need to be stored in
> a member Array!T. However Array is not an output range so I
> can't use
>
> inputRange.copy(someArray);
>
> I understand the difference between a container and a range
> iterating over that container. However I do think a container
> is an output range.
>
> 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;
Well, one issue is that for a "Range", "put" really just means
overwrite the front element, and pop it. So...
Array!int myArray = ...:
copy([1, 2, 3], myArray); //(1)
copy([1, 2, 3], myArray[]); //(2)
In this situation, (1) and (2) would have different meaning.
This whole mess comes from "Writeable InputRange" being
considered an OutputRange... Arguably, an OutputRange should be
nothing more than a "sink", which an InputRange is not.
More information about the Digitalmars-d
mailing list