NameTable.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // System.Xml.NameTable.cs
  3. //
  4. // Author: Duncan Mak ([email protected])
  5. //
  6. // (C) Ximian, Inc.
  7. //
  8. using System;
  9. using System.Collections;
  10. namespace System.Xml
  11. {
  12. public class NameTable : XmlNameTable
  13. {
  14. // Fields
  15. Hashtable table;
  16. // Constructor
  17. public NameTable ()
  18. : base ()
  19. {
  20. table = new Hashtable ();
  21. }
  22. // Method
  23. public override string Add (string key)
  24. {
  25. if (table.Contains (key))
  26. return (string) table [key];
  27. else {
  28. // We don't have to check IsInterned since the implementation
  29. // of String.Intern is mono_string_is_interned_lookup.
  30. String.Intern (key);
  31. table.Add (key, key);
  32. return key;
  33. }
  34. }
  35. public override string Add (char[] key, int start, int len)
  36. {
  37. if (((0 > start) && (start >= key.Length))
  38. || ((0 > len) && (len >= key.Length - len)))
  39. throw new IndexOutOfRangeException ("The Index is out of range.");
  40. if (len == 0)
  41. return String.Empty;
  42. string item = new string (key, start, len);
  43. return Add (item);
  44. }
  45. public override string Get (string key)
  46. {
  47. if (! (table.Contains (key)))
  48. return null;
  49. else
  50. return (string) table [key];
  51. }
  52. public override string Get (char[] array, int offset, int length)
  53. {
  54. if (((0 > offset) && (offset >= array.Length))
  55. || ((0 > length) && (length >= array.Length - offset)))
  56. throw new IndexOutOfRangeException ("The Index is out of range.");
  57. if (length == 0)
  58. return String.Empty;
  59. string key = new string (array, offset, length);
  60. return Get (key);
  61. }
  62. }
  63. }