writeMany method

Future<List<int>> writeMany(
  1. List<WriteRequest> requests, {
  2. CancelToken? cancel,
})

Implementation

Future<List<int>> writeMany(
  List<WriteRequest> requests, {
  CancelToken? cancel,
}) async {
  cancel?.throwIfCancelled(path: path);
  if (requests.length > 1) {
    final merged = _tryMergeContiguous(requests);
    if (merged != null) {
      final n = await writeAt(
        merged.offset,
        IoSlice(merged.bytes),
        cancel: cancel,
      );
      if (n != merged.bytes.length) {
        throw BlitIOException(
          'short batch write: $n of ${merged.bytes.length}',
          path: path,
        );
      }
      return [for (final request in requests) request.src.length];
    }
    final span = await _tryMergeSpan(requests, cancel: cancel);
    if (span != null) {
      final n = await writeAt(
        span.offset,
        IoSlice(span.bytes),
        cancel: cancel,
      );
      if (n != span.bytes.length) {
        throw BlitIOException(
          'short batch write: $n of ${span.bytes.length}',
          path: path,
        );
      }
      return [for (final request in requests) request.src.length];
    }
  }
  final out = <int>[];
  for (final request in requests) {
    out.add(await writeAt(request.offset, request.src, cancel: cancel));
  }
  return out;
}