Exemple #1
0
        private IDiffItem ProcessConflict(IDiffOrderedCollectionItem left, IDiffOrderedCollectionItem right, IConflictContainer conflicts)
        {
            if (left is IDiffItemChanged && right is IDiffItemChanged)
            {
                IDiff <TItemType> diff = this.aMergeItemsDiffs.MergeDiffs(
                    ((IDiffItemChanged <TItemType>)left).ValueDiff,
                    ((IDiffItemChanged <TItemType>)right).ValueDiff,
                    conflicts
                    );

                return(new DiffOrderedCollectionChanged <TItemType>(left.ItemIndex, diff));
            }
            else if (left.IsSame(right))
            {
                return(left);
            }

            DiffAnyConflicted conflict = new DiffAnyConflicted(left, right);

            conflicts.RegisterConflict(conflict);
            return(conflict);
        }
Exemple #2
0
        private void SepareAdditions(List <IDiffOrderedCollectionItem> input, out List <IDiffOrderedCollectionItem> added, out IDiffOrderedCollectionItem other)
        {
            if (input.Last() is IDiffItemAdded)
            {
                other = null;
                added = input;
            }
            else if (input.Count == 1)
            {
                other = input.Last();
                added = null;
            }
            else
            {
                other = input.Last();
                input.RemoveAt(input.Count - 1);
                added = input;
            }

            if (added != null && !added.All(x => x is IDiffItemAdded))
            {
                throw new Exception("Error in input diff");
            }
        }