| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using System;
- namespace Ryujinx.Core.OsHle.Handles
- {
- class KProcessHandleTable : IDisposable
- {
- private IdDictionary Handles;
- public KProcessHandleTable()
- {
- Handles = new IdDictionary();
- }
- public int OpenHandle(object Obj)
- {
- return Handles.Add(Obj);
- }
- public T GetData<T>(int Handle)
- {
- return Handles.GetData<T>(Handle);
- }
- public bool ReplaceData(int Id, object Data)
- {
- return Handles.ReplaceData(Id, Data);
- }
- public bool CloseHandle(int Handle)
- {
- object Data = Handles.GetData(Handle);
- if (Data is HTransferMem TMem)
- {
- TMem.Memory.Manager.Reprotect(
- TMem.Position,
- TMem.Size,
- TMem.Perm);
- }
- return Handles.Delete(Handle);
- }
- public void Dispose()
- {
- Dispose(true);
- }
- protected virtual void Dispose(bool Disposing)
- {
- if (Disposing)
- {
- foreach (object Obj in Handles)
- {
- if (Obj is IDisposable DisposableObj)
- {
- DisposableObj.Dispose();
- }
- }
- }
- }
- }
- }
|