OrderedSet.cs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. namespace Jint.Runtime
  2. {
  3. internal sealed class OrderedSet<T>
  4. {
  5. internal readonly List<T> _list;
  6. private readonly HashSet<T> _set;
  7. public OrderedSet(IEqualityComparer<T> comparer)
  8. {
  9. _list = new List<T>();
  10. _set = new HashSet<T>(comparer);
  11. }
  12. public T this[int index]
  13. {
  14. get => _list[index];
  15. set
  16. {
  17. if (_set.Add(value))
  18. {
  19. _list[index] = value;
  20. }
  21. }
  22. }
  23. public void Add(T item)
  24. {
  25. if (_set.Add(item))
  26. {
  27. _list.Add(item);
  28. }
  29. }
  30. public void Clear()
  31. {
  32. _list.Clear();
  33. _set.Clear();
  34. }
  35. public bool Contains(T item) => _set.Contains(item);
  36. public int Count => _list.Count;
  37. public bool Remove(T item)
  38. {
  39. _set.Remove(item);
  40. return _list.Remove(item);
  41. }
  42. }
  43. }