/// <summary> /// Creates a new rope and initializes it with a part of this rope. /// Runs in O(lg N) plus a per-node cost as if <c>this.Clone()</c> was called. /// </summary> /// <exception cref="ArgumentOutOfRangeException">offset or length is outside the valid range.</exception> /// <remarks> /// This method counts as a read access and may be called concurrently to other read accesses. /// </remarks> public Rope<T> GetRange(int index, int count) { VerifyRange(index, count); Rope<T> newRope = Clone(); int endIndex = index + count; newRope.RemoveRange(endIndex, newRope.Length - endIndex); newRope.RemoveRange(0, index); return newRope; }