weave method

Iterable<T> weave(
  1. Iterable<T> other
)

Weaves two iterables together into a new Iterable alternating elements.

Implementation

Iterable<T> weave(Iterable<T> other) sync* {
  bool switcher = true;
  Iterator<T> it1 = iterator;
  Iterator<T> it2 = other.iterator;
  bool hasNext1 = it1.moveNext();
  bool hasNext2 = it2.moveNext();

  while (hasNext1 || hasNext2) {
    if (switcher && hasNext1) {
      yield it1.current;
      hasNext1 = it1.moveNext();
    } else if (hasNext2) {
      yield it2.current;
      hasNext2 = it2.moveNext();
    } else if (hasNext1) {
      yield it1.current;
      hasNext1 = it1.moveNext();
    }
    switcher = !switcher;
  }
}