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.