flatten method

int flatten(
  1. int x, [
  2. int y = -1,
  3. int z = -1,
  4. int w = -1,
])

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;
}