flatten method
Flattens (x, y, z, w) into a list index.
Implementation
int flatten(int x, [int y = -1, int z = -1, int w = -1]) {
final tx = this.x;
final ty = this.y;
final tz = this.z;
final tw = this.w;
var i = x;
if (x < 0 || x >= tx) {
throw ArgumentError.value(x, 'x');
}
if (y == -1) {
if (ty != 0) {
throw ArgumentError.value(y, 'y');
}
if (z != -1) {
throw ArgumentError.value(z, 'z');
}
if (w != -1) {
throw ArgumentError.value(w, 'w');
}
return i;
}
if (y < 0 || y >= ty) {
throw ArgumentError.value(y, 'y');
}
i += tx * y;
if (z == -1) {
if (tz != 0) {
throw ArgumentError.value(z, 'z');
}
if (w != -1) {
throw ArgumentError.value(w, 'w');
}
return i;
}
if (z < 0 || z >= tz) {
throw ArgumentError.value(z, 'z');
}
i += tx * ty * z;
if (w == -1) {
if (tw != 0) {
throw ArgumentError.value(w, 'w');
}
return i;
}
if (w < 0 || w >= tw) {
throw ArgumentError.value(w, 'w');
}
i += tx * ty * tz * w;
return i;
}