using Ryujinx.HLE.HOS.Kernel; using System.Collections.Concurrent; using System.Collections.Generic; namespace Ryujinx.HLE.HOS { internal class GlobalStateTable { private ConcurrentDictionary _dictByProcess; public GlobalStateTable() { _dictByProcess = new ConcurrentDictionary(); } public bool Add(KProcess process, int id, object data) { IdDictionary dict = _dictByProcess.GetOrAdd(process, (key) => new IdDictionary()); return dict.Add(id, data); } public int Add(KProcess process, object data) { IdDictionary dict = _dictByProcess.GetOrAdd(process, (key) => new IdDictionary()); return dict.Add(data); } public object GetData(KProcess process, int id) { if (_dictByProcess.TryGetValue(process, out IdDictionary dict)) { return dict.GetData(id); } return null; } public T GetData(KProcess process, int id) { if (_dictByProcess.TryGetValue(process, out IdDictionary dict)) { return dict.GetData(id); } return default(T); } public object Delete(KProcess process, int id) { if (_dictByProcess.TryGetValue(process, out IdDictionary dict)) { return dict.Delete(id); } return null; } public ICollection DeleteProcess(KProcess process) { if (_dictByProcess.TryRemove(process, out IdDictionary dict)) { return dict.Clear(); } return null; } } }