| // 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; | |
| } | |
| } |