On 01/30/2013 07:55 AM, monarch_dodra wrote:
On Tuesday, 29 January 2013 at 22:44:35 UTC, Robert Schadek wrote:
On 01/29/2013 09:20 PM, monarch_dodra wrote:
3. Nitpick: Don't use parenthesis for single arg templates:
No: "Deque!(int)"
yes: "Deque!int"
May I ask why? Both are correct after all. Or is it just the
preferred style?
It's just style, and a nitpick. Feel free to ignore it.
5. Users expect "opSlice()" to produce an actual range. You are
using it to deep copy the deck. This goes against your comment in
regards to slicing an iterator. Just have your "opSlice()" do the
same as what "range()" does, and get rid of "range()". This is the
usage I'd expect:
//----
Deque!int de = ... ;
Iterator!int it = de[];
writeln(it);
//----
I submitted a bug report for sort recently (9091 became 8368).
monarchdodra said (and pointed to source) that opSlice should return
the same type in respect to the called object.
Yes, 9071. I remember it quite well, and it was the first thing that
came to mind the instant I saw your your code.
What I said is that for a *range* to offer correct *hasSlicing*
primitive, then the "opSlice(size_t, size_t)" primitive must return
the same type.
Deque is not a range though, Iterator is, and we're talking about the
primitive "opSlice()"
Again: this is a Container vs Range issue.
For example, built-in arrays also have this scheme.
//----
//statarr is a static array. A container. statarr is NOT a range.
int[5] statarr = [0, 1, 2, 3, 4];
//dynarrX are ranges extracted from their container
int[] dynarr1 = statarr[];
int[] dynarr2 = statarr[1 .. 3];
//----
As you can see, "int[]" != "int[5]"
I see your point.