Exemplo n.º 1
0
        /// <summary>
        ///     Creates a rope from a part of the array.
        ///     This operation runs in O(N).
        /// </summary>
        /// <exception cref="ArgumentNullException">input is null.</exception>
        public Rope(T[] array, int arrayIndex, int count)
        {
            VerifyArrayWithRange(array, arrayIndex, count);
            root = RopeNode <T> .CreateFromArray(array, arrayIndex, count);

            root.CheckInvariants();
        }
Exemplo n.º 2
0
        /// <summary>
        ///     Creates a rope from the specified input.
        ///     This operation runs in O(N).
        /// </summary>
        /// <exception cref="ArgumentNullException">input is null.</exception>
        public Rope(IEnumerable <T> input)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            var inputRope = input as Rope <T>;

            if (inputRope != null)
            {
                // clone ropes instead of copying them
                inputRope.root.Publish();
                root = inputRope.root;
            }
            else
            {
                var text = input as string;
                if (text != null)
                {
                    // if a string is IEnumerable<T>, then T must be char
                    ((Rope <char>)(object) this).root = CharRope.InitFromString(text);
                }
                else
                {
                    var arr = ToArray(input);
                    root = RopeNode <T> .CreateFromArray(arr, 0, arr.Length);
                }
            }
            root.CheckInvariants();
        }