using System; using System.Collections.Concurrent; using System.Collections.Generic; namespace Ryujinx.HLE.HOS { class IdDictionary { private ConcurrentDictionary _objs; public ICollection Values => _objs.Values; public IdDictionary() { _objs = new ConcurrentDictionary(); } public bool Add(int id, object data) { return _objs.TryAdd(id, data); } public int Add(object data) { for (int id = 1; id < int.MaxValue; id++) { if (_objs.TryAdd(id, data)) { return id; } } throw new InvalidOperationException(); } public object GetData(int id) { if (_objs.TryGetValue(id, out object data)) { return data; } return null; } public T GetData(int id) { if (_objs.TryGetValue(id, out object data) && data is T) { return (T)data; } return default(T); } public object Delete(int id) { if (_objs.TryRemove(id, out object obj)) { return obj; } return null; } public ICollection Clear() { ICollection values = _objs.Values; _objs.Clear(); return values; } } }