Exemplo n.º 1
0
        // --------------------------------------------------------------------------------------------------------------------

        /// <summary>
        /// Converts the strong reference tag into a weak one and also returns it (to prevent garbage collection, the returned reference must be used/stored).
        /// This method is called within '_ObjectInfo' to make the original structure a weak reference to allow garbage collection when the other handle copies are no longer in use.
        /// <para>If called more than once, the subsequent calls will return null, which means the reference tag was already made weak.</para>
        /// </summary>
        internal _ReferenceTag _MakeWeak()
        {
            if (!(_RefTag is _WeakReferenceTag))
            {
                var currentTag = _RefTag;
                _RefTag = new _WeakReferenceTag(_RefTag);
                return(currentTag);
            }
            return(null);
        }
Exemplo n.º 2
0
        // --------------------------------------------------------------------------------------------------------------------

        /// <summary>
        /// Creates a copy of this handle with a strong reference tag to keep track of it.
        /// </summary>
        internal _Handle Clone()
        {
            _ReferenceTag refTag = null;

            if (_RefTag is _WeakReferenceTag)
            {
                ((_WeakReferenceTag)_RefTag).WeakRefTag.TryGetTarget(out refTag);
            }
            else
            {
                refTag = _RefTag;
            }
            return(new _Handle(_HandleProxy, refTag));
        }
Exemplo n.º 3
0
        // --------------------------------------------------------------------------------------------------------------------

        public _Handle(HandleProxy *handleProxy, _ReferenceTag refTag = null)
        {
            _HandleProxy = handleProxy;
            _RefTag      = refTag ?? new _ReferenceTag();
        }
Exemplo n.º 4
0
 public _WeakReferenceTag(_ReferenceTag refTag)
 {
     WeakRefTag = new WeakReference <_ReferenceTag>(refTag);
 }