IdDictionary.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Collections.Generic;
  4. namespace Ryujinx.HLE.HOS
  5. {
  6. class IdDictionary
  7. {
  8. private ConcurrentDictionary<int, object> _objs;
  9. public IdDictionary()
  10. {
  11. _objs = new ConcurrentDictionary<int, object>();
  12. }
  13. public bool Add(int id, object data)
  14. {
  15. return _objs.TryAdd(id, data);
  16. }
  17. public int Add(object data)
  18. {
  19. for (int id = 1; id < int.MaxValue; id++)
  20. {
  21. if (_objs.TryAdd(id, data))
  22. {
  23. return id;
  24. }
  25. }
  26. throw new InvalidOperationException();
  27. }
  28. public object GetData(int id)
  29. {
  30. if (_objs.TryGetValue(id, out object data))
  31. {
  32. return data;
  33. }
  34. return null;
  35. }
  36. public T GetData<T>(int id)
  37. {
  38. if (_objs.TryGetValue(id, out object data) && data is T)
  39. {
  40. return (T)data;
  41. }
  42. return default(T);
  43. }
  44. public object Delete(int id)
  45. {
  46. if (_objs.TryRemove(id, out object obj))
  47. {
  48. return obj;
  49. }
  50. return null;
  51. }
  52. public ICollection<object> Clear()
  53. {
  54. ICollection<object> values = _objs.Values;
  55. _objs.Clear();
  56. return values;
  57. }
  58. }
  59. }