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;
+ }
}
}