Example #1
0
		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);
			}
		}
Example #2
0
        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));
            }
        }
Example #3
0
		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));
			}
		}
Example #4
0
        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);
            }
        }