public static Action Add(Action callback) { //if we already have it, just use what we have (but increment timesAdded so we know how many Remove() calls are needed) for(int n = 0; n<_listeners.Count; n++) { Action dele = (_listeners[n].weakRef.Target as Action); if(dele == callback) { _listeners[n].timesAdded++; return _listeners[n].InnerCallback; } } //create a new listener RXWeakListener listener = new RXWeakListener(); listener.weakRef = new WeakReference(callback); _listeners.Add(listener); return listener.InnerCallback; }
public static Action Add(Action callback) { //if we already have it, just use what we have (but increment timesAdded so we know how many Remove() calls are needed) for (int n = 0; n < _listeners.Count; n++) { Action dele = (_listeners[n].weakRef.Target as Action); if (dele == callback) { _listeners[n].timesAdded++; return(_listeners[n].InnerCallback); } } //create a new listener RXWeakListener listener = new RXWeakListener(); listener.weakRef = new WeakReference(callback); _listeners.Add(listener); return(listener.InnerCallback); }
public static Action Remove(Action callback) { for (int n = 0; n < _listeners.Count; n++) { Action dele = (_listeners[n].weakRef.Target as Action); if (dele == callback) { RXWeakListener listener = _listeners[n]; listener.timesAdded--; if (listener.timesAdded <= 0) { _listeners.RemoveAt(n); } return(listener.InnerCallback); } } return(null); //this shouldn't ever really happen unless someone removes more listeners than they add }