/// <summary> /// Merges two array differences to a unified difference. /// </summary> public static PositionArrayDiff Merge(PositionArrayDiff left, PositionArrayDiff right) { List <int> keys = left.Operations.Keys.ToList <int>(); foreach (var kvp in right.Operations) { if (!left.Operations.ContainsKey(kvp.Key)) { keys.Add(kvp.Key); } } PositionArrayDiff h = new PositionArrayDiff(); foreach (int key in keys) { if (left.Operations.ContainsKey(key) && right.Operations.ContainsKey(key)) { h.Operations[key] = DiffOperation.Merge(left.Operations[key], right.Operations[key]); } else if (left.Operations.ContainsKey(key)) { h.Operations[key] = left.Operations[key]; } else if (right.Operations.ContainsKey(key)) { h.Operations[key] = right.Operations[key]; } } return(h); }
/// <summary> /// Merges two HashDifferences to a unified difference. /// </summary> public static HashDiff Merge(HashDiff left, HashDiff right) { // Find the combined key list. List <object> keys = left.Operations.Keys.ToList <object>(); foreach (var kvp in right.Operations) { if (!left.Operations.ContainsKey(kvp.Key)) { keys.Add(kvp.Key); } } // Merge the operations for each key. HashDiff h = new HashDiff(); foreach (object key in keys) { if (left.Operations.ContainsKey(key) && right.Operations.ContainsKey(key)) { h.Operations[key] = DiffOperation.Merge(left.Operations[key], right.Operations[key]); } else if (left.Operations.ContainsKey(key)) { h.Operations[key] = left.Operations[key]; } else if (right.Operations.ContainsKey(key)) { h.Operations[key] = right.Operations[key]; } } return(h); }