bufferCount method

OffsetIterator<IList<T>> bufferCount(
  1. int count, {
  2. String name = 'bufferCount',
  3. SeedCallback<T>? seed,
  4. int retention = 0,
  5. bool? cancelOnError,
  6. bool bubbleCancellation = true,
})

Converts the parent items into IList's of the given size.

Implementation

OffsetIterator<IList<T>> bufferCount(
  int count, {
  String name = 'bufferCount',
  SeedCallback<T>? seed,
  int retention = 0,
  bool? cancelOnError,
  bool bubbleCancellation = true,
}) {
  final parent = this;

  return OffsetIterator(
    name: toStringWithChild(name),
    process: (_) async {
      final buffer = <T>[];
      var remaining = count;

      final onItem = O.tap<T>((item) {
        buffer.add(item);
        remaining--;
      });

      while (remaining > 0) {
        final futureOr = parent.pull();
        final item = futureOr is Future ? await futureOr : futureOr;
        onItem(item);
        if (parent.drained) break;
      }

      return OffsetIteratorState(
        chunk: [buffer.toIList()],
        hasMore: parent.hasMore(),
      );
    },
    cleanup: parent.generateCleanup(bubbleCancellation: bubbleCancellation),
    cancelOnError: cancelOnError ?? parent.cancelOnError,
  );
}