1 //------------------------------------------------------------------------------
2 // <copyright file="NameTable.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
8 namespace System
.Xml
.Serialization
{
10 using System
.Collections
;
12 internal class NameKey
{
16 internal NameKey(string name
, string 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
] {
48 return table
[new NameKey(qname
.Name
, qname
.Namespace
)];
51 table
[new NameKey(qname
.Name
, qname
.Namespace
)] = value;
54 internal object this[string name
, string ns
] {
56 return table
[new NameKey(name
, ns
)];
59 table
[new NameKey(name
, ns
)] = value;
62 object INameScope
.this[string name
, string ns
] {
64 return table
[new NameKey(name
, ns
)];
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);