void CompareTypes (XmlNode parent, XMLClass [] other) { ArrayList newNodes = new ArrayList (); Hashtable oh = CreateHash (other); XmlNode node = null; int count = (nested == null) ? 0 : nested.Length; for (int i = 0; i < count; i++) { XMLClass xclass = nested [i]; node = document.CreateElement ("class", null); newNodes.Add (node); AddAttribute (node, "name", xclass.Name); AddAttribute (node, "type", xclass.Type); if (oh.ContainsKey (xclass.Name)) { int idx = (int) oh [xclass.Name]; xclass.CompareTo (document, node, other [idx]); other [idx] = null; counters.AddPartialToPartial (xclass.Counters); } else { // TODO: Should I count here? AddAttribute (node, "presence", "missing"); counters.Missing++; counters.MissingTotal++; } } if (other != null) { count = other.Length; for (int i = 0; i < count; i++) { XMLClass c = other [i]; if (c == null || IsMonoTODOAttribute (c.Name)) continue; node = document.CreateElement ("class", null); newNodes.Add (node); AddAttribute (node, "name", c.Name); AddAttribute (node, "type", c.Type); AddExtra (node); counters.Extra++; counters.ExtraTotal++; } } XmlNode [] nodes = (XmlNode []) newNodes.ToArray (typeof (XmlNode)); Array.Sort (nodes, XmlNodeComparer.Default); foreach (XmlNode nn in nodes) parent.AppendChild (nn); }
static Hashtable CreateHash (XMLClass [] other) { Hashtable result = new Hashtable (); if (other != null) { int i = 0; foreach (XMLClass c in other) { result [c.Name] = i++; } } return result; }
void CompareTypes (XmlNode parent, XMLClass [] other) { ArrayList newNodes = new ArrayList (); Hashtable oh = CreateHash (other); XmlNode node = null; int count = (types == null) ? 0 : types.Length; for (int i = 0; i < count; i++) { XMLClass xclass = types [i]; node = document.CreateElement ("class", null); newNodes.Add (node); AddAttribute (node, "name", xclass.Name); AddAttribute (node, "type", xclass.Type); int idx = -1; if (oh.ContainsKey (xclass.Name)) idx = (int) oh [xclass.Name]; xclass.CompareTo (document, node, idx >= 0 ? other [idx] : new XMLClass ()); if (idx >= 0) other [idx] = null; counters.AddPartialToPartial (xclass.Counters); } if (other != null) { count = other.Length; for (int i = 0; i < count; i++) { XMLClass c = other [i]; if (c == null || IsTODOAttribute (c.Name)) continue; node = document.CreateElement ("class", null); newNodes.Add (node); AddAttribute (node, "name", c.Name); AddAttribute (node, "type", c.Type); AddExtra (node); counters.Extra++; counters.ExtraTotal++; } } XmlNode [] nodes = (XmlNode []) newNodes.ToArray (typeof (XmlNode)); Array.Sort (nodes, XmlNodeComparer.Default); foreach (XmlNode nn in nodes) parent.AppendChild (nn); }