insertAll method

RgaList<T> insertAll(
  1. int index,
  2. Iterable<T> elements
)

Inserts elements as a contiguous run at visible index.

Implementation

RgaList<T> insertAll(int index, Iterable<T> elements) {
  final visible = _visible();
  if (index < 0 || index > visible.length) {
    throw RangeError.range(index, 0, visible.length, 'index');
  }
  var origin = index == 0 ? null : visible[index - 1].id;
  final nodes = Map<String, RgaNode<T>>.from(_nodes);
  var counter = _counter;
  for (final element in elements) {
    counter++;
    final node = RgaNode<T>(replicaId: replicaId, counter: counter, origin: origin, value: element);
    nodes[node.id] = node;
    origin = node.id; // chain the run so it cannot be interleaved
  }
  return RgaList._(replicaId, nodes, counter);
}