blob: aa6ffa11378fc2b1ee2cc1d223724711e6a67bc5 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:math';
class ListIterator<T> {
final List<T> _list;
int _counter = 0;
ListIterator._(this._list);
factory ListIterator.from(List<T> list) => ListIterator<T>._(list);
/// Look at the next item in the list without advancing the marker.
T? peek() => _list.length > _counter ? _list[_counter] : null;
/// Look at the next item in the list and advance the marker.
T? takeNext() {
if (_counter == _list.length) return null;
_counter += 1;
return _list[_counter - 1];
}
List<T> take(int number) {
final _oldCounter = _counter;
_counter += number;
return _list.sublist(_oldCounter, min(_counter, _list.length));
}
bool get isEmpty => hasMore();
bool get isNotEmpty => !isEmpty;
bool hasMore() => hasNMore(1);
bool hasNMore(int numberMore) => _list.length - _counter >= numberMore;
}