public static bool Unregister(CriDisposable disposable) { int index = CriDisposableObjectManager.SearchForDisposable(disposable); if (index >= 0) { CriDisposableObjectManager.refList.RemoveAt(index); return(true); } return(false); }
private static int SearchForDisposable(CriDisposable disposable) { int listCount = CriDisposableObjectManager.refList.Count; for (int i = listCount - 1; i >= 0; --i) { if (CriDisposableObjectManager.refList[i].guid == disposable.guid) { return(i); } } return(-1); }
public static void Register(CriDisposable disposable, ModuleType type) { if (CriDisposableObjectManager.SearchForDisposable(disposable) >= 0) { UnityEngine.Debug.LogWarning("[CRIWARE] Internal: Duplicated object GUID"); return; } #if CRIWARE_DISPOSABLEOBJECTMANAGER_USE_WEAKREF /* Keep weak reference until object finalized */ var weakRef = new WeakReference(disposable, true); CriDisposableObjectManager.refList.Add(new ObjectRef(disposable.guid, weakRef, type)); #else /* Keep reference directly */ CriDisposableObjectManager.refList.Add(new ObjectRef(disposable.guid, disposable, type)); #endif }
public ObjectRef(Guid _guid, CriDisposable _disposable, ModuleType _type) { guid = _guid; type = _type; disposable = _disposable; }
public static bool IsDisposed(CriDisposable disposable) { return(CriDisposableObjectManager.SearchForDisposable(disposable) < 0); }