// Copy of FSharedReferencer& operator=( FSharedReferencer const& InSharedReference ) // - Assignment operator adds a reference to the assigned object. If this counter was previously // referencing an object, that reference will be released. public void CopyFrom(FText other) { if (other == null || other.nativeAddress == IntPtr.Zero) { return; } IntPtr oldReferenceController = nativeAddress == IntPtr.Zero ? IntPtr.Zero : nativeInstance->TextData.ReferenceController; IntPtr newReferenceController = other.nativeInstance->TextData.ReferenceController; // Make sure we're not be reassigned to ourself! if (newReferenceController != oldReferenceController) { // First, add a shared reference to the new object if (newReferenceController != IntPtr.Zero) { Native_FReferenceControllerOps.AddSharedReference(newReferenceController, espMode); } // Release shared reference to the old object if (oldReferenceController != IntPtr.Zero) { Native_FReferenceControllerOps.ReleaseSharedReference(oldReferenceController, espMode); } // Assume ownership of the assigned reference counter *nativeInstance = *other.nativeInstance; } }
/// <summary> /// Releases a weak reference to the counter /// </summary> public void ReleaseWeakReference(ESPMode mode) { Native_FReferenceControllerOps.ReleaseWeakReference(ReferenceController, mode); }
/// <summary> /// Adds a shared reference to the counter ONLY if there is already at least one reference /// </summary> /// <param name="mode"></param> public void ConditionallyAddSharedReference(ESPMode mode) { Native_FReferenceControllerOps.ConditionallyAddSharedReference(ReferenceController, mode); }
/// <summary> /// Adds a weak reference to the counter /// </summary> public void AddWeakReference(ESPMode mode) { Native_FReferenceControllerOps.AddWeakReference(ReferenceController, mode); }
public IntPtr ReferenceController;// Could be called either SharedReferenceCount or ReferenceController (the actual pointer) /// <summary> /// Returns the number of shared references to this object (including this reference.) /// IMPORTANT: Not necessarily fast! Should only be used for debugging purposes! /// </summary> /// <returns></returns> public int GetSharedReferenceCount(ESPMode mode) { return(Native_FReferenceControllerOps.GetSharedReferenceCount(ReferenceController, mode)); }