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