Failed to sort range

Sergei Nosov sergei.nosov at gmail.com
Tue May 28 11:19:00 PDT 2013


Thx, Ali!

> 1) First, an observation: This Array design conflates the 
> concepts of container and range. If there are actual elements 
> that are being stored (as opposed to elements being generated), 
> it is better tha a range merely provides access to those 
> elements. popFront should consume the range, not the container. 
> (Unless it is some special type of range with the 
> responsibility of removing elements from the container.)

I'm not sure I understand this correctly. Do you mean it's a good 
idea to separate storage and access (via range) to the container? 
Like std.container's containers (heh) have nested Range struct?

> 2) As a minor comment, "back" usually means the last element 
> but your back_ has the meaning of one-past-the-last element.

Yeah, that's probably a not-so-good name.

> 3) You have to rethink the indexing as well. opIndex indexes 
> directly on vec_:
>
>     ref T opIndex(size_t idx) {
>         return vec_[idx];
>     }
>
> However, we may be on a slice which has already been sliced 
> before (as is the case in quick sort, which 
> SwapStrategy.unstable uses). So, I think opIndex should add 
> front_ to idx:
>
>     ref T opIndex(size_t idx) {
>         return vec_[front_ + idx];
>     }
>
> It is a start but still not the solution. Sorry... :/

That's obviously a bug, thanks. But, yeah, not the last one =) I 
updated the gist. And also, replaced the malloc call with new. 
The behavior is the same.



More information about the Digitalmars-d-learn mailing list