replaceAllAt method

DiagramPersistentList<T> replaceAllAt(
  1. Map<int, T> replacements
)

Implementation

DiagramPersistentList<T> replaceAllAt(Map<int, T> replacements) {
  if (replacements.isEmpty) return this;
  final chunks = _chunks.toList(growable: false);
  final changed = <int, List<T>>{};
  for (final entry in replacements.entries) {
    RangeError.checkValidIndex(entry.key, this);
    if (identical(this[entry.key], entry.value)) continue;
    final page = entry.key ~/ _chunkSize;
    final chunk = changed.putIfAbsent(
      page,
      () => _chunks[page].toList(growable: false),
    );
    chunk[entry.key % _chunkSize] = entry.value;
  }
  if (changed.isEmpty) return this;
  for (final entry in changed.entries) {
    chunks[entry.key] = List.unmodifiable(entry.value);
  }
  return DiagramPersistentList<T>._(List.unmodifiable(chunks), length);
}