internal Enumerator(EventWithPerformanceTracker <T> evt) { m_Length = evt.m_Delegate?.length ?? 0; m_Scope = evt.m_Scope; m_ActivePerformanceTracker = -1; m_CurrentIndex = -1; m_Delegate = evt.m_Delegate; }
/// <summary> /// Remove a subscriber from this event. This is equivalent to using -= on a C# event. /// </summary> /// <param name="value"></param> public void Remove(T value) { var del = m_Delegate; while (true) { var del2 = del; var value2 = DelegateWithHandle.Remove(del2, value); del = Interlocked.CompareExchange(ref m_Delegate, value2, del2); if (del == del2) { break; } } }
/// <summary> /// Add a subscriber to this event. This is equivalent to using += on a C# event. /// </summary> /// <param name="value"></param> public void Add(T value) { // Thread-safe method to subscribe to this event. The implementation closely mirrors the compiler-generated code for events. // see https://sharplab.io/#v2:CYLg1APgAgTAjAWAFBQMwAJboMLoN7LpGYYCmAbqQHYAumcMAPAJa0B86AopbQLIDchYkKJpMAFnS8AFAEp8I9AF9kSoA=== var del = m_Delegate; while (true) { var del2 = del; var value2 = DelegateWithHandle.Add(del2, value); del = Interlocked.CompareExchange(ref m_Delegate, value2, del2); if (del == del2) { break; } } }
public EventWithPerformanceTracker(string scope) { m_Scope = scope; m_Delegate = null; }