splitImmutable method

(Rope, Rope) splitImmutable(
  1. int position
)

Splits this rope at position, returning two new Ropes (immutable)

Implementation

(Rope, Rope) splitImmutable(int position) {
  if (position < 0 || position > _length) {
    throw RangeError('Invalid position: $position for length $_length');
  }
  if (position == 0) {
    return (Rope._fromNode(null, 0), Rope._fromNode(_root, _length));
  }
  if (position == _length) {
    return (Rope._fromNode(_root, _length), Rope._fromNode(null, 0));
  }

  final pair = _split(_root, position);
  final leftLen = pair.left?.length ?? 0;
  final rightLen = pair.right?.length ?? 0;
  return (
    Rope._fromNode(pair.left, leftLen),
    Rope._fromNode(pair.right, rightLen),
  );
}