PageRenderTime 50ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/Main/src/DynamicDataDisplay.Maps/Set.cs

#
C# | 85 lines | 65 code | 16 blank | 4 comment | 2 complexity | e82c4c63acaad7814e41bf869d26ca33 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Collections;
  6. using System.Diagnostics;
  7. namespace Microsoft.Research.DynamicDataDisplay.Charts.Maps
  8. {
  9. /// <summary>
  10. /// Represents an unordered set of values.
  11. /// </summary>
  12. /// <typeparam name="T">Type of values.</typeparam>
  13. [DebuggerDisplay("Count = {Count}")]
  14. public sealed class Set<T> : IEnumerable<T>
  15. {
  16. private readonly Dictionary<T, Dummy> cache = new Dictionary<T, Dummy>();
  17. public void Add(T item)
  18. {
  19. cache.Add(item, Dummy.Instance);
  20. }
  21. public bool TryAdd(T item)
  22. {
  23. if (!Contains(item))
  24. {
  25. Add(item);
  26. return true;
  27. }
  28. return false;
  29. }
  30. public bool Remove(T item)
  31. {
  32. bool contains = cache.ContainsKey(item);
  33. bool result = cache.Remove(item);
  34. if (contains)
  35. {
  36. Debug.Assert(!cache.ContainsKey(item));
  37. }
  38. return result;
  39. }
  40. public bool Contains(T item)
  41. {
  42. return cache.ContainsKey(item);
  43. }
  44. private class Dummy
  45. {
  46. public static readonly Dummy Instance = new Dummy();
  47. }
  48. #region IEnumerable<T> Members
  49. public IEnumerator<T> GetEnumerator()
  50. {
  51. return cache.Keys.GetEnumerator();
  52. }
  53. #endregion
  54. #region IEnumerable Members
  55. IEnumerator IEnumerable.GetEnumerator()
  56. {
  57. return GetEnumerator();
  58. }
  59. #endregion
  60. public void Clear()
  61. {
  62. cache.Clear();
  63. }
  64. public int Count
  65. {
  66. get { return cache.Count; }
  67. }
  68. }
  69. }