1
+ package com.lightningkite.kotlin.lambda
2
+
3
+ /* *
4
+ *
5
+ * Created by joseph on 9/27/17.
6
+ */
7
+
8
+ inline fun <A > MutableCollection <(A ) -> Unit>.addInvokeOnce(crossinline lambda : (A ) -> Unit ) {
9
+ add(object : (A ) -> Unit {
10
+ override fun invoke (a : A ) {
11
+ lambda.invoke(a)
12
+ remove(this )
13
+ }
14
+ })
15
+ }
16
+
17
+ inline fun <A , B > MutableCollection <(A , B ) -> Unit>.addInvokeOnce(crossinline lambda : (A , B ) -> Unit ) {
18
+ add(object : (A , B ) -> Unit {
19
+ override fun invoke (a : A , b : B ) {
20
+ lambda.invoke(a, b)
21
+ remove(this )
22
+ }
23
+ })
24
+ }
25
+
26
+ inline fun <A , B , C > MutableCollection <(A , B , C ) -> Unit>.addInvokeOnce(crossinline lambda : (A , B , C ) -> Unit ) {
27
+ add(object : (A , B , C ) -> Unit {
28
+ override fun invoke (a : A , b : B , c : C ) {
29
+ lambda.invoke(a, b, c)
30
+ remove(this )
31
+ }
32
+ })
33
+ }
34
+
35
+ inline fun <A > MutableCollection <(A ) -> Unit>.addInvokeOnce(crossinline filter : (A ) -> Boolean , crossinline lambda : (A ) -> Unit ) {
36
+ add(object : (A ) -> Unit {
37
+ override fun invoke (a : A ) {
38
+ if (filter.invoke(a)) {
39
+ lambda.invoke(a)
40
+ remove(this )
41
+ }
42
+ }
43
+ })
44
+ }
45
+
46
+ inline fun <A , B > MutableCollection <(A , B ) -> Unit>.addInvokeOnce(crossinline filter : (A , B ) -> Boolean , crossinline lambda : (A , B ) -> Unit ) {
47
+ add(object : (A , B ) -> Unit {
48
+ override fun invoke (a : A , b : B ) {
49
+ if (filter.invoke(a, b)) {
50
+ lambda.invoke(a, b)
51
+ remove(this )
52
+ }
53
+ }
54
+ })
55
+ }
56
+
57
+ inline fun <A , B , C > MutableCollection <(A , B , C ) -> Unit>.addInvokeOnce(crossinline filter : (A , B , C ) -> Boolean , crossinline lambda : (A , B , C ) -> Unit ) {
58
+ add(object : (A , B , C ) -> Unit {
59
+ override fun invoke (a : A , b : B , c : C ) {
60
+ if (filter.invoke(a, b, c)) {
61
+ lambda.invoke(a, b, c)
62
+ remove(this )
63
+ }
64
+ }
65
+ })
66
+ }
0 commit comments