Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1015B

  1. using Svelto.DataStructures;
  2. using System;
  3. namespace BetterWeakEvents
  4. {
  5. public class WeakEvent<T1, T2>
  6. {
  7. public static WeakEvent<T1, T2> operator+(WeakEvent<T1, T2> c1, Action<T1, T2> x)
  8. {
  9. c1._subscribers.Add(new WeakAction<T1, T2>(x));
  10. return c1;
  11. }
  12. public static WeakEvent<T1, T2> operator-(WeakEvent<T1, T2> c1, Action<T1, T2> x)
  13. {
  14. c1._subscribers.UnorderredRemove(new WeakAction<T1, T2>(x));
  15. return c1;
  16. }
  17. public void Invoke(T1 arg1, T2 arg2)
  18. {
  19. for (int i = 0; i < _subscribers.Count; i++)
  20. if (_subscribers[i].Invoke(arg1, arg2) == false)
  21. _subscribers.UnorderredRemoveAt(i--);
  22. }
  23. ~WeakEvent()
  24. {
  25. for (int i = 0; i < _subscribers.Count; i++)
  26. _subscribers[i].Release();
  27. }
  28. protected FasterList<WeakAction<T1, T2>> _subscribers = new FasterList<WeakAction<T1, T2>>();
  29. }
  30. }