public bool Equals(TrackerKey other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(other.NativePointer.Equals(NativePointer) && Equals(other.Type, Type)); }
internal static void ReferenceIncremented(IntPtr nativePointer, Type comObjectType) { lock (References) { var trackerKey = new TrackerKey { NativePointer = nativePointer, Type = comObjectType }; if (!References.ContainsKey(trackerKey)) throw new InvalidOperationException(string.Format("Attempted reference increment on dead object: {{NativePointer: {0}, Type: {1}}", nativePointer, comObjectType)); ++References[trackerKey]; } }
internal static void ReferenceDecremented(IntPtr nativePointer, Type comObjectType) { lock (References) { var trackerKey = new TrackerKey { NativePointer = nativePointer, Type = comObjectType }; if (!References.ContainsKey(trackerKey)) throw new InvalidOperationException(string.Format("Attempted reference decrement on dead or non-existant object: {{NativePointer: {0}, Type: {1}}", nativePointer, comObjectType)); var result = --References[trackerKey]; if (result == 0) References.Remove(trackerKey); } }
internal static void Constructed(IntPtr nativePointer, Type comObjectType) { lock (References) { var trackerKey = new TrackerKey { NativePointer = nativePointer, Type = comObjectType }; if (!References.ContainsKey(trackerKey)) { References.Add(trackerKey, 0); } ReferenceIncremented(nativePointer, comObjectType); } }
internal static void ReferenceIncremented(IntPtr nativePointer, Type comObjectType) { lock (References) { var trackerKey = new TrackerKey { NativePointer = nativePointer, Type = comObjectType }; if (!References.ContainsKey(trackerKey)) { throw new InvalidOperationException(string.Format("Attempted reference increment on dead object: {{NativePointer: {0}, Type: {1}}", nativePointer, comObjectType)); } ++References[trackerKey]; } }
public bool BeginTrackObject(object item) { if (item == null) { return(false); } var key = new TrackerKey(item); if (_trackingSet.Contains(key)) { return(false); } //Value is irrelevant here _trackingSet.Add(key); return(true); }
internal static void ReferenceDecremented(IntPtr nativePointer, Type comObjectType) { lock (References) { var trackerKey = new TrackerKey { NativePointer = nativePointer, Type = comObjectType }; if (!References.ContainsKey(trackerKey)) { throw new InvalidOperationException(string.Format("Attempted reference decrement on dead or non-existant object: {{NativePointer: {0}, Type: {1}}", nativePointer, comObjectType)); } var result = --References[trackerKey]; if (result == 0) { References.Remove(trackerKey); } } }
public bool Equals(TrackerKey other) { if (ReferenceEquals(null, other)) { return false; } if (ReferenceEquals(this, other)) { return true; } return other.NativePointer.Equals(NativePointer) && Equals(other.Type, Type); }