diff options
Diffstat (limited to 'Ryujinx.HLE/OsHle/GlobalStateTable.cs')
| -rw-r--r-- | Ryujinx.HLE/OsHle/GlobalStateTable.cs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Ryujinx.HLE/OsHle/GlobalStateTable.cs b/Ryujinx.HLE/OsHle/GlobalStateTable.cs new file mode 100644 index 00000000..fb71e46b --- /dev/null +++ b/Ryujinx.HLE/OsHle/GlobalStateTable.cs @@ -0,0 +1,69 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Ryujinx.HLE.OsHle +{ + class GlobalStateTable + { + private ConcurrentDictionary<Process, IdDictionary> DictByProcess; + + public GlobalStateTable() + { + DictByProcess = new ConcurrentDictionary<Process, IdDictionary>(); + } + + public bool Add(Process Process, int Id, object Data) + { + IdDictionary Dict = DictByProcess.GetOrAdd(Process, (Key) => new IdDictionary()); + + return Dict.Add(Id, Data); + } + + public int Add(Process Process, object Data) + { + IdDictionary Dict = DictByProcess.GetOrAdd(Process, (Key) => new IdDictionary()); + + return Dict.Add(Data); + } + + public object GetData(Process Process, int Id) + { + if (DictByProcess.TryGetValue(Process, out IdDictionary Dict)) + { + return Dict.GetData(Id); + } + + return null; + } + + public T GetData<T>(Process Process, int Id) + { + if (DictByProcess.TryGetValue(Process, out IdDictionary Dict)) + { + return Dict.GetData<T>(Id); + } + + return default(T); + } + + public object Delete(Process Process, int Id) + { + if (DictByProcess.TryGetValue(Process, out IdDictionary Dict)) + { + return Dict.Delete(Id); + } + + return null; + } + + public ICollection<object> DeleteProcess(Process Process) + { + if (DictByProcess.TryRemove(Process, out IdDictionary Dict)) + { + return Dict.Clear(); + } + + return null; + } + } +}
\ No newline at end of file |
