Poor man's template specialization: extension methods for Rope<char>.
コード例 #1
0
ファイル: Rope.cs プロジェクト: mikel785/AvalonStudio
        /// <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();
        }