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.

Reply via email to