zip4<T1, T2, T3, T4> function

Iterable<Tuple4<T1, T2, T3, T4>> zip4<T1, T2, T3, T4>(
  1. Iterable<T1> it1,
  2. Iterable<T2> it2,
  3. Iterable<T3> it3,
  4. Iterable<T4> it4,
)

Implementation

Iterable<Tuple4<T1, T2, T3, T4>> zip4<T1, T2, T3, T4>(Iterable<T1> it1,
    Iterable<T2> it2, Iterable<T3> it3, Iterable<T4> it4) sync* {
  final iter1 = it1.iterator;
  final iter2 = it2.iterator;
  final iter3 = it3.iterator;
  final iter4 = it4.iterator;
  var keep_running = true;
  while (keep_running) {
    final move1 = iter1.moveNext();
    final move2 = iter2.moveNext();
    final move3 = iter3.moveNext();
    final move4 = iter4.moveNext();
    final all_true = move1 && move2 && move3 && move4;
    final all_false = !move1 && !move2 && !move3 && !move4;
    assert((all_true || all_false), 'iteration length must be equal');
    if (all_true) {
      yield Tuple4<T1, T2, T3, T4>(
          iter1.current, iter2.current, iter3.current, iter4.current);
    }
    keep_running = all_true;
  }
}