bool StrongRefByDefault(RefCounted refCounted) { if (refCounted is Scene) { return(true); } return(false); }
void OnObjectDeleted(RefCounted refCounted, IntPtr handle) { if (refCounted.GetType() != objectType) { return; } managedSubscribersByObjects.Remove(handle); nativeSubscriptionsForObjects.Remove(handle); }
public void Add(RefCounted refCounted) { lock (knownObjects) { ReferenceHolder <RefCounted> knownObject; if (knownObjects.TryGetValue(refCounted.Handle, out knownObject)) { knownObject?.Reference?.Dispose(); } knownObjects[refCounted.Handle] = new ReferenceHolder <RefCounted>(refCounted, weak: refCounted.Refs() < 1); } }
public void Add(RefCounted refCounted) { lock (knownObjects) { ReferenceHolder<RefCounted> knownObject; if (knownObjects.TryGetValue(refCounted.Handle, out knownObject)) { knownObject?.Reference?.Dispose(); } knownObjects[refCounted.Handle] = new ReferenceHolder<RefCounted>(refCounted, weak: refCounted.Refs() < 1); } }
public void Add(RefCounted refCounted) { lock (knownObjects) { ReferenceHolder<RefCounted> knownObject; if (knownObjects.TryGetValue(refCounted.Handle, out knownObject)) { var existingObj = knownObject?.Reference; if (existingObj != null && !IsInHierarchy(existingObj.GetType(), refCounted.GetType())) throw new InvalidOperationException($"Handle '{refCounted.Handle}' is in use by '{existingObj.GetType().Name}' (IsDeleted={existingObj.IsDeleted}). {refCounted.GetType()}"); } knownObjects[refCounted.Handle] = new ReferenceHolder<RefCounted>(refCounted, weak: refCounted.Refs() < 1 && !StrongRefByDefault(refCounted)); } }
Dictionary<IntPtr, ReferenceHolder<RefCounted>> knownObjects = new Dictionary<IntPtr, ReferenceHolder<RefCounted>>(256); //based on samples (average) #endregion Fields #region Methods public void Add(RefCounted refCounted) { lock (knownObjects) { ReferenceHolder<RefCounted> knownObject; if (knownObjects.TryGetValue(refCounted.Handle, out knownObject)) { var existingObj = knownObject?.Reference; if (existingObj != null) throw new InvalidOperationException($"Handle '{refCounted.Handle}' is in use by '{existingObj.GetType().Name}' (IsDeleted={existingObj.IsDeleted}"); } knownObjects[refCounted.Handle] = new ReferenceHolder<RefCounted>(refCounted, weak: refCounted.Refs() < 1 && !StrongRefByDefault(refCounted)); } }
public static void RegisterObject(RefCounted refCounted) { RefCountedCache.Add(refCounted); }
bool StrongRefByDefault(RefCounted refCounted) { if (refCounted is Scene) return true; if (refCounted is Context) return true; return false; }
bool StrongRefByDefault(RefCounted refCounted) { if (refCounted is Scene) return true; return false; }