From 8f1c3a2d085586d7019b116f3d77154a14a5fa7a Mon Sep 17 00:00:00 2001 From: "Stefanos A." Date: Mon, 28 Oct 2013 14:15:58 +0100 Subject: [PATCH] Allow comparison of function elements This allows us to store both enums and functions in the same tree. --- Source/Converter/Main.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Source/Converter/Main.cs b/Source/Converter/Main.cs index b4e983e2..a586b63b 100644 --- a/Source/Converter/Main.cs +++ b/Source/Converter/Main.cs @@ -34,19 +34,19 @@ namespace CHeaderToXML { class EnumTokenComparer : IEqualityComparer { - public bool Equals (XNode a, XNode b) + public bool Equals(XNode a, XNode b) { var a_attr = ((XElement)a).Attribute("name") ?? ((XElement)a).Attribute("token"); var b_attr = ((XElement)b).Attribute("name") ?? ((XElement)b).Attribute("token"); return a_attr.Value == b_attr.Value; } - public int GetHashCode (XNode a) + public int GetHashCode(XNode a) { XElement e = (XElement)a; - if (e.Name == "enum" || e.Name == "token") + if (e.Name == "enum" || e.Name == "token" || e.Name == "function") { - return ((XElement)a).Attribute("name").Value.GetHashCode(); + return ((XElement)a).Attribute("name").Value.GetHashCode() ^ e.Name.LocalName.GetHashCode(); } else if (e.Name == "use") { @@ -181,10 +181,10 @@ namespace CHeaderToXML private static Dictionary MergeDuplicates(IEnumerable> sigs) { var entries = new Dictionary(); - foreach (var e in sigs.SelectMany(s => s).Where(s => s.Name.LocalName == "enum")) + foreach (var e in sigs.SelectMany(s => s))//.Where(s => s.Name.LocalName == "enum")) { - var name = (string)e.Attribute("name"); - if (entries.ContainsKey(name) && e.Name.LocalName == "enum") + var name = (string)e.Attribute("name") ?? ""; + if (entries.ContainsKey(name))// && e.Name.LocalName == "enum") { var p = entries[name]; var curTokens = p.Nodes().ToList(); @@ -192,7 +192,9 @@ namespace CHeaderToXML p.Add(curTokens.Concat(e.Nodes()).Distinct(new EnumTokenComparer())); } else + { entries.Add(name, e); + } } return entries; }