Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
        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];
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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];
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
                }
            }
        }
Ejemplo n.º 9
0
 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);
 }