blob: 4e93a43e7ddced9ac5ba00592ace4864b814dd60 [file] [log] [blame]
// Copyright (c) 2023, 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.
import 'package:meta/meta.dart' show internal;
import '../core_bindings.dart';
import '../jobject.dart';
extension JIteratorToAdapter<E extends JObject?> on JIterator<E> {
/// Wraps this [JIterator] in an adapter that implements an [Iterator].
Iterator<E> asDart() => JIteratorAdapter<E>(this);
}
@internal
final class JIteratorAdapter<E extends JObject?> implements Iterator<E> {
final JIterator<E?> _itr;
E? _current;
JIteratorAdapter(this._itr);
@override
E get current => _current as E;
@override
@pragma('vm:prefer-inline')
bool moveNext() {
if (!_itr.hasNext()) {
return false;
}
_current = _itr.next() as E;
return true;
}
}