performance hacking
[mono.git] / mcs / class / System.XML / System.Xml / XmlQualifiedName.cs
1 //
2 // System.Xml.XmlQualifiedName.cs
3 //
4 // Author: Duncan Mak (duncan@ximian.com)
5 //               
6 // (C) Ximian, Inc.
7 // 
8 // Modified: 
9 //              21st June 2002 : Ajay kumar Dwivedi (adwiv@yahoo.com)
10
11 using System;
12
13 namespace System.Xml
14 {
15         public class XmlQualifiedName
16         {
17                 // Constructors         
18                 public XmlQualifiedName ()
19                         : this (string.Empty, string.Empty)
20                 {
21                 }
22
23                 public XmlQualifiedName (string name)
24                         : this (name, string.Empty)
25                 {
26                 }
27
28                 public XmlQualifiedName (string name, string ns)
29                         : base ()
30                 {
31                         this.name = (name == null) ? "" : name;
32                         this.ns = (ns == null) ? "" : ns;
33                         this.hash = name.GetHashCode () ^ ns.GetHashCode ();
34                 }
35
36                 // Fields
37                 public static readonly XmlQualifiedName Empty = new XmlQualifiedName ();                
38                 private readonly string name;
39                 private readonly string ns;
40                 private readonly int hash;
41                 
42                 // Properties
43                 public bool IsEmpty
44                 {
45                         get {
46                                 return name.Length == 0 && ns.Length == 0;
47                         }
48                 }
49
50                 public string Name
51                 {
52                         get { return name; }
53                 }
54
55                 public string Namespace
56                 {
57                         get { return ns; }
58                 }
59
60                 // Methods
61                 public override bool Equals (object other)
62                 {
63                         return this == (other as XmlQualifiedName);
64                 }
65
66                 public override int GetHashCode () 
67                 { 
68                         return hash;
69                 }
70
71                 public override string ToString ()
72                 {
73                         if (ns == string.Empty)
74                                 return name;
75                         else
76                                 return ns + ":" + name;
77                 }
78
79                 public static string ToString (string name, string ns)
80                 {
81                         if (ns == string.Empty)
82                                 return name;
83                         else                            
84                                 return ns + ":" + name;
85                 }
86
87                 // Operators
88                 public static bool operator == (XmlQualifiedName a, XmlQualifiedName b)
89                 {
90                         if((Object)a == (Object)b)
91                                 return true;
92
93                         if((Object)a == null || (Object)b == null)
94                                 return false;
95
96                         return (a.hash == b.hash) && (a.name == b.name) && (a.ns == b.ns);
97                 }
98
99                 public static bool operator != (XmlQualifiedName a, XmlQualifiedName b)
100                 {
101                         return !(a == b);
102                 }
103         }
104 }