[bcl] Updates referencesource to 4.7.1
[mono-project.git] / mcs / class / referencesource / System.Xml / System / Xml / Serialization / NameTable.cs
blob9df48e3668e4f62df12c0770ddb1c42fc4742c6b
1 //------------------------------------------------------------------------------
2 // <copyright file="NameTable.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
8 namespace System.Xml.Serialization {
10 using System.Collections;
12 internal class NameKey {
13 string ns;
14 string name;
16 internal NameKey(string name, string ns) {
17 this.name = name;
18 this.ns = ns;
21 public override bool Equals(object other) {
22 if (!(other is NameKey)) return false;
23 NameKey key = (NameKey)other;
24 return name == key.name && ns == key.ns;
27 public override int GetHashCode() {
28 return (ns == null ? "<null>".GetHashCode() : ns.GetHashCode()) ^ (name == null ? 0 : name.GetHashCode());
31 internal interface INameScope {
32 object this[string name, string ns] {get; set;}
34 internal class NameTable : INameScope {
35 Hashtable table = new Hashtable();
37 internal void Add(XmlQualifiedName qname, object value) {
38 Add(qname.Name, qname.Namespace, value);
41 internal void Add(string name, string ns, object value) {
42 NameKey key = new NameKey(name, ns);
43 table.Add(key, value);
46 internal object this[XmlQualifiedName qname] {
47 get {
48 return table[new NameKey(qname.Name, qname.Namespace)];
50 set {
51 table[new NameKey(qname.Name, qname.Namespace)] = value;
54 internal object this[string name, string ns] {
55 get {
56 return table[new NameKey(name, ns)];
58 set {
59 table[new NameKey(name, ns)] = value;
62 object INameScope.this[string name, string ns] {
63 get {
64 return table[new NameKey(name, ns)];
66 set {
67 table[new NameKey(name, ns)] = value;
71 internal ICollection Values {
72 get { return table.Values; }
75 internal Array ToArray(Type type) {
76 Array a = Array.CreateInstance(type, table.Count);
77 table.Values.CopyTo(a, 0);
78 return a;