On Saturday, 30 June 2012 at 20:06:58 UTC, Vidar Wahlberg wrote:
On Saturday, 30 June 2012 at 19:35:33 UTC, Denis Shelomovskij
wrote:
You could be interested in my answer on this thread:
http://forum.dlang.org/thread/mailman.1578.1339962782.24740.digitalmars-d-le...@puremagic.com
Thanks for the tip, that is interesting (I'm surprised I didn't
come across this post when searching for this issue earlier).
Although it seems to me that you still end up with "matrix[x,
y, z]" instead of "matrix[x][y][z]", so it will only solve one
half of the problem :)
For this particular case I'll just do the conversion from
two-dimensional to one-dimensional array programmatically and
use a "get(x, y)"-method, it's neither difficult nor will it
make the code complicated.
To have syntax m[x][y] you can create a range representing a row
that knows its parent range + start offset (equal to x *
row.length) and return it from m[x]. This way if m and m[x] are
both stored on stack (or in the same cache block) you will not
have to pay for additional indirection: to resolve m[x][y] just
calculate an index as a sum of start offset and y. You may
alternatively simply return a row, but the former approach easily
generalizes for slicing by column first (in that case you would
need to pick up appropriate syntax, probably a method call).