On Monday, 11 July 2022 at 06:59:32 UTC, anonymouse wrote:
I did search for a better solution and came across...
https://tastyminerals.github.io/tasty-blog/dlang/2020/03/22/multidimensional_arrays_in_d.html

I like it!

It's been a good collaboration...

```d
import std.variant;

auto generate(T)(size_t x, size_t y) {
  T[][] result;
  ubyte[] arr = new ubyte[x * y * T.sizeof];
  size_t m = y * T.sizeof;

  foreach (i; 0 .. x) {
    size_t n = i * m;
    result ~= cast(T[])arr[n .. n + m];
  }
  return result;
}

size_t[] shape(Variant v) {
  typeof(return) dims;

  while (cast(TypeInfo_Array) v.type !is null) {
    dims ~= v.length;
    v = v[0];
  }

  if (!dims.length && v.length) {
    dims ~= v.length;
    dims ~= 0;
  }
  return dims;
}

void main() {
  foreach(x; 1..100) {
    foreach(y; 1..100) {
      auto test = Variant(generate!int(x, y));
      assert(shape(test) == [x, y]);
    }
  }
}
```

SDB@79

Reply via email to