Nowadays, XmlDeclaratoin.WriteTo() writes PI instead of raw.
[mono.git] / mcs / class / System.XML / System.Xml / XmlNameEntry.cs
old mode 100755 (executable)
new mode 100644 (file)
index a4715c2..71110d1
@@ -36,14 +36,45 @@ namespace System.Xml
        internal class XmlNameEntry
        {
                public XmlNameEntry (string prefix, string local, string ns)
+               {
+                       Update (prefix, local, ns);
+               }
+
+               public void Update (string prefix, string local, string ns)
                {
                        Prefix = prefix;
                        LocalName = local;
                        NS = ns;
+                       Hash = local.GetHashCode () + (prefix.Length > 0 ? prefix.GetHashCode () : 0);
                }
 
-               public readonly string Prefix;
-               public readonly string LocalName;
-               public readonly string NS;
+               public string Prefix;
+               public string LocalName;
+               public string NS;
+               public int Hash;
+
+               string prefixed_name_cache;
+
+               public override bool Equals (object other)
+               {
+                       XmlNameEntry e = other as XmlNameEntry;
+                       return e != null && e.Hash == Hash &&
+                               Object.ReferenceEquals (e.LocalName, LocalName) &&
+                               Object.ReferenceEquals (e.NS, NS) &&
+                               Object.ReferenceEquals (e.Prefix, Prefix);
+               }
+
+               public override int GetHashCode ()
+               {
+                       return Hash;
+               }
+
+               public string GetPrefixedName (XmlNameEntryCache owner)
+               {
+                       if (prefixed_name_cache == null)
+                               prefixed_name_cache =
+                                       owner.GetAtomizedPrefixedName (Prefix, LocalName);
+                       return prefixed_name_cache;
+               }
        }
 }