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.
150 lines
3.9 KiB
150 lines
3.9 KiB
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; |
|
} |
|
} |
|
} |
|
} |