/////////////////////////////////////////////////////////////////////////////////////////////// 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); }
/////////////////////////////////////////////////////////////////////////////////////////////// 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); }