| File: FrameworkFork\Microsoft.Xml\Xml\Serialization\NameTable.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. namespace Microsoft.Xml.Serialization { using System; using Microsoft.Xml; using System.Collections; internal class NameKey { private string _ns; private string _name; internal NameKey(string name, string ns) { _name = name; _ns = ns; } public override bool Equals(object other) { if (!(other is NameKey)) return false; NameKey key = (NameKey)other; return _name == key._name && _ns == key._ns; } public override int GetHashCode() { return (_ns == null ? "<null>".GetHashCode() : _ns.GetHashCode()) ^ (_name == null ? 0 : _name.GetHashCode()); } } internal interface INameScope { object this[string name, string ns] { get; set; } } internal class NameTable : INameScope { private Hashtable _table = new Hashtable(); internal void Add(XmlQualifiedName qname, object value) { Add(qname.Name, qname.Namespace, value); } internal void Add(string name, string ns, object value) { NameKey key = new NameKey(name, ns); _table.Add(key, value); } internal object this[XmlQualifiedName qname] { get { return _table[new NameKey(qname.Name, qname.Namespace)]; } set { _table[new NameKey(qname.Name, qname.Namespace)] = value; } } internal object this[string name, string ns] { get { return _table[new NameKey(name, ns)]; } set { _table[new NameKey(name, ns)] = value; } } object INameScope.this[string name, string ns] { get { return _table[new NameKey(name, ns)]; } set { _table[new NameKey(name, ns)] = value; } } internal ICollection Values { get { return _table.Values; } } internal Array ToArray(Type type) { Array a = Array.CreateInstance(type, _table.Count); _table.Values.CopyTo(a, 0); return a; } } }