NameTable.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. //------------------------------------------------------------------------------
  7. namespace System.Xml.Serialization {
  8. using System.Collections;
  9. internal class NameKey {
  10. string ns;
  11. string name;
  12. internal NameKey(string name, string ns) {
  13. this.name = name;
  14. this.ns = ns;
  15. }
  16. public override bool Equals(object other) {
  17. if (!(other is NameKey)) return false;
  18. NameKey key = (NameKey)other;
  19. return name == key.name && ns == key.ns;
  20. }
  21. public override int GetHashCode() {
  22. return (ns == null ? "<null>".GetHashCode() : ns.GetHashCode()) ^ (name == null ? 0 : name.GetHashCode());
  23. }
  24. }
  25. internal interface INameScope {
  26. object this[string name, string ns] {get; set;}
  27. }
  28. internal class NameTable : INameScope {
  29. Hashtable table = new Hashtable();
  30. internal void Add(XmlQualifiedName qname, object value) {
  31. Add(qname.Name, qname.Namespace, value);
  32. }
  33. internal void Add(string name, string ns, object value) {
  34. NameKey key = new NameKey(name, ns);
  35. table.Add(key, value);
  36. }
  37. internal object this[XmlQualifiedName qname] {
  38. get {
  39. return table[new NameKey(qname.Name, qname.Namespace)];
  40. }
  41. set {
  42. table[new NameKey(qname.Name, qname.Namespace)] = value;
  43. }
  44. }
  45. internal object this[string name, string ns] {
  46. get {
  47. return table[new NameKey(name, ns)];
  48. }
  49. set {
  50. table[new NameKey(name, ns)] = value;
  51. }
  52. }
  53. object INameScope.this[string name, string ns] {
  54. get {
  55. return table[new NameKey(name, ns)];
  56. }
  57. set {
  58. table[new NameKey(name, ns)] = value;
  59. }
  60. }
  61. internal ICollection Values {
  62. get { return table.Values; }
  63. }
  64. internal Array ToArray(Type type) {
  65. Array a = Array.CreateInstance(type, table.Count);
  66. table.Values.CopyTo(a, 0);
  67. return a;
  68. }
  69. }
  70. }