splitImmutable method
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),
);
}