Skip to content

Commit d64a81b

Browse files
committed
Provide more plus and minus operators for collections, lists and sets.
1 parent a43847f commit d64a81b

File tree

1 file changed

+35
-1
lines changed
  • kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable

1 file changed

+35
-1
lines changed

kotlinx-collections-immutable/src/main/kotlin/kotlinx/collections/immutable/extensions.kt

+35-1
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,60 @@ inline fun <K, V> ImmutableMap<K, V>.mutate(mutator: (MutableMap<K, V>) -> Unit)
1414
inline operator fun <E> ImmutableCollection<E>.plus(element: E): ImmutableCollection<E> = add(element)
1515
inline operator fun <E> ImmutableCollection<E>.minus(element: E): ImmutableCollection<E> = remove(element)
1616

17+
18+
operator fun <E> ImmutableCollection<E>.plus(elements: Iterable<E>): ImmutableCollection<E>
19+
= if (elements is Collection) addAll(elements) else builder().also { it.addAll(elements) }.build()
20+
operator fun <E> ImmutableCollection<E>.plus(elements: Array<out E>): ImmutableCollection<E>
21+
= builder().also { it.addAll(elements) }.build()
22+
operator fun <E> ImmutableCollection<E>.plus(elements: Sequence<E>): ImmutableCollection<E>
23+
= builder().also { it.addAll(elements) }.build()
24+
25+
26+
operator fun <E> ImmutableCollection<E>.minus(elements: Iterable<E>): ImmutableCollection<E>
27+
= if (elements is Collection) removeAll(elements) else builder().also { it.removeAll(elements) }.build()
28+
operator fun <E> ImmutableCollection<E>.minus(elements: Array<out E>): ImmutableCollection<E>
29+
= builder().also { it.removeAll(elements) }.build()
30+
operator fun <E> ImmutableCollection<E>.minus(elements: Sequence<E>): ImmutableCollection<E>
31+
= builder().also { it.removeAll(elements) }.build()
32+
33+
1734
inline operator fun <E> ImmutableList<E>.plus(element: E): ImmutableList<E> = add(element)
1835
inline operator fun <E> ImmutableList<E>.minus(element: E): ImmutableList<E> = remove(element)
1936

2037

2138
operator fun <E> ImmutableList<E>.plus(elements: Iterable<E>): ImmutableList<E>
2239
= if (elements is Collection) addAll(elements) else mutate { it.addAll(elements) }
40+
operator fun <E> ImmutableList<E>.plus(elements: Array<out E>): ImmutableList<E>
41+
= mutate { it.addAll(elements) }
42+
operator fun <E> ImmutableList<E>.plus(elements: Sequence<E>): ImmutableList<E>
43+
= mutate { it.addAll(elements) }
44+
2345

2446
operator fun <E> ImmutableList<E>.minus(elements: Iterable<E>): ImmutableList<E>
2547
= if (elements is Collection) removeAll(elements) else mutate { it.removeAll(elements) }
48+
operator fun <E> ImmutableList<E>.minus(elements: Array<out E>): ImmutableList<E>
49+
= mutate { it.removeAll(elements) }
50+
operator fun <E> ImmutableList<E>.minus(elements: Sequence<E>): ImmutableList<E>
51+
= mutate { it.removeAll(elements) }
2652

2753

2854
inline operator fun <E> ImmutableSet<E>.plus(element: E): ImmutableSet<E> = add(element)
2955
inline operator fun <E> ImmutableSet<E>.minus(element: E): ImmutableSet<E> = remove(element)
3056

31-
3257
operator fun <E> ImmutableSet<E>.plus(elements: Iterable<E>): ImmutableSet<E>
3358
= if (elements is Collection) addAll(elements) else mutate { it.addAll(elements) }
59+
operator fun <E> ImmutableSet<E>.plus(elements: Array<out E>): ImmutableSet<E>
60+
= mutate { it.addAll(elements) }
61+
operator fun <E> ImmutableSet<E>.plus(elements: Sequence<E>): ImmutableSet<E>
62+
= mutate { it.addAll(elements) }
63+
3464

3565
operator fun <E> ImmutableSet<E>.minus(elements: Iterable<E>): ImmutableSet<E>
3666
= if (elements is Collection) removeAll(elements) else mutate { it.removeAll(elements) }
67+
operator fun <E> ImmutableSet<E>.minus(elements: Array<out E>): ImmutableSet<E>
68+
= mutate { it.removeAll(elements) }
69+
operator fun <E> ImmutableSet<E>.minus(elements: Sequence<E>): ImmutableSet<E>
70+
= mutate { it.removeAll(elements) }
3771

3872

3973
inline operator fun <K, V> ImmutableMap<out K, V>.plus(pair: Pair<K, V>): ImmutableMap<K, V>

0 commit comments

Comments
 (0)