| Index: packages/quiver/lib/src/iterables/generating_iterable.dart
|
| diff --git a/packages/quiver/lib/src/iterables/generating_iterable.dart b/packages/quiver/lib/src/iterables/generating_iterable.dart
|
| index d11d19823d92e94cade3f1925a88fec48bb464bc..7db709715cec4981d7e4069d7194858242653351 100644
|
| --- a/packages/quiver/lib/src/iterables/generating_iterable.dart
|
| +++ b/packages/quiver/lib/src/iterables/generating_iterable.dart
|
| @@ -14,55 +14,51 @@
|
|
|
| part of quiver.iterables;
|
|
|
| +typedef T _Initial<T>();
|
| +typedef T _Next<T>(T value);
|
| +
|
| Iterable generate(initial(), next(o)) => new GeneratingIterable(initial, next);
|
|
|
| -/**
|
| - * An Iterable who's first value is [object] and who's subsequent values are
|
| - * generated by passing the current value to the [next] function.
|
| - *
|
| - * The class is useful for creating lazy iterables from object hierarchies and
|
| - * graphs.
|
| - *
|
| - * It's important that for the given initial value and next function that the
|
| - * sequence of items eventually terminates. Otherwise calling methods that
|
| - * expect a finite sequence, like `length` or `last`, will cause an infinite
|
| - * loop.
|
| - *
|
| - * Example:
|
| - *
|
| - * class Node {
|
| - * Node parent;
|
| - *
|
| - * /**
|
| - * * An iterable of node and all ancestors up to the root.
|
| - * */
|
| - * Iterable<Node> ancestors =
|
| - * new GeneratingIterable<Node>(() => this, (n) => n.parent);
|
| - *
|
| - * /**
|
| - * * An iterable of the root and the path of nodes to this. The reverse
|
| - * * of ancestors.
|
| - * */
|
| - * Iterable<Node> path = ancestors.toList().reversed();
|
| - * }
|
| - *
|
| - */
|
| +/// An Iterable who's first value is [object] and who's subsequent values are
|
| +/// generated by passing the current value to the [next] function.
|
| +///
|
| +/// The class is useful for creating lazy iterables from object hierarchies and
|
| +/// graphs.
|
| +///
|
| +/// It's important that for the given initial value and next function that the
|
| +/// sequence of items eventually terminates. Otherwise calling methods that
|
| +/// expect a finite sequence, like `length` or `last`, will cause an infinite
|
| +/// loop.
|
| +///
|
| +/// Example:
|
| +///
|
| +/// class Node {
|
| +/// Node parent;
|
| +///
|
| +/// /// An iterable of node and all ancestors up to the root.
|
| +/// Iterable<Node> ancestors =
|
| +/// new GeneratingIterable<Node>(() => this, (n) => n.parent);
|
| +///
|
| +/// /// An iterable of the root and the path of nodes to this. The
|
| +/// /// reverse of ancestors.
|
| +/// Iterable<Node> path = ancestors.toList().reversed();
|
| +/// }
|
| class GeneratingIterable<T> extends IterableBase<T> {
|
| - final initial;
|
| - final next;
|
| + final _Initial<T> initial;
|
| + final _Next<T> next;
|
|
|
| - GeneratingIterable(T this.initial(), T this.next(T o));
|
| + GeneratingIterable(this.initial, this.next);
|
|
|
| @override
|
| Iterator<T> get iterator => new _GeneratingIterator(initial(), next);
|
| }
|
|
|
| class _GeneratingIterator<T> implements Iterator<T> {
|
| - final next;
|
| + final _Next<T> next;
|
| T object;
|
| bool started = false;
|
|
|
| - _GeneratingIterator(T this.object, T this.next(T o));
|
| + _GeneratingIterator(T this.object, this.next);
|
|
|
| @override
|
| T get current => started ? object : null;
|
|
|