| using UnityEngine; |
| using System.Collections; |
| using System.Collections.Generic; |
|
|
|
|
| namespace TMPro |
| { |
| public class FastAction |
| { |
|
|
| LinkedList<System.Action> delegates = new LinkedList<System.Action>(); |
|
|
| Dictionary<System.Action, LinkedListNode<System.Action>> lookup = new Dictionary<System.Action, LinkedListNode<System.Action>>(); |
|
|
| public void Add(System.Action rhs) |
| { |
| if (lookup.ContainsKey(rhs)) return; |
|
|
| lookup[rhs] = delegates.AddLast(rhs); |
| } |
|
|
| public void Remove(System.Action rhs) |
| { |
| LinkedListNode<System.Action> node; |
| if (lookup.TryGetValue(rhs, out node)) |
| { |
| lookup.Remove(rhs); |
| delegates.Remove(node); |
| } |
| } |
|
|
| public void Call() |
| { |
| var node = delegates.First; |
| while (node != null) |
| { |
| node.Value(); |
| node = node.Next; |
| } |
| } |
| } |
|
|
|
|
| public class FastAction<A> |
| { |
|
|
| LinkedList<System.Action<A>> delegates = new LinkedList<System.Action<A>>(); |
|
|
| Dictionary<System.Action<A>, LinkedListNode<System.Action<A>>> lookup = new Dictionary<System.Action<A>, LinkedListNode<System.Action<A>>>(); |
|
|
| public void Add(System.Action<A> rhs) |
| { |
| if (lookup.ContainsKey(rhs)) return; |
|
|
| lookup[rhs] = delegates.AddLast(rhs); |
| } |
|
|
| public void Remove(System.Action<A> rhs) |
| { |
| LinkedListNode<System.Action<A>> node; |
| if (lookup.TryGetValue(rhs, out node)) |
| { |
| lookup.Remove(rhs); |
| delegates.Remove(node); |
| } |
| } |
|
|
| public void Call(A a) |
| { |
| var node = delegates.First; |
| while (node != null) |
| { |
| node.Value(a); |
| node = node.Next; |
| } |
| } |
| } |
|
|
|
|
| public class FastAction<A, B> |
| { |
|
|
| LinkedList<System.Action<A, B>> delegates = new LinkedList<System.Action<A, B>>(); |
|
|
| Dictionary<System.Action<A, B>, LinkedListNode<System.Action<A, B>>> lookup = new Dictionary<System.Action<A, B>, LinkedListNode<System.Action<A, B>>>(); |
|
|
| public void Add(System.Action<A, B> rhs) |
| { |
| if (lookup.ContainsKey(rhs)) return; |
|
|
| lookup[rhs] = delegates.AddLast(rhs); |
| } |
|
|
| public void Remove(System.Action<A, B> rhs) |
| { |
| LinkedListNode<System.Action<A, B>> node; |
| if (lookup.TryGetValue(rhs, out node)) |
| { |
| lookup.Remove(rhs); |
| delegates.Remove(node); |
| } |
| } |
|
|
| public void Call(A a, B b) |
| { |
| var node = delegates.First; |
| while (node != null) |
| { |
| node.Value(a, b); |
| node = node.Next; |
| } |
| } |
| } |
|
|
|
|
| public class FastAction<A, B, C> |
| { |
|
|
| LinkedList<System.Action<A, B, C>> delegates = new LinkedList<System.Action<A, B, C>>(); |
|
|
| Dictionary<System.Action<A, B, C>, LinkedListNode<System.Action<A, B, C>>> lookup = new Dictionary<System.Action<A, B, C>, LinkedListNode<System.Action<A, B, C>>>(); |
|
|
| public void Add(System.Action<A, B, C> rhs) |
| { |
| if (lookup.ContainsKey(rhs)) return; |
|
|
| lookup[rhs] = delegates.AddLast(rhs); |
| } |
|
|
| public void Remove(System.Action<A, B, C> rhs) |
| { |
| LinkedListNode<System.Action<A, B, C>> node; |
| if (lookup.TryGetValue(rhs, out node)) |
| { |
| lookup.Remove(rhs); |
| delegates.Remove(node); |
| } |
| } |
|
|
| public void Call(A a, B b, C c) |
| { |
| var node = delegates.First; |
| while (node != null) |
| { |
| node.Value(a, b, c); |
| node = node.Next; |
| } |
| } |
| } |
| } |