Deque impl.

Robert burner Schadek realburner at gmx.de
Wed Jan 30 00:57:30 PST 2013


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.


More information about the Digitalmars-d mailing list