On Wednesday, 7 November 2012 at 10:18:51 UTC, Jonathan M Davis
wrote:
And I find the whole length vs capacity bit in Array
highly confusing, because it looks like the length of the
payload is used for
length, when I would have expected the length of the payload to
be the
capacity and for there to be a separate length for the actual
number of
elements.
I was confused the first time too, but the payload's "slice" in
only as big as the elements it is holding, and it "knows" there
is more room after the slice, up to _capacity.
This keeps things relatively simpler for most of Array's
implementation, and keeps all the complexity inside the Payload
structure.
So yeah, their semantic is what you'd expect actually.
On Wednesday, 7 November 2012 at 10:18:51 UTC, Jonathan M Davis
wrote:
By the way, monarch_dodra, since you've been messing around
with Array
recently, I would point out that it looks like setting the
length doesn't work
properly if you set it greater than the current length, let
alone greater than
the current capacity. _capacity is not adjusted if newLength
is greater than
it, and no calls to GC.removeRange or GC.addRange are made, so
it doesn't look
like newly allocated memory is being tracked by the GC like it
should if
length is allocating it.
I kind of wanted to stay out of that part of the code, but good
catch. This creates an assertion error:
--------
auto a = Array!int();
a.length = 5;
a.insertBack(1);
--------
Because at the point of insert back, length > capacity...
I'll correct the issues anyways. Good point about the
GC.removeRange a,d GC.addRange too.