blob: 0d6088a9796dc95e6b79b88c68b92964f2c07400 [file] [log] [blame]
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// The iterator for `CombinedIterableView` and `CombinedListView`.
///
/// Moves through each iterable's iterator in sequence.
class CombinedIterator<T> implements Iterator<T> {
/// The iterators that this combines, or `null` if done iterating.
///
/// Because this comes from a call to [Iterable.map], it's lazy and will
/// avoid instantiating unnecessary iterators.
Iterator<Iterator<T>>? _iterators;
CombinedIterator(Iterator<Iterator<T>> iterators) : _iterators = iterators {
if (!iterators.moveNext()) _iterators = null;
}
@override
T get current {
var iterators = _iterators;
if (iterators != null) return iterators.current.current;
return null as T;
}
@override
bool moveNext() {
var iterators = _iterators;
if (iterators != null) {
do {
if (iterators.current.moveNext()) {
return true;
}
} while (iterators.moveNext());
_iterators = null;
}
return false;
}
}