2002-09-19 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / XmlSerializerNamespaces.cs
index 9c7750e418c64ffe7d22f97e32740fbc3b6b38b3..744026ae201c6efaaa364dad552fffdb75883934 100644 (file)
@@ -5,8 +5,7 @@
 //   John Donagher (john@webmeta.com)
 //
 // (C) 2002 John Donagher
-// Modified: 
-//             June 22, 2002 Ajay kumar Dwivedi (adwiv@yahoo.com)
+//
 
 using System;\r
 using System.Xml;\r
@@ -15,75 +14,63 @@ using System.Collections;
 namespace System.Xml.Serialization\r
 {\r
        /// <summary>\r
-       /// XmlSerializerNamespaces contains the unique mapping between a prefix and namespace.\r
-       /// For a given prefix, we should have exactly one namespace.\r
-       /// Ideally, for a given namespace there should be exactly one prefix.But \r
-       /// this is not enforced in MS implementation. We enforce both conditions.\r
+       /// Summary description for XmlSerializerNamespaces.\r
        /// </summary>\r
-       /// <remarks>\r
-       /// XmlSerializerNamespaces can be used both during serialization and deserialization.\r
-       /// During serialization, we need key to be the namespace whereas during deserialization,\r
-       /// the key should be prefix. So we maintain both the mappings in two hashtables.\r
-       /// Both the tables must always be synchronized.\r
-       /// </remarks>\r
        public class XmlSerializerNamespaces\r
        {\r
-               private Hashtable nameToNsMap;\r
-               private Hashtable nsToNameMap;\r
-\r
+               private Hashtable namespaces;\r
+                       \r
                public XmlSerializerNamespaces ()\r
                {\r
-                       nameToNsMap = new Hashtable ();\r
-                       nsToNameMap = new Hashtable ();\r
+                       namespaces = new Hashtable ();\r
                }\r
-\r
+       \r
                public XmlSerializerNamespaces(XmlQualifiedName[] namespaces)\r
                        : this()\r
                {\r
-                       foreach(XmlQualifiedName qname in namespaces)\r
+                       foreach(XmlQualifiedName qname in namespaces) \r
                        {\r
-                               //Remove the keys if value is present.\r
-                               if(nameToNsMap.ContainsKey(qname.Name))\r
-                               {\r
-                                       nsToNameMap.Remove(nameToNsMap[qname.Name]);\r
-                                       nameToNsMap.Remove(qname.Name);\r
-                               }\r
-                               if(nsToNameMap.ContainsKey(qname.Namespace))\r
-                               {\r
-                                       nameToNsMap.Remove(nsToNameMap[qname.Namespace]);\r
-                                       nsToNameMap.Remove(qname.Namespace);\r
-                               }\r
-                               nameToNsMap.Add(qname.Name, qname.Namespace);\r
-                               nsToNameMap.Add(qname.Namespace, qname.Name);\r
+                               this.namespaces[qname.Name] = qname;\r
                        }\r
                }\r
-\r
+       \r
                public XmlSerializerNamespaces(XmlSerializerNamespaces namespaces)\r
                        : this(namespaces.ToArray())\r
-               {\r
-               }\r
-\r
+               {}\r
+       \r
                public void Add (string prefix, string ns)\r
                {\r
-                       nameToNsMap.Add(prefix, ns);\r
-                       nsToNameMap.Add(ns, prefix);\r
+                       XmlQualifiedName qname = new XmlQualifiedName(prefix,ns);\r
+                       namespaces[qname.Name] = qname;  \r
                }\r
-\r
+       \r
                public XmlQualifiedName[] ToArray ()\r
                {\r
-                       XmlQualifiedName[] array  = new XmlQualifiedName[Count];\r
-                       int i=0;\r
-                       foreach(string name in nameToNsMap.Keys)\r
-                       {\r
-                               array[i++] = new XmlQualifiedName(name, (string)nameToNsMap[name]);\r
-                       }\r
+                       XmlQualifiedName[] array = new XmlQualifiedName[namespaces.Count];\r
+                       namespaces.Values.CopyTo(array,0);\r
                        return array;\r
                }\r
-\r
+       \r
                public int Count \r
                {\r
-                       get{ return nsToNameMap.Count; }\r
+                       get{ return namespaces.Count; }\r
                }\r
 \r
+               internal string GetPrefix(string Ns)\r
+               {\r
+                       foreach(string prefix in namespaces.Keys)\r
+                       {\r
+                               if(Ns == ((XmlQualifiedName)namespaces[prefix]).Namespace) \r
+                                       return prefix;\r
+                       }\r
+                       return null;\r
+               }\r
+
+               internal Hashtable Namespaces
+               {
+                       get {
+                               return namespaces;
+                       }
+               }
        }\r
 }\r