On Friday, 14 March 2014 at 19:24:21 UTC, Chris Williams wrote:

[snip]
address pointing to an array of Arrays. So with an int[2][2] array, you have a layout like:

@1000 Array(address=1016, length=2)
@1016 [Array(address=1048, length=2),Array(address=1056, length=2)]
@1048 [1,2]
@1056 [3,4]

In this particular case, the data at 1056 is directly following the data at 1048. There's no gap between them, so considering the buffer at 1048 to be a single array of 4 or two arrays of two is inconsequential. But that's no guarantee.

Actually this is guaranteed for static rectangular arrays:

http://dlang.org/arrays#static-arrays (see Rectangular Arrays)
http://wiki.dlang.org/Dense_multidimensional_arrays (Static Arrays)

This code below is safe. It is nothing more than a check for conformity followed by a memcpy:

int[] a = [1,2,3,4];
int[2][2] b = a;


I might raise a new question asking why this doesn't work as I expect:

int[2][2] b;
b=a;


Thanks for your help on this one. It has forced me to drill into the internals a bit more, which is always a good thing :)

Cheers,
ed

Reply via email to