Пример #1
0
        ///////////////////////////////////////////////////////////////////////////////////////////////

        public static ReturnCode Combine(
            IList <IList <StringBuilder> > lists, /* in */
            ref IList <StringBuilder> list,       /* in, out */
            ref Result error                      /* out */
            )
        {
            if (lists == null)
            {
                error = "invalid list of lists";
                return(ReturnCode.Error);
            }

            if (lists.Count == 0)
            {
                error = "no lists in list";
                return(ReturnCode.Error);
            }

            IList <StringBuilder> list1 = lists[0];

            if (lists.Count > 1)
            {
                for (int index = 1; index < lists.Count; index++)
                {
                    IList <StringBuilder> list2 = lists[index];
                    IList <StringBuilder> list3 = null;

                    if (Combine(
                            list1, list2, ref list3, ref error) != ReturnCode.Ok)
                    {
                        return(ReturnCode.Error);
                    }

                    list1 = list3;
                }
            }

            if (list != null)
            {
                GenericOps <StringBuilder> .AddRange(list, list1);
            }
            else
            {
                list = new List <StringBuilder>(list1);
            }

            return(ReturnCode.Ok);
        }
Пример #2
0
        ///////////////////////////////////////////////////////////////////////////////////////////////

        private static ReturnCode Combine(
            IList <StringBuilder> list1,     /* in */
            IList <StringBuilder> list2,     /* in */
            ref IList <StringBuilder> list3, /* in, out */
            ref Result error                 /* out */
            )
        {
            if (list1 == null)
            {
                if (list2 == null)
                {
                    error = "cannot combine, neither list is valid";
                    return(ReturnCode.Error);
                }

                if (list3 != null)
                {
                    GenericOps <StringBuilder> .AddRange(list3, list2);
                }
                else
                {
                    list3 = new List <StringBuilder>(list2);
                }
            }
            else if (list2 == null)
            {
                if (list3 != null)
                {
                    GenericOps <StringBuilder> .AddRange(list3, list1);
                }
                else
                {
                    list3 = new List <StringBuilder>(list1);
                }
            }
            else
            {
                if ((list1.Count > 0) || (list2.Count > 0))
                {
                    if (list3 == null)
                    {
                        list3 = new List <StringBuilder>();
                    }
                }

                foreach (StringBuilder element1 in list1)
                {
                    foreach (StringBuilder element2 in list2)
                    {
                        int capacity = 0;

                        if (element1 != null)
                        {
                            capacity += element1.Length;
                        }

                        if (element2 != null)
                        {
                            capacity += element2.Length;
                        }

                        StringBuilder element3 = StringOps.NewStringBuilder(
                            capacity);

                        element3.Append(element1);
                        element3.Append(element2);

                        list3.Add(element3);
                    }
                }
            }

            return(ReturnCode.Ok);
        }