HybridObjectCache.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.Runtime.Serialization
  5. {
  6. using System;
  7. using System.Xml;
  8. using System.Collections.Generic;
  9. internal class HybridObjectCache
  10. {
  11. Dictionary<string, object> objectDictionary;
  12. Dictionary<string, object> referencedObjectDictionary;
  13. internal HybridObjectCache()
  14. {
  15. }
  16. internal void Add(string id, object obj)
  17. {
  18. if (objectDictionary == null)
  19. objectDictionary = new Dictionary<string, object>();
  20. object existingObject;
  21. if (objectDictionary.TryGetValue(id, out existingObject))
  22. throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.GetString(SR.MultipleIdDefinition, id)));
  23. objectDictionary.Add(id, obj);
  24. }
  25. internal void Remove(string id)
  26. {
  27. if (objectDictionary != null)
  28. objectDictionary.Remove(id);
  29. }
  30. internal object GetObject(string id)
  31. {
  32. if (referencedObjectDictionary == null)
  33. {
  34. referencedObjectDictionary = new Dictionary<string, object>();
  35. referencedObjectDictionary.Add(id, null);
  36. }
  37. else if (!referencedObjectDictionary.ContainsKey(id))
  38. {
  39. referencedObjectDictionary.Add(id, null);
  40. }
  41. if (objectDictionary != null)
  42. {
  43. object obj;
  44. objectDictionary.TryGetValue(id, out obj);
  45. return obj;
  46. }
  47. return null;
  48. }
  49. internal bool IsObjectReferenced(string id)
  50. {
  51. if (referencedObjectDictionary != null)
  52. {
  53. return referencedObjectDictionary.ContainsKey(id);
  54. }
  55. return false;
  56. }
  57. }
  58. }