protected virtual PropertyDiff[] GetSignalDiff(IDiffAdaptor currentAdaptor, object currentObject, IDiffAdaptor newAdaptor, object newObject) { ArrayList changes = new ArrayList(); Hashtable found = new Hashtable(); // Look for modified and deleted elements if (currentObject != null) { foreach (object oldProp in currentAdaptor.GetSignals(currentObject)) { string name; string handler; currentAdaptor.GetSignalInfo(oldProp, out name, out handler); object newProp = newObject != null?newAdaptor.GetSignal(newObject, name, handler) : null; if (newProp == null) { changes.Add(new PropertyDiff(DiffOperation.Remove, name, handler)); } found [name + " " + handler] = found; } } // Look for new elements if (newObject != null) { foreach (object newProp in newAdaptor.GetSignals(newObject)) { string name; string handler; newAdaptor.GetSignalInfo(newProp, out name, out handler); if (!found.ContainsKey(name + " " + handler)) { changes.Add(new PropertyDiff(DiffOperation.Add, name, handler)); } } } if (changes.Count == 0) { return(null); } return((PropertyDiff[])changes.ToArray(typeof(PropertyDiff))); }
protected virtual PropertyDiff[] GetSignalDiff (IDiffAdaptor currentAdaptor, object currentObject, IDiffAdaptor newAdaptor, object newObject) { ArrayList changes = new ArrayList (); Hashtable found = new Hashtable (); // Look for modified and deleted elements if (currentObject != null) { foreach (object oldProp in currentAdaptor.GetSignals (currentObject)) { string name; string handler; currentAdaptor.GetSignalInfo (oldProp, out name, out handler); object newProp = newObject != null ? newAdaptor.GetSignal (newObject, name, handler) : null; if (newProp == null) changes.Add (new PropertyDiff (DiffOperation.Remove, name, handler)); found [name + " " + handler] = found; } } // Look for new elements if (newObject != null) { foreach (object newProp in newAdaptor.GetSignals (newObject)) { string name; string handler; newAdaptor.GetSignalInfo (newProp, out name, out handler); if (!found.ContainsKey (name + " " + handler)) changes.Add (new PropertyDiff (DiffOperation.Add, name, handler)); } } if (changes.Count == 0) return null; return (PropertyDiff[]) changes.ToArray (typeof(PropertyDiff)); }