private static ListItem <ILogItem> Merge_AddItem( this ILogList MergeList, ILogList FromList, ListItem <ILogItem> Item) { var addItem = Item.Value.NewCopy(); addItem.ApppendMergeName(FromList); MergeList.AddItem(addItem); var nextItem = FromList.NextItem(Item); return(nextItem); }
public static ILogList Merge( this ILogList List1, ILogList List2, ILogList List3 = null, ILogList List4 = null, ILogList List5 = null, ILogList List6 = null) { ILogList merge = null; ILogList[] listArray = new ILogList[] { List1, List2, List3, List4, List5, List6 }; // create the merge list from the first non null input list. { var list = listArray.FirstOrDefault(c => c != null); if (list != null) { merge = list.NewList(); } } // load itemArray with the first item from each of the listArray lists. var itemArray = new ListItem <ILogItem> [listArray.Length]; { for (int ix = 0; ix < listArray.Length; ++ix) { itemArray[ix] = listArray[ix]?.NextItem(null); } } // find the itemArray item which is lowest in LogTime order. while (itemArray.FirstNonNull() != null) { int curIx = 0; ListItem <ILogItem> curItem = null; for (int ix = 0; ix < itemArray.Length; ++ix) { if (curItem == null) { curItem = itemArray[ix]; curIx = ix; } else { var item5 = itemArray[ix]; if ((item5 != null) && (item5.Value.LogTime <= curItem.Value.LogTime)) { curItem = item5; curIx = ix; } } } if (curItem == null) { break; } { var logItem = curItem.Value.NewCopy(); logItem.ApppendMergeName(listArray[curIx]); merge.AddItem(logItem); itemArray[curIx] = listArray[curIx].NextItem(curItem); } } return(merge); }