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);
 }