Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }